bash脚本编程之变量、变量类型、条件测试、算术运算、及特殊变量


 一、学习目的

       1、了解bash脚本的变量类型及变量的使用

       2、了解bash中条件测试的种类及如何在bash中实现条件的判断

       3、学会在bash中做算术运算

       4、了解特殊变量的使用

二、学习内容

      1)、 ①、bash的变量类型: 环境变量 、本地变量、局部变量、位置变量、特殊变量

            环境变量: export VALUENAME = VALUE 作用领域是当前的shell进程及其子进程

            本地变量: VALUENAME= VALUE 作用领域为整个bash的进程

            局部变量;local VALUENAME= VALUE 作用领域是当前的代码段

            位置变量:$1 、$2、$3、$4... 指引用脚本后面的第几个参数

            特殊变量:

                    $?:上一个命令执行状态返回值 

                    $#:查询参数的个数

                    $*:显示参数的列表

                    $@:显示参数的列表

             

            ②、 如何引用变量:

                     ${VALUENAME}  花括号大多数可以省略  

            ③、变量名称的命名规则:

                          #只能包含字母,数字,下划线,并且不能以数字开头

                          #不应该跟系统中的已有的环境变量名重名

                          #尽量做到见名思义  

-----------------------------------------------------------------------------

       2)、①、bash中常用的条件测试有三种: 整数测试、字符串测试、文件测试

              整数测试: 

                      -eq : 测试两个整数是否相等  [ $A -eq $ B ] ;相等为真

                      -ne : 测试两个整数是否不相等 ;不等为真

                      -gt :测试一个整数是否大于另一个整数;大于为真

                      -lt: 测试一个整数是否小于另一个整数;小于为真

                      -ge:测试一个整数是否大于等于另一个整数;大于等于为真

                      -le: 测试一个整数是否小于等于另外一个整数;小于等于为真



              字符串测试:

                  str1 = str2 :  当两个字串相等时为真str1 

                       != str2:  当两个字串不等时为真

                       -n str1:  当字符串的长度大于0时为真

                       -z str1:  当字符串的长度为0时为真

                       -n str:  当字符串为非空时为真

              

                文件测试:

                       -e FILE :测试文件是否存在,存在为真   [ -e /etc/passwd ]

                       -f FILE : 测试文件是否为普通文件, 为普通文件为真

                       -d FILE : 测试指定的路径是否为目录 ;为目录为真

                       -r FILE : 测试当前的用户对指定的文件是否有读取权限

                       -x FILE : 测试当前的用户对指定的文件是否有执行权限

                       -w FILE : 测试当前的用户对指定的文件是否有写权限


               ②、条件测试的表达式:

                     [ expression ]

                     ` expression `

                     test expression

 

                     

               ③、条件判断

                    -- 关于命令间的逻辑关系的条件判断:

                         逻辑与: expression1 && expression2 

                         第一个条件为假,则不执行第二个条件;第一个条件为真则判断第二个条件,结果为第二个条件。

                          逻辑或: expression1 || expression2 

                                        第一个条件为真则不执行第二个条件

                                        第一个条件为假则继续执行第二个条件

                

                    --关于if的控制结构的条件判断:

                          单分支: if 判断条件 ;then

                                           statement1

                                            ....

                                    fi 

                          双分支: if 判断条件 ;then 

                                        statement1 

                                        statement2 

                                         .....

                                    else 

                                        statement1

                                            ...

                                     fi

                            


                            双分支:  if 判断条件1 ;then

                                             statement1

                                                ...

                                      elif  判断条件2 ; then 

                                               statement1

                                                    ....

                                       elif 判断条件3 ; then

                                                statement1

                                                    ...

                                        ....


                                        fi 

                                    



---------------------------------------------------------------------------

      3)、 在shell中如何进行算术运算: 如有两个变量:A=3 ,B=4

             

                let 算术运算表达式

                        let   C= $A + $B  

                算术运算表达式]

                         C=[$A+$B]

               ((算术运算表达式))

                        C=(($A +$B))



三、巩固练习,完成以下的脚本

练习:写一个脚本,完成以下任务

        1、添加5个用户, user1,..., user5;如果用户存在则提示“username have existed”,否则                添加用户并显示“username have added” ;

        2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;

        3、每个用户添加完成后,都要显示用户某某已经成功添加;



shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第1张图片

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第2张图片






练习:如果/etc/passwd文件的行数大于100,就显示好大的文件;


shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第3张图片

wKiom1PREHKgjSzsAAAm6WBhk-8147.jpg



练习:如果用户user8不存在,就添加用户user6

wKioL1PREYySuLGnAAAlW5Lb1t8272.jpg


shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第4张图片




练习,写一个脚本,完成以下要求:

     给定一个用户:

1、如果其UID为0,就显示此为管理员;

2、否则,就显示其为普通用户;


shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第5张图片

wKioL1PREfeQNNXxAAAc_bW6f7o135.jpg

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第6张图片

wKiom1PREN2Dg57fAAAoIQm8o0c453.jpg






练习:写一个脚本

   判断当前系统上是否有用户的默认shell为bash;

   如果有,就显示有多少个这类用户;否则,就显示没有这类用户;

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第7张图片

wKiom1PREN2QpuoMAAAYz6aqutM134.jpg






练习:写一个脚本

给定一个用户,判断其UID与GID是否一样

如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第8张图片

wKiom1PRERbSn5UFAAAf97fzYyo206.jpg



练习:写一个脚本

判定命令历史中历史命令的总条目是否大于1000;如果大于,则显示“Some command will gone.”;否则显示“OK”。

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第9张图片

wKiom1PREReCFYBVAAAeY0JD6JQ350.jpg





练习:写一个脚本

给定一个文件/etc/passwd:

如果是一个普通文件,就显示之;

如果是一个目录,亦显示之;

否则,此为无法识别之文件;

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第10张图片

wKiom1PRERfwp2wLAAAmc13hihw909.jpg

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第11张图片

wKioL1PREnCSPhuEAAAk_ZoWfwA187.jpg





练习:写一脚本

能接受一个参数(文件路径)

判定:此参数如果是一个存在的文件,就显示“OK.”;否则就显示"No such file."

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第12张图片

wKioL1PREnDz6HJFAAAiyt8lIJ0433.jpg






练习:写一个脚本

给脚本传递两个参数(整数);

显示此两者之和,之乘积;

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量_第13张图片

wKioL1PREnHR6afQAAAxOj5r8u8444.jpg