利用bash脚本编程实现算数运算:

 一、运算符号:

     1.普通运算符号:+ - * / %  **|^


     2.增强型的算术运算符号:

        += : let b=b+2 --> let b+=2

        -=

        *=

        /=

        %=

     3. 特殊的增强型运算:

       let b=b+1 -->  let b+=1 --> let b++

       let b--

       b++:先将b的值赋予给其他变量,自身在+1

       ++b:自身先+1在赋值


  算数运算方法:

  1.let  VAR=算术表达式

     将算术表达式先行进行算术运算,并将运算结果保存到变量VAR中;


  2.VAR=$[算术表达式]

      算术表达式中如果有变量引用,可以使用$来引用变量也可以省略

  3.VAR=$((算术表达式))

      算术表达式中如果有变量引用,可以使用$来引用变量也可以省略

  4. expr ARGU1 ARGU2 ARGU3

       ARGU1和ARGU3必须是数值

       ARGU2必须是运算符号

    例子:  [root@localhost ~]# expr 5 + 8

                13

  5. echo "算术表达式" | bc


注意:*在某些情况下需要转义;


  例子:统计/etc/fstab   /etc/passwd   /etc/issue三个文件中,以字母r开头的行数的总和


变量:存储数据的容器

    弱变量:弱类型变量,字符型(默认),数值型(不包括浮点型)




条件测试命令:

  test;EXPRESSION

   shell内建命令


  [EXPRESSION] :

   外部命令


  `EXPRESSION` :

   bash的内部关键字


注意:这类命令一般没有执行结果,只有执行状态返回值

  test测试命令有三类测试表达式:

    1. 数值测试: 双目操作符

       -eq: 被测试的两个数值是否相等,相等为真,不等为假

       -ne: 被测试的两个数值是否不相等,不等为真,相等为假

       -gt: 被测试的两个数值,左面的是否大于右面的,大于为真,不大于为假

       -lt: 被测试的两个数值,左面的是否小于右面的小于为真

       -ge: 被测试的两个数值,左面是否大于等于右面的大于等于为真,小于为假

       -le: 被测试的两个数值,左面的是否小于等于右面的,小于等于为真,大于为假


       例子:# test 4 -eq 10

             # echo $?

               1



    2. 字符串测试

       双目操作符:

         ==|= :推荐用==:表示被测试的两个字符串是否相同,相同为真,不同为假

         !=:表示被测试的两个字符串是否不同,不同为真,相同为假

         >:被测试的两个字符串在ASCII表总对应的二进制数值,左边是否大于右面,大于为真,小于为假 

         <:被测试的两个字符串在ASCII表总对应的二进制数值,左边是否小于右面,小于为真,大于为假 

      注意:<和>必须用在`EXPRESSION`测试语句中

          =~ :被测试的两个字符串,左侧字符串能否被右侧的PATTERN匹配,能匹配为真,不能为假

       单目操作符:

          -z '字符串‘: 判定指定的字符串是否为空串,空为真,不空为假


          -n ‘字符串’:判定指定的字符串是否为非空串,不空为真,空为假


      注意:1.通常情况下字符串要加引号,单引号或双引号都可以,根据实际情况选择

            2.[[]]和[]在某些情况下意义可能不同,区分使用

            3. 表达式和操作符两端都要有空格


    3. 文件状态测试

      文件的存在性测试:如果被测试的文件存在为真,不存在为假

        -a或-e  [ -e /etc/shadow]


     文件类型测试(测试存在性):

      -b FILE:被测试的文件是否存在,并且是否为块设备 ,存在且为块设备为真,否则为假

      -c FILE:被测试的文件是否存在,并且是否为字符设备

      -d FILE: 被测试的文件是否存在,并且是否为目录文件

      -f FILE: 被测试的文件是否存在,并且是否为普通文件

      -h|L FILE:被测试的文件是否存在,并且是否为符号链接文件


      -p FILE:被测试的文件是否存在,并且是否为管道文件

      -s FILE: 被测试的文件是否存在,并且是否为套接字文件


    文件的访问权限测试:

      -r FILE:被测试的是否存在,并且当前有效用户是否可读,文件存在且当前有效用户可读为真,否则为假

      -w FILE:被测试的是否存在,并且当前有效用户是否可写

      -x FILE:被测试的是否存在,并且当前有效用户是否可执行

    文件的特殊权限标识测试

      -u FILE: 被测试的文件是否存在并且是否设置了SUID权限;文件存在且设置了SUID权限为真,否则为假

      -g FILE: 被测试的文件是否存在并且是否设置了SGID权限;文件存在且设置了SGID权限为真,否则为假

      -k FILE: 被测试的文件是否存在并且是否设置了STICKY权限;文件存在且设置了STICKY权限为真,否则为假

      

    文件内容是否为空:

      -s FILE: 被测试文件是否存在且内容是否不为空 ,存在且内容不为空为真,否则为假


    文件的所有权测试:

     -O FILE: 被测试文件是否存在并且其属主是否为当前有效用户

     -G FILE   被测试文件是否存在并且其属组是否为当前有效用户 的组


   时间戳测试:

     -N FILE: 被测试的文件自从上一次被修改后是否被修改过



   双目测试:

    FILE1 --ef FILE2:测试两个文件是否指向同一个文件系统的相同的inodo硬链接  

    FILE1 -nt FILE2: 被测试的两个文件,FILE1是否比FILE2更新

    FILE1 -ot FILE2: 被测试的两个文件,FILE1是否比FILE2更旧


 测试语句中可以添加逻辑运算:

 1.

   [ -o /tmp/test ] && [ -s /tmp/test ]

   ![ -o/tmp/test ]

 2.

   [ -o /tmp/test -a -s /tmp/test ] 

   [ !-o /tmp/test ]  


 命令的执行结果:

    正常输出结果


    命令的执行状态返回值:

     0-255

     0

     1,2,127:系统保留

     3-126,127-255:用户自定义



 注意:当shell脚本运行时,一旦遇到exit命令时,将立即结束当前shell尚锦城,同时脚本的运行也将被停止,即

     之后的命令不再被执行