条件判断,控制结构:
    单分支if语句
        if 判断条件;then(then放下一行可省略“,”)
            statement1
            statement2
            ...
        fi
    双分支的if语句
        if 判断条件;then
            statement1
            statement2
            ...
        else
            statement4
            statement5
            ...
        fi
    多分支的if语句
        if 判断条件1;then
            statement1
            ...
        elif 判断条件2;then
            statement2
            ...
        elif 判断条件3;then
            statement3
            ...
        else
            statement4
            ...
        fi
        
课堂1:写一个脚本
    判断当前系统上是否有用户的默认shell为bash
    如果有,就显示有多少个这类用户,否则,就显示没有这类用户        
    
    【提示】
    1.“引用”一个命令的执行结果,要使用命令引用,比如:RESAULTS=`wc -l /etc/passwd | cut -d: -f1`
    2.使用一个命令的执行结果,要直接执行此命令,一定不能引号,比如:if id user1一句话中的id命令就不能加引号
    3.如果想把一个命令的执行结果赋值给某些变量,要使用命令引用,比如USERRID=·id -uuser1`
    4.如果想把一个命令的执行状态结果保存下来,并作为执行成功与否的判断条件,则需先执行此命令,而后引用其状态结果,如
        id -u user1
        RETVAL=$?
        此句绝不可以写成RESVAL=`id -u user1`
    

wKioL1bbm_Szea9zAAAtAK34Gek658.gif

wKiom1bbm3fybBM9AAAeK-UUCtU836.gif


课堂2:写一个脚本
    判断当前系统上是否有用户的默认shell为bash
    如果有,就显示其中一个的用户名,否则,就显示没有这类用户    
    

wKioL1bbnCSwOFTHAAAlhLSSBWk651.gif

wKioL1bbnCXz8xxEAAAbqruag-o984.gif

wKioL1bbnCWj1PZuAAA3lGsUoPw947.gif


课堂3:写一个脚本
    判断/etc/inittab中是否有空白行
    如果有,则显示其空白行数,否则,显示没有空白行
wKiom1bbn72Qyhb0AAAjaB0-tdI761.gif

课堂4:写一个脚本
    给定一个用户,判断其UID与GID是否一样
    如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”
    (进一步要求:不使用id命令获取其id号)

wKiom1bbm7-BdMtrAAAh72z_404538.gif

wKiom1bbm7-xfvntAAAdQxwBp2s453.gif

wKioL1bbnD7z8mOCAAAxgVwwhv8147.gif

wKioL1bbnD6AXPVoAAAd45LsYTU747.gif

课堂5:写一个脚本    
    给定一个用户,获取其密码警告期限
    而后判断用户最近一次修改密码时间距今天是否已经小于警告期限
    如果小于,则显示“warning”,否则,就显示"OK"
    【提示】算术运算的方法$[$A-$B]:表示变量A的值减去变量B的值的结果
    圆整:丢弃小数点后的所有内容
    

wKiom1bbm9qgwARwAAAp24osnog263.gif

wKioL1bbnFnTqOhOAAAgCu3FSlg391.gif

wKiom1bbm9vQzBWiAABBvtYHZMs189.gif


课堂6:写一个脚本
    判定命令历史中历史命令总条目是否大于1000,如果大于,显示“Some command will gone.”,否则显示“OK”.
    (history 只保留最近1000个命令,虽然能看见大于1000个命令)
    

wKioL1bbnHzxKWqBAAAbi7Bvl5A034.gif

wKioL1bbnHzQkQLWAAAfkF3B3MQ753.gif

shell中如何进行算术运算
    A=3
    B=4
1,let 算术运算表达式
    let C=$[$A+$B]
2,$[算术运算表达式]
    C=$[$A+$B]
3,$((算术运算表达式))
    C=$(($A+$B))
4,expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
    C=`expr $A + $B`
wKiom1bbnCaxvyk5AAAz-CizTWY827.gif
退出脚本:exit(1-255都可)
    例如:
    exit 8
    exit #:
       如果脚本没有定义退出状态,那么最后执行的一条命令的退出码即为脚本的退出状态码

测试脚本是否有语法错误:      bash -n
单步执行,显示每一步命令执行结果:  bash -x
    

wKioL1bbnMvCsRgDAAAmyb2Kupc125.gif

wKioL1bbnMuiHJdnAAAd-ZdC6VA860.gif

文件测试:[ -e /etc/passwd ]
    -e FILE:测试文件是否存在
    -f FILE:测试文件是否为普通目录
    -d FILE:测试指定路径是否为目录
    -r FILE:测试当前用户对指定文件是否有读取权限
    -w FILE:测试当前用户对指定文件是否有写权限
    -x FILE:测试当前用户对指定文件是否有执行权限
课堂7:写一个脚本
    给定一个文件,如果是普通文件,就显示之
    如果给定一个目录,亦显示之
    否则,此为无法识别的文件

wKiom1bbnLeQN8-SAAA17OZ83wg576.gif

wKiom1bbnLfjGNTWAAArRXXBd_0849.gif

wKiom1bbnLegZ7LQAAA2yi7u7QU428.gif


bash变量类型
        环境变量
        本地变量
        位置变量
        特殊变量
    
    本地变量
        VARNAME=VALUE:作用域为整个bash进程
    局部变量
        local VARNAME=VALUE:作用域为当前代码段
    环境变量:作用域为当前shell进程及其子进程:
        export VARNAME=VALUE
        
        VARNAME=VALUE
        export VARNAME
            "导出"
    位置变量
        ./filetest.sh  /etc/fsttab  /etc/inittab
        $1: /etc/fsttab
        $2: /etc/inittab
        ……

wKiom1bbnWDQIIb-AAAdAgZ64HE668.gif

wKiom1bbnWDTKMGuAAAlrfobmTQ796.gif

wKioL1bbnd-B9wNHAABGYabqW1o325.gif

wKioL1bbnd_i8t7WAAA2_VINqQU746.gif

wKioL1bbnd_iy1VmAAAh9XpdE40773.gif

        shift:默认踢去第一个参数(第二个参数变成第一个参数)
            shift n :踢掉n个参数
                shift 2(第三个参数变成第一个参数)

wKiom1bbnXTTdIFtAAAc67Pp9iM975.gif

wKioL1bbnfLgWZJYAAAkXQdreqU856.gif

wKiom1bbnXTzj9opAAAlaBYhPJQ283.gif

wKiom1bbnXSSsccdAAAa05HEo5s893.gif

    特殊变量
    $? : 上一个命令的执行状态返回值
        程序执行,有两类返回值
        程序执行结果
        程序转态返回代码(0-255)
        0:正确执行
        1-255:错误执行  1,2,127系统预留
    $#:参数的个数
        如果不是大于等于1,就要加参数(提示用户加参数)    
    

wKioL1bbngbwUfhTAAAnCMZPaUU464.gif

wKiom1bbnYjDtwFHAAAm2mPEa7s140.gif


课堂8,写一个脚本
    给脚本传递两个参数(整数)
    显示此两者之和,之积

wKiom1bbnSOD4_78AAArZTIgMtE096.gif

wKioL1bbnaLRHAp3AAAa_lI1p_c361.gif