源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

shell脚本编程之for语句、if语句使用介绍

  • 时间:2021-03-28 22:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:shell脚本编程之for语句、if语句使用介绍
上部: 面向过程: 顺序执行 选择执行: if, case 循环执行: for, while, until 一、for语句   格式:      for 变量 in 列表;do         语句1;         语句2;         ...      done    例1、写一个脚本,添加10个用户,并让每个用户的密码同用户名】
[u]复制代码[/u] 代码如下:
       #!/bin/bash        for I in {1..10}; do           useradd user$I;        echo user$I | passwd --stdin user$I        done
  例2、写一个脚本,分别显示 /tmp/1.dir /tmp/2.dir /tmp/3.dir三个文件的时间戳,并将这三个文件被修改的时间改为201003030303.03
[u]复制代码[/u] 代码如下:
        #!/bin/bash         for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do            stat $Dir            touch -m -t 201003030303.03 $Dir            stat $Dir         done
bash的变量类型:     本地变量     局部变量     环境变量     位置变量 :$1、$2、$3、$4....     特殊变量:         $?: 用于保存刚刚执行的命令的状态返回值; 0:成功执行;1-255:失败,1,2,127 可以使用exit命令在脚本中自定义脚本执行状态返回值;如果不定义,脚本执行状态返 回值取决于脚本执行结束前最后执行的那个语句的状态;        $@, $*: 所有位置参数;        $#: 位置参数的个数;        $0: 脚本名称 二、if语句 1、单分支if语句:       格式:           if 条件; then 语句1 语句2   ...            fi      例3、写一个脚本,实现如下功能: 如果用户存在,就说明其存在;
[u]复制代码[/u] 代码如下:
#!/bin/bash    UserName=user1  if grep "^$UserName\>" /etc/passwd &> /dev/null; then     echo "$UserName exists."  fi
    例4、写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点;
[u]复制代码[/u] 代码如下:
#!/bin/bash Device='/dev/sda3' if mount | grep "^$Device" &> /dev/null; then    mount | grep "/dev/sda3" | cut -d' ' -f3 fi
例5、写一个脚本,实现如下功能: 如果/etc/rc.d/rc.sysinit中有空白行,就显示其空白行数;
[u]复制代码[/u] 代码如下:
    #!/bin/bash      File='/etc/rc.d/rc.sysinit'     if grep "^$" $File &> /dev/null; then      grep "^$" $File | wc -l     fi
2、双分支if语句:   格式:    if 条件; then  语句1  语句2  ... else  语句1  语句2  ... fi    例6、写一个脚本,实现如下功能:      如果设备/dev/sda3已经挂载,就显示其挂载点;否则,就说明其未挂载或设备不存在;
[u]复制代码[/u] 代码如下:
        #!/bin/bash           Device='/dev/sda3'         if mount | grep "^$Device" &> /dev/null; then            mount | grep "/dev/sda3" | cut -d' ' -f3         else           echo "$Device not mounted or not exist."         fi
3、多分支if语句:     格式:     if 条件1; then  语句1  语句2  ... elif 条件2; then  语句1  语句2  ... elif 条件3; then  语句1  语句2  ... else  语句1  语句2  ... fi    例7、写一个脚本:       判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。       如果其生产商为GenuineIntel,就显示其为Intel公司;       如果其生产商为AuthenticAMD,就显示其为AMD公司;      否则,就显示无法识别;
[u]复制代码[/u] 代码如下:
    #!/bin/bash        Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`        if [[ $Vendor =~ [[:space:]]*GenuineIntel$ ]]; then          echo "intel"        elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then          echo "AMD"        else          echo "Unknown"        fi
下部: 一、bash条件测试:      整数测试   [ expression ]      字符测试     [[ expression ]]      条件测试     test expression   test 根据表达式求值的结果返回 0(真)或 1(假) 1、整数测试:数值比较          -gt   大于          -ge   大于或等于          -eq   等于          -lt   小于          -le   小于或等于          -ne    不等于 例1:写一个脚本,生成两个随机数,比较其大小;显示大数; bash有个内置变量:$RANDOM
[u]复制代码[/u] 代码如下:
#!/bin/bash   A=$RANDOM   B=$RANDOM if [ $A -ge $B ]; then   echo "Max number is $A." else   echo "Max number is $B." fi
例2:写一脚本,随机生成一个整数,判定,显示其奇偶性;
[u]复制代码[/u] 代码如下:
#!/bin/bash # A=$RANDOM if [ $[$A%2] -eq 0 ]; then   echo "$A: Even" else   echo "$A: Odd" fi
例3、写一个脚本: 计算100以内所有奇数的和以及所有偶数的和;分别显示之;
[u]复制代码[/u] 代码如下:
#!/bin/bash EvenSum=0 OddSum=0 for I in {1..100}; do   if [ $[$I%2] -eq 0 ]; then     EvenSum=$[$EvenSum+$I]   else     OddSum=$[$OddSum+$I]   fi done echo "EvenSum is: $EvenSum. OddSum is: $OddSum."
例4、计算N以内所有奇数的和以及所有偶数的和;分别显示之;N是通过参数传递过来的正整数;
[u]复制代码[/u] 代码如下:
#!/bin/bash EvenSum=0 OddSum=0 for I in `seq 1 $1`;do   if [ $[$I%2] -eq 1 ]; then     OddSum=$[$OddSum+$I]   else     EvenSum=$[$EvenSum+$I]   fi done echo "EvenSum: $EvenSum." echo "OddSUm: $OddSum." echo "Sum: $[$EvenSum+$OddSum]"
例5、写一个脚本,完成以下要求:      1、添加10个用户user1, user2, ..., user10;但要先判断用户是否存在,不存在而后再添加;      2、添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;      3、最后显示当前系统上共有多少个用户;
[u]复制代码[/u] 代码如下:
#!/bin/bash Count=0 for I in {1..10}; do   if id user$I &> /dev/null; then     echo "user$I exists."   else     useradd user$I     echo "Add user$I successfully."     Count=$[$Count+1]   fi done echo "Add $Count new users." echo "Total users: `wc -l /etc/passwd | cut -d' ' -f1`."
2、bash字符测试:        >: 大于        <: 小于       ==: 等于       =~: 判断左边的字符串是否能够被右边的模式所匹配;通常用于[[]];          [[ $opt1 =~ $opt2 ]]一般做行首、行尾锚定;不要加引号  单目:      -z $STRING: 为空则为真,不空则为假;      -n $STRING: 为空则为假,不空则真; 例6、写一个脚本,判定用户的shell是否为bash;
[u]复制代码[/u] 代码如下:
#!/bin/bash Shell=`grep "^$1:" /etc/passwd | cut -d: -f7` if [ "$Shell" == "/bin/bash" ]; then   echo "Bash User."   Ret=0 else   echo "Not Bash User."   Ret=9 fi exit $Ret
例7、根据用户shell的结束符是否为sh来判定其是否为登录用户:
[u]复制代码[/u] 代码如下:
#!/bin/bash Shell=`grep "^$1:" /etc/passwd | cut -d: -f7` if [ -z $Shell ]; then   echo "No shell."   exit 3 fi if [[ "$Shell" =~ sh$ ]]; then   echo "Login User."   Ret=0 else   echo "None Login User."   Ret=4 fi exit $Ret
二、bash测试之文件测试:     操作符 文件路径        -f: 测试其是否为普通文件,即ls -l时文件类型为-的文件;        -d: 测试其是否为目录文件,即ls -l时文件类型为d的文件;        -e: 测试文件是否存在;存在为真,否则为假;        -r: 测试文件对当前用户来说是否可读;        -w: 测试文件对当前用户来说是否可写;        -x: 测试文件对当前用户来说是否可执行;        -s: 测试文件大小是否不空,不空则真,空则假; 短路操作:只要前半段已经可以决定最终结果,后半段就不再运算;  与运算:    真 && 真 =  真    真 && 假 =  假    假 && {真|假} = 假  或运算:    假 || 0 = 0    假 || 1 = 1    真 ||   =1 例8、给定一个路径,判断如果为普通文件,显示之;如果为目录,显示之;       否则,说无法识别;
[u]复制代码[/u] 代码如下:
#!/bin/bash if [ ! -e $1 ]; then   echo "No such file."   exit 7 fi if [ -f $1 ]; then   echo "Common file." elif [ -d $1 ]; then   echo "Directory." else   echo "Unknown file." fi
综合例子: 写一个脚本:可以接受一个参数,其使用形式如下: script.sh {start|stop|restart|status} 如果参数为start,创建空文件/var/lock/subsys/script,并显示“Starting script successfully.”; 如果参数为stop,则删除文件/var/lock/subsys/script,并显示“Stop script finished.”; 如果参数为restart,则删除文件/var/lock/subsys/script后重新创建,并显示“Restarting script successfully.”; 如果参数为status,那么: 如果/var/lock/subsys/script文件存在,则显示为“script is running.” 否则,则显示为“script is stopped.” 其它任何参数:则显示“script.sh {start|stop|restart|status}”
[u]复制代码[/u] 代码如下:
#!/bin/bash if [ $1 == start ] ;then    touch /var/lock/subsys/script    echo "Starting script successfully."  elif [ $1 == stop ] ; then     rm -f /var/louk/subsys/script     echo "Stop script finished."  elif [ $1 == restart ];then      rm -f /var/louk/subsys/script      touch  /var/lock/subsys/script     echo "Restarting script successfully."   elif [ $1 == status ];then      [ -e /var/lock/subsys/script ]&& echo "script is running." || echo "script is stopped."  else    echo "script.sh {start|stop|restart|status}" fi
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部