bash Bourne-Again Shell)是一种过程式编程语言。

过程式编程语言3个特点:

顺序执行:一行一行运行

选择执行:判断测试条件,可能会有多个测试条件,满足则执行,不满足则跳过(如if语句)

循环执行:将同一段代码反复执行多次。因此,循环必须有退出条件,否则,则陷入死循环(for语句、while语句、until语句)

 

  • 变量类型:本地变量、环境变量(export:导出)、局部变量、位置变量、特殊变量。

详解位置变量和特殊变量:

位置变量:位置变量就是运行脚本时附加的参数位置。$0表示:脚本本身;$1表示:脚本后的第一个参数。

      一般位置变量有:$1,...,$n,${10}

  特殊变量:脚本中不用赋值,可以直接使用的变量。

      常用的有:

         $?状态返回值

         $#: 传递给脚步参数的个数

         $*:  引用传递给脚本的所有参数

         $@:引用传递给脚本的所有参数

二、变量赋值:分直接赋值和增强型赋值

直接赋值:直接赋值的任何变量无需事先声明,可以直接使用。值默认都是字符型。

       字符赋值:a=hello

           整型变量:letVAR_NAME=INTEGER_VALUE如:let a=3

                 declare -i VAR_NAME=INTEGER_VALUE如:declare -ia=3

增强型赋值:就是赋值变量可以进行一些简单的运算

        常用的运算符:+=,-=,*=,/=,%/,**=

            a=$[$a+1] 相当于 let a+=1

        特殊自加型:var++,var--,++var, --var

            a++    

变量撤销: unset:撤销赋值的变量值

 

  • 运算:分算术、字符运算,逻辑运算,比较运算

算术、字符运算符:(bash会对数字执行隐式的类型转换)

    +:加,字符加运算:a= b= c=$a+$b  echo $c 结果:中国

    -:减

    *:乘

    /:除

%:取模,取余数5%2=1

  **:次方, 2**3

实现bash算术运算的方式:

          letVAR_NAME=ARITHMATIC_EXPRESSION

         VAR_NAME=$[ARITHMATIC_EXPRESSION]

         VAR_NAME=$((ARITHMATIC_EXPRESSION))

          VAR_NAME=$(expr$num1+$num2)

逻辑运算:又叫布尔运算,与(乘)、或(加)、非、异或算

       与运算:&&

            && =

            && =

            && =

            && =

        或运算:||

            || =

            || =

            || =

            || =

        非运算:!

            !真=

            !假=

        异或运算:^

  • 比较运算:就是用命令执行成功与否做为条件判断。分整数比较,字符串比较,文件比较(判断文件的存在性及属性等)。注意:比较运算通常只在同一种类型间进行

 表达式格式: testEXPR [ EXPR ] ` EXPR `

        运算符有:

<:小于

>:大于

<=:小于等于

>=:大于等于

==:等于

!= :不等于

              =~:字串测试中模式匹配

        例: [["$var"=~ PATTERN ]]

             [["$var" =~ [cC][pP][uU]]]

整数比较:

       -gt:大于

       -lt:小于

       -ge:大于等于

       -le:小于等于

       -eq:等于

       -ne:不等于

字符串比较:分双目比较和单目比较

        双目:

<:小于

>:大于

<=:小于等于

>=:大于等于

==:等于

!= :不等于

           单目:

                           -nstring: 是否不空,不空则为真,空则假

                           -zstring: 是否为空,空则为真,不空则假

文件比较:

    单目:

 -a file-e file:文件存在则为真,否则为假

     -f file: 存在并且为普通文件,则为真,否则为假

     -d file: 存在并且为目录文件,则为真,否则为假

     -L-h file:文件存在并且为软链接文件,则为真,否则为假

     -b file:存在并且为块设备文件,则为真,否则为假

     -c file:存在并且为字符设备文件,则为真,否则为假

     -p file:存在并且为命令管道文件设备文件,则为真,否则为假    

     -S file:存在并且为套接字文件设备文件,则为真,否则为假 

     -s FILE: 存在并且为非空文件则为值,否则为假;

     -r file   存在可读    

     -w file   存在可写

     -x file   存在可执行

     file1 -nt file2:file1mtime新于file2则为真,否则为假

     file1 -ot file2:file1mtime旧于file2则为真,否则为假

     file1 -ef file2: file1 file2 指向相同的设备和节点号则为真,否则为假

组合条件测试:在多个条件间实现逻辑运算

   与:[condition1 -a condition2 ] 如果condition1 condition2全真则为真。

        condition1 &&condition2 

   或:[condition1 -o condition2 ] 如果condition1或者condition2为真则为真。

        condition1 ||condition2

   非:[ -notcondition ] 如果conditionfalse则为真。

         ! condition