首页 > 代码库 > Shell 脚本入门--下

Shell 脚本入门--下

  Shell 脚本入门--下

本为大家介绍,本篇介绍内容有:逻辑运算符(& 、| 、!、^)、测试命令、脚本的执行过程

1、逻辑运算符

(1)&与和&&短路与

    True 、false

     1       0

  与:

    1 & 1 = 1  

    1 & 0 = 0

    0 & 1 = 0

    0 & 0 = 0

            对于&来说,如果左侧条件为false,也会计算右侧条件的值。特点只要有一个false就认为是false

       短路与:

                    false && = false

                    true && false = false

                    true && true =true

            短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。

(2) | 或和 || 短路或

  或:

    1 或 1 = 1

    1 或 0 = 1

    0 或 1 = 1

    0 或 0 = 0

            对于 | 来说,如果左侧条件为true,也会计算右侧条件的值。特点只要有一个true就认为是true

        短路或:

                     true && = true

                     false && true =true

                     false && false= false

    对于 || 来说,如果左侧的条件为true,则不计算右侧的条件,这种现象被称作短路现象。

       (3)非!:取反

      ! 1 = 0

       ! 0 = 1

    异或: ^

      异或的两个值,相同为假,不同为真

2、测试命令:

      test EXPRESSION

      [ EXPRESSION ]

      [[ EXPRESSION ]]

  注意:EXPRESSION 前后必须有空白字符

  条件性的执行操作符:&&、||

      a &&b 当a执行成功后才会执行b

      c ||d 当c执行失败了才会执行d

  长格式的例子:

      test "$A" == "$B" && echo "Strings are equal"

      test “$A” -eq “$B” && echo "Integers are equal"

  简写格式的例子:

      [ "$A" == "$B" ] && echo "Strings are equal"

      [ "$A" -eq "$B" ] && echo "Integers are equal"

  bash 数值测试:

      -v VAR :变量VAR 是否设置

    数值测试:

        -gt 是否大于

        -ge 是否大于等于

        -eq 是否等于

        -ne 是否不等于

        -lt 是否小于

        -le 是否小于等于

   字符串测试:

        == 是否等于

        > ascii 码是否大于ascii码 码

        < 是否 小于

        != 是否 不等于

        =~ 左侧 字符串是否能够被右侧的PATTERN所 所 匹配

        z "STRING“ 字符串是否为空,空为真,不空为假

        -n "STRING“ 字符串 是否不空,不空为真,空为假

        注意:(1)用于字符串比较时的用到的操作数都应该使用引号

  

3、脚本的执行过程
    

技术分享

          (3-1)  当判断语句块操作结束时,仍有操作需要执行的情况:将余下操作按顺序执行,直至最后一条命令完毕后,退出

技术分享

          (3-2)   当判断语句块操作结束时,脚本中已没有语句需要执行,直接退出脚本。


4、练习
    
  编写一个脚本/root/bin/createuser.sh,脚本的执行语法必须是:
    (1)createuser.sh -u username -m password,选项与参数间可支持多空格,但不能顺序颠倒。
    (2)当未指定正确的选项或参数时,以错误输出方式提示“createuser.sh -u username -m password ”后退出脚本。
    (3)用户名必须以字母开头,可包括数字和_。否则不合法。以错误输出提示用户"用户名仅包含字母数据和下划线"
    (4)当用户名检测合法后,判断用户名是否已存在,若存在,再判断用户是否已设置过密码,若设置过密码,直接退出,未设置,则将密码设置为所指定的密码后以正确输出方式显示“username 密码已更新后退出”
    (5)当用户名不存在,则创建用户,并为该用户设置所指定的密码后以正确输出方式显示“用户username已创建并更新密码”
    (6)要求脚本执行过程中不能有非要求的其他输出结果出现。脚本在非正确方式退出时应反回给?参数非0值。
 
-------------------------------------------------------答案如下---------------------------------------------------------------------------------------------
vim createuser.sh
#!/bin/bash
[ $1 = "-u" -a $3 = "-m" ] &>/dev/null &&(
        echo $2 |egrep "\<^[[:alpha:]]([[:digit:]]|_|[[:alpha:]])*$\>" &>/dev/null &&(
                `id $2 &>/dev/null` &&(
                        [ `getent shadow $2 |cut -d: -f2` = "!!" ] &&(
                                echo $4 |passwd --stdin $2 &>/dev/null &&echo 用户${2}密码已更新;exit 0
                                ) ||(echo 密码已存在 ;exit)
                ) ||(`useradd $2` ;echo $4 |passwd --stdin $2 &>/dev/null &&echo 用户${2}已创建并更新密码;exit 0)
        ) ||(echo 用户名仅包含字母数据和下划线 ;exit)
) ||(echo createuser.sh -u username -m password && exit 1)
 
 
#Explation:
#判断脚本格式是否正确(正确则进一步判断用户名是否合法)
#       判断用户名是否合法(合法则进一步判断用户是否已存在)
#               判断用户是否已存在(若存在,则进一步判断是否设置过密码)
#                       判断是否设置过密码(若没有设置密码,为其更新密码后,提示并退出)
#                       若密码已设置,提示后退出
#               用户不存在,创建用户并设置密码后,退出且提示
#       用户名不合法,退出并提示
#脚本不符合要求,退出并提示
            

  

Shell 脚本入门--下