bash编程语法

    首先,我们先说下bash语法都有哪些内容,随后我会随后一一去分析,加强我记忆的同时也分享下给家。


     linux bash脚本的基本内容构架如下


#!/bin/bash   -----> 每个bash脚本第一行必须要写的,告诉系统这是个bash脚本。    

#              -----> #为注释的标志符号,#开头的行都是脚本不执行的,仅用作注释  

    命令段     -----> 脚本要执行的具体命令,来完成相应的功能


bash编程为过程式编程语言,有3种主要语句即为:


顺序执行语句:最简单的,至上而下执行语句,工作模式为:

                #!/bin/bash

                #(可有可无)

                    语句1

                    语句2

              先执行语句1,再执行语句2,例如:

    创建脚本 bash1.sh

    bash编程语法总结,顺序,循环,选择_linux

    输出结果为:hello !

            hao are you

    


循环执行语句:有3种,for循环,while循环,until循环

基本结构如下:()内的内容就是变量要依次读出的内容,并要放到循环体中去执行的

            for 变量 in (列表); do

                循环体

            done

        循环体中的变量依次从列表中读取数据,知道列表中的数据读取完为止,例如:

    我们求 1到100之间的所有整数的和为例,

    创建脚本 bash2.sh  (for循环)

        bash编程语法总结,顺序,循环,选择_循环_02  

        

        图中,i为变量(bash编程中,变量无需提前定义),对变量取值要用$,如对i取值:$i

 但是,我们对于图中的sun变量为什么要定义且赋予值0呢?,因为我们要做累加运算,必须有个初值,比如你要算账的话,必须知道算账之前的账单状态,才能得出结果啊,也就是数据的初始化。

        {1..100}表示,1到100的所有整数1,2,3........99,100

        输出结果为5050,你可以自己验证下

  

    while循环样例

        while [条件测试]; do

            循环体

        done

        bash编程语法总结,顺序,循环,选择_循环_03 

        上图中,counter=1,为条件测试的变量counter的初始值,

                let counter++ , 为循环体每执行一次,变量counter就自动+1,直到不满足测试条件为止,本题中,变量counter直到大于100,不满足测试条件,循环结束,输出最后结果为5050   



    until循环:基本格式:

        until [条件测试]; do  #until的测试条件,为真跳出循环,为假则执行语句(看清楚)

                循环体

        done

   我们依然以1+2+3+.....+99+100为例:

    bash编程语法总结,顺序,循环,选择_顺序_04

    看到图中的测试条件了没有,while循环时,判断为 -ge 意思 小于等于,

                            until循环时,判断为 -gt 意思 大于,相反,这个从单词意思上就能看的出来,是不是这样啊。    


这里我们说到了比较符号,那就补充下吧,

bash编程中测试类型有:

整型测试:整数的比较

基本模式为: [ $变量1 -gt $变量2 ]

    -gt 大于  

    -lt 小于

    -ge 大于等于

    -le 小于等于

    -ne  等于

    -ne  不等于

字符测试:(分为单目和双目)字符串的比较

    双目:  

        >

        <

        =

        >=

        <=

    单目:

        -n String: 是否不空,不空则为真,空则为假

-z String: 是否为空,空则为真,不空则为假

    


选择语句:简单比放下,你选择

        bash编程语法总结,顺序,循环,选择_linux_05

        从A开始,选择B,则执行1,选择C,则执行2

      选择语句一般有以下几种,

单分支if语句

        最基本的格式:

            if [条件测试];then    #里面的【条件测试】如果为真,则执行语句1,为假执行语句2

                语句1

            fi

            case

        我们来看下选择语句的样题:

        假如:如果我们输入一个整数数a,如果此整数a为偶数,则输出A,其他则退出

        bash编程语法总结,顺序,循环,选择_linux_06

        如果输入2,则输出 A,输入3,则退出脚本,不显示内容        

        上图中,让用户输入一个内容,的语句格式为: read  -p  提示内容  变量

        来判断一个数是否为偶数,我们用取余运算,但是发现了没有,$[$num%2],我在$num%2的前面又加了一个$,意思为,取运算完成后的数值与0进行比较,不加就会出现错误的哦

        

双分支if语句,

            基本格式为:

                if [条件测试];then

                    语句1

                else

                    语句2

                fi

        条件测试满足即为真时,执行语句1,否则执行语句2

        样例:如果我们输入一个整数数a,如果此整数a为偶数,则输出A,否则输出B

            bash编程语法总结,顺序,循环,选择_循环_07

            上图中,如果你输入的为2,则输出A,输入的为3,则输出B,你可以自己试下,

        还有个多分支if语句:

            格式为:

            if [测试条件1]; then

                    语句1

            elif [测试条件2]; then

                    语句2

            elif [测试条件3]; then

                    语句3

                    ......

                    ......

            else

                    语句4

            fi

            意思为,符合测试条件1,执行语句1,符合测试条件2,执行语句2,依次类推。

        例如,我们输入一个数,如果输入1,显示A;输入2,显示B;输入3,显示C;输入4,显示D;输入其他内容,则直接退出,并且显示内容,请输入(1|2|3|4),bash编程语法总结,顺序,循环,选择_循环_08

  最后还有个case语句,也输入选择语句的一种:

    格式如下: 

    case 变量  in

     条件1)

            语句1

            ;;

     条件2)

            语句2

            ;;

     条件3)

            ...

            ;;

     esac

    举个例子吧,就用case语法写一下上题那个if选择语句,

    bash编程语法总结,顺序,循环,选择_linux_09

    结果和if选择样题是一样的,我测试过啦,才发出来的


bash中主要用到的基本内容就如上啦,其中有些,例如逻辑运算,变量的命名以及规则等,没有做详细介绍,有需要的可以问下,学而时习之,不辞下问都懂得。


函数的使用

    函数的一般语法
    function 函数名(){

            函数体

    }

    可以使用函数名进行函数的调用如:

    

#!/bin/bash

#

NO1() {

        if [ $1 -eq 1 ]; then

                echo "A"

        fi

}

NO2() {

        if [ $1 -eq 2 ]; then

                echo "B"

        fi

        return 0

}


NO3() {

        if [ $1 -eq 3 ]; then

                echo "C"

        fi

        return 0

}



NO4() {

        if [ $1 -ge 4 ]; then

                echo "please input (1|2|3)"

        fi

        return 1

}


read -p  "please input (1|2|3)" num

        NO1 $num   

        NO2 $num

        NO3 $num

        NO4 $num

上例用了很简单的程序写的。,虽然简单,但基本说明了函数在bash编程中基本使用方式。

函数名 参数:意思为把参数传递给对应的函数,

函数中变量$1:表示接受传递参数的变量

return 0  : 这个表示函数的返回值,每个函数调用执行完成后都会有个返回值的,当然可以自己指定。返回值


bash编程中的数组:
    数组是由   数组名+索引构成(索引指向的是数组中的元素)

    数组的声明命令为:decalare -a 数组名


    数组的赋值:

        整体赋值

                num=(1 2 3 4 5 6 7 8 9)

        单个赋值

                num[0]=1

                num[1]=2

                ...

                num[8]=9

        索引赋值

                num=([0]=a [1]=b [2]=c [3]=d)

     提示用户对数组进行赋值的语句:

            read -a “提示语句” 数组名     ##看清,使用的是-a , 而非-p


    遍历数组中的元素

            declare -a num

            num=(‘ls’)          #这里引用ls命令获取的结果赋值给数组num

            for i in $[$num[@]]; do 

                echo $num        输出数组的所有元素

            done

    数组的长度格式:

                ${#ARRAY[*]}

${#ARRAY[@]}

        bash编程语法总结,顺序,循环,选择_循环_10


    从数组中挑选出某个元素的基本格式如下:

                ${ARRAY[@]:offset:number}

切片:

offset: 偏移的元素个数

number: 取出的元素的个数


${ARRAY[@]:offset}:取出偏移量后的所有元素


${ARRAY[@]}: 取出所有元素

            bash编程语法总结,顺序,循环,选择_linux_11


           数组的实际运用样例:  生成10个随机数到一个数组中,并排序,

            

#!/bin/bash

declare -a sum

for i in {1..10}; do

        sum[$i]=$RANDOM

done

echo ${sum[@]}


for ((i=0;i<9;i++)); do

        for ((j=1;j<$[10-$i];j++)); do

                if [ ${sum[$j]} -gt ${sum[$[$j+1]]} ]; then

                        var=${sum[$j]}

                        sum[$j]=${sum[$[$j+1]]}

                        sum[$[$j+1]]=$var

                fi

        done

done

        echo ${sum[@]}  

其中用到了生成随机数的命令:

        $RANDOM