今天看啥
    热点:

      天发国际娱乐官网:  回溯历史,尽管三国时期出现了曹操“唯才是举”的权宜政策,但无论文艺还是吏治,德才兼备一直是一个主流的境界期待。

      bash 编程中循环语句用法,bash编程语句用法


      1.if 是单分支语句,使用格式如下:
      if condition ; then
      statement
      …..
      fi
      2.if … else 是双分支语句,使用格式如下:
      if condition ; then
      statement
      ….
      else
      statement
      ….
      fi
      3.if …elif…elif…else 是多分支语句,使用格式如下:
      if condition ; then
      statement
      ….
      elif condition ; then
      statement
      …..
      elif condition ; then
      statement
      …..
      .
      .
      .
      else
      statement
      ….
      fi
      4.while 语句是循环语句,当条件满足的情况下才循环,不满足则退出循环,使用格式如下:
      while condition ; do
      statement
      …..
      done
      5.until 语句也是循环语句,当条件不满足的情况下循环,满足则不循环,使用格式如下:
      until condition ; do
      statement
      …..
      done
      6.case 也是循环语句,使用格式如下:
      case $var(变量) ; in
      value1)
      ……

      value2)
      …..

      *)

      ..
      ..
      ..
      esac

      脚本练习:

      1.计算100以内所有能被3整除的正整数的和。
      复制代码 代码如下:
      #!/bin/bash
      declare -i sum=0
      for I in {1..100}; do
      if [ $[$I%3] -eq 0 ]; then
      let sum+=$I
      fi
      done
      echo " the sum is :$sum"

      2.计算100以内所有奇数的和以及所有偶数的和
      复制代码 代码如下:
      #!/bin/bash
      # echo "exercise"
      declare -i sum1=0
      declare -i sum2=0
      for I in {1..100}; do
      if [ $[$I%2] -eq 0 ]; then
      let sum1+=$I
      else
      let sum2+=$I
      fi
      done
      echo " the even sum is :$sum1"
      echo " the oddnumber sum is :$sum2"

      3.判断/var/log下的文件的类型:
      如果是普通文件,则说明其为普通文件;
      如果是目录文件,则说明其为目录文件;
      如果是符号链接文件,则说明其为符号链接文件;
      否则,说明文件类型无法识别;
      复制代码 代码如下:
      #!/bin/bash
      file1=/var/log/*
      for file in $file1 ; do
      if [ -f $file ]; then
      echo "$file is common file"
      elif [ -d $file ]; then
      echo "$file is directory file"
      else
      echo "$file is unknow"
      fi
      done

      4.写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为
      /sbin/nologin的用户
      并统计各类shell下的用户总数,显示结果形如:bash,3user,they
      are:root,redhat,gentoo nologn,2user,they are:bin,ftp
      复制代码 代码如下:
      #!/bin/bash
      file=/etc/passwd
      bsh='/bin/bash'
      nobsh='/sbin/nologin'
      use=`cat $file | cut -d: -f1`
      declare -i d1=0
      declare -i d2=0
      for I in $use ; do
      s=`grep "^$I:" $file | cut -d: -f7`
      if [ "$s" = $bsh ] ; then
      let d1=$d1+1
      muser=$I\,$muser
      elif [ "$s" = $nobsh ] ; then
      let d2=$d2+1
      suser=$I\,$suser
      fi
      done
      echo "BASH,$d1 users ,they are:"
      echo $muser
      echo
      echo "NOLOGIN,$d2 users ,they are:"
      echo $suser

      5.写一个脚本:
      (1)如果不存在,就创建文件/tmp/maintenance;如果存在,就事先删除
      (2)在文件/tmp/maintenance中添加如下内容:
      172.16.0.6
      172.16.0.17
      172.16.0.20
      (3)测试172.16.0.0/16网络内的所有主机是否在线,如果在线就显示其在线,如果此主机
      在/tmp/maintenance文件中,就显示其正处于维护状态;否则,就显示其状态未知;
      复制代码 代码如下:
      #!/bin/bash
      file=/tmp/maintenace
      if [ -e $file ]; then
      rm -rf $file &> /dev/null
      fi
      touch $file
      cat >> $file << EOF
      172.16.0.6
      172.16.0.17
      172.16.0.20
      EOF
      bnet=172.16
      for net in {0..254} ; do
      for host in {1..254} ; do
      if ping -c1 -W1 $bnet.$net.$host &> /dev/null ; then
      echo "$bnet.$net.$host is up."
      elif grep "$bnet.$net.$host$" $file &> /dev/null ;then
      echo "$bnet.$net.$host is under maintenance."
      else
      echo "$bnet.$net.$host state is unknow."
      fi
      done
      done

      6写一个脚本,完成以下功能:
      (1)、提示用户输入一个用户名;
      (2)、显示一个菜单给用户,形如:
      U|u show UID
      G|g show GID
      S|s show SHELL
      Q|q quit
      (3)、提醒用户选择一个选项,并显示其所选择的内容;如果用户给的是一个非上述所提示的选项,则提醒用户给出的选项错误,并请其重新选择后执行;
      第一种方法:
      复制代码 代码如下:
      #!/bin/bash
      read -p "Enter a user name:" username
      ! id $username &> /dev/null && echo " Come on ,the user you input unexit" && exit 9
      cat << EOF
      U|u show UID
      G|g show GID
      S|s show SHELL
      Q|q quit
      EOF
      read -p "Enter your choice:" op
      case $op in
      U|u)
      id -u $username;;
      G|g)
      id -g $username;;
      S|s)
      grep "^$username\>" /etc/passwd | cut -d: -f7;;
      Q|q)
      exit 8 ;;
      *)
      echo "input option wrong ,quit"
      exit 9

      esac

      第二种方法:
      复制代码 代码如下:
      #!/bin/bash
      read -p "Enter a user name:" username
      ! id $username &> /dev/null && echo "Come on ,you input user notexit" && exit 9
      cat << EOF
      U|u show UID
      G|g show GID
      S|s show SHELL
      Q|q quit
      EOF
      read -p "Enter your option:" op
      while true; do
      case $op in
      U|u)
      id -u $username
      break

      G|g)
      id -g $username
      break

      S|s)
      grep "^$username\>" /etc/passwd | cut -d: -f7
      break

      Q|q)
      exit 7 ;;
      *)
      read -p "Wrong option,Enter a right option:" op ;;
      esac
      done

      7写一个脚本:
      (1)、判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;
      (2)、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出。
      第一种方法
      复制代码 代码如下:
      #!/bin/bash
      [ ! -f $1 ] && echo "wrong path." && exit 2
      until bash -n $1 &> /dev/null ; do
      read -p " Q|q to quit .others to edit:" opt
      case $opt in
      Q|q)
      echo "quit..."
      exit 3

      *)
      vim $1

      esac
      done

      第二种方法:
      复制代码 代码如下:
      #!/bin/bash
      [ ! -f $1 ] && echo "wrong path." && echo "Quit!" && exit 9
      until bash -n $1 &> /dev/null ; do
      read -p " Grammar wrong please enter Q|q to quit .others to edit:" opt
      case $opt in
      Q|q)
      echo "quit..."
      exit 3

      *)
      vim $1
      bash -n $1 &> /dev/null
      val=$?
      [ "$val" -ne 0 ] && echo "xiu gai bu cheng gong. "

      esac
      done

      第三种方法
      复制代码 代码如下:
      #!/bin/bash
      [ ! -f $1 ] && echo "Wrong scripts." && exit 4
      bash -n $1 &> /dev/null
      valu=$?
      until [ $valu -eq 0 ] ; do
      read -p "Q|q to quit ,others to edit:" op
      case $op in
      Q|q)
      echo "Quit."
      exit 9

      *)
      vim $1
      bash -n $1 &> /dev/null
      valu=$?

      esac
      done

      8 写一个脚本:
      查看redhat用户是否登录了系统,如果登录了,就通知当前脚本执行者“redhat
      is logged on.”;否则,就睡眠5秒钟后再次进行测试;直到其登录为止退出;
      第一种方法
      复制代码 代码如下:
      #!/bin/bash
      who | grep "^redhat\>" &> /dev/null
      reval=$?
      until [ $reval -eq 0 ] ;do
      sleep 5
      who | grep "^redhat\>" &> /dev/null
      reval=$?
      done
      echo "redhat is logged on."

      第二种方法:
      复制代码 代码如下:
      #!/bin/bash
      until who | grep "^redhat\>" &> /dev/null ; do
      sleep 5
      done
      echo "redhat is logged on"

      9写一个脚本:
      (1)、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要使用while循环;
      (2)、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;
      (3)、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如 stu1, UID: 1000, GID: 1000
      复制代码 代码如下:
      #!/bin/bash
      declare -i I=1
      while [ $I -le 20 ] ; do
      l=linuxer$I
      let I++
      ! id $l &> /dev/null && useradd $l &> /dev/null && echo "the user:$l" | passwd --stdin $l &> /dev/null && echo "a dd user $l successfully" || echo " The user $l is exit. "
      d=`id -u $l`
      g=`id -g $l`
      echo " $l ,UID:$d,GID:$g "
      done

      本文出自 “知识体系” 博客

      www.1click-soft.comtruehttp://www.1click-soft.com/shelljc/1269042.htmlTechArticlebash 编程中循环语句用法,bash编程语句用法 1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使...

      相关文章

      相关搜索: bash 循环语句

      帮客评论

      视觉看点
      百度 360 搜狗