首页 > 代码库 > Linux Bash脚本基本语法知识

Linux Bash脚本基本语法知识


写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。



前提:读者能够基本使用一款文本编辑器以及了解文件的权限概念。


准备工作


    在/home目录创建script文件用于保存所有的脚本程序:

    # mkdir /home/script

    # cd /home/script/


Bash脚本的基本输入输出


    第一个bash脚本:

    # vim ./hello-world.sh

        wKioL1Pd3KKCVAGqAAB7-Ccp1Xo206.jpg

    说明:

        "#!"是一个约定标记,它告诉系统这个脚本需要什么解释器来执行


    作为可执行脚本:

    # chmod +x ./hello-world.sh

    # ./hello-world.sh

        注意:一定得写成./hello-world.sh而不是hello-world.sh

    

    1.基本输入语句:

        第三行,read命令,读取来自键盘输入的变量(何为变量?将在下一节进行说明说明)。

    2.基本输出语句:

        第五行,echo命令,向屏幕窗口输出文本。


Bash脚本的变量


    变量到底是个什么东西?

        可简单的理解为,是存储数据的地方,可以通过引用这个变量得到其数据。


    变量名的命名规范:

        首字符必须为字母;

        中间不能有空格;

        不能使用标点符号;

        不能使用bash里的关键字。 


    如何使用变量?

        # myName="muluhe"

        # echo ${myName}

        

        说明:

            ${变量名}表示引用变量中的内容。

        注意:在此处,花括号不是必须,但我建议在引用变量时,加上花括号,这是一个比较好的编程习惯。

    为什么建议加花括号?

        # echo ${myName}yes

        如果不加花括号,表示输出nyNameyes这个变量的内容。


Bash脚本的注释


    以#号开头的就是注释,解释器会忽略(除第一行的#!/bin/bash外)。

        wKioL1Pd5kqBf-MdAAFUZ3HVkmc613.jpg

    有没有一种方式可以对多行进行注释呢?


Bash脚本的字符串


    字符串是bash脚本编程中最常用的数据类型,字符串可以常常用单引号或双引号引起来。

    单引号:

        str="this is a string"

        单引号字符串的限制:

            单引号里任何字符都会原样输出,单引号字符串中的变量引用时无效的;

            单引号字符串中不能出现单引号(对单引号进行转义也不行)。


    双引号:

        myName="muluhe"

        str="Hello, my name is ${myName}\n"

        双引号的特点:

            双引号里可以对变量进行引用


    获取字符串的长度:

        echo ${#myName}


    提取子字符串:

        string="my name is muluhe."

        echo ${string:1:4} # 输出my n


Bash脚本的数组


    bash脚本仅支持一维数组且不限定数组元素的大小。

    定义数组:

        在bash中,用括号来表示数组,数组元素用“空格”符号分隔开。定义数组的一般形式:

            数组名=(值1 值2 ... 值n)

           例如:arrayName=(0 1 2 muluhe)

        还可以单独定义数组的各个分量:

            arrayName[0]=100

            arrayName[1]=200

            arrayName[3]=300

            可以不使用连续的下标,且理论上下标的范围没有限制。

        注意,数组的下标是从0开始的。


    数组的长度:

        ${#arrayName[@]}:表示数组的长度

        

    数组的复制:

        例如:arrayName2=${arrayName[@]}

    

    向数组中追加元素:

        演示实例:复制一个数组中下标为偶数的元素至新数组中

            wKiom1PeC8ig7o1LAAEz3Ble0ok380.jpg

  

    从数组中删除元素:

        unset arrayName[1]

          

Bash脚本的if...then选择


    1.简单条件判断式

        if [ 条件判断式 ]; then

            当条件判断式成立时,可以执行的内容;

        fi

        

        演示实例:

            wKioL1Pd8MniRcWnAAEvGJvA790765.jpg

    

    2.复杂条件判断式

        <一个条件判断>

        if [ 条件判断式 ]; then

            当条件成立时,可以执行的内容;

        else

            当条件不成立时,可以执行的内容;

        fi


        <多个条件判断>

        if [ 条件判断式一 ]; then

            当条件判断式一成立时,可以执行的内容;

        elif [ 条件判断式二 ]; then

            当条件判断式二成立时,可以执行的内容;

        else

            当条件判断式一和二都不成立时,可以执行的内容;

        fi

 

        演示实例:

        wKiom1Pd9R2RhUJYAAEO_6Ms_Mc885.jpg



Bash脚本的case...esac选择


    case...in...esac基本语法:

        case ${变量名称} in

            "第一个变量内容")

                程序段

                ;;

            "第二变量内容")

                程序段

                ;;

            *)

                不包含第一个变量内容与第二个变量内容的其他程序段

                ;;

        esac


    演示实例:

        wKioL1Pd9ZKhSkWgAAGjXNKs-qs327.jpg        


Bash脚本的while循环


    while循环的基本语法:

        while [ 条件判断式 ]

        do

            程序段落

        done

    说明:

        当条件判断式成立时,就进行循环,直到条件判断式不成立时,退出循环


    演示实例:

    wKiom1Pd93_REXHzAAEj_itls2I507.jpg


Bash脚本的until循环


    until循环的基本语法:

        until [ 条件判断式 ]

        do

            程序段

        done

    

    演示实例:

        wKioL1Pd-WmScm-cAAEgirrhxsE009.jpg


Bash脚本的for循环


    for...do...done(固定循环)基本语法:

        for var in con1 con2 con3 ...

        do

            程序段

        done

    演示实例:

        wKiom1Pd--DhJCEMAABU9LSEzN4168.jpg


    for...do...done(数值处理)基本语法:

        for (( 初始值; 限制值; 执行步长 ))

        do

            程序段

        done

    演示实例:

        wKiom1Pd_QaSyTHkAABd3I5szTU450.jpg

    

Bash脚本的continue与break


    continue

        跳出当前循环

    演示实例:

      wKioL1PeAZGyzlJkAAEga5bJEzg687.jpg


    break

        终止所有循环

    演示实例:

        wKiom1PeAUiwVe4SAAEKFxduib4557.jpg


Bash脚本的function功能


    function的基本语法:

        function fname () {

            程序段

        }


    演示实例:

        wKioL1PeBQCQNk8wAAFHh7f89Ss522.jpg


Bash脚本的追踪与调试


    bash [-nx] scripts.sh

    参数:

        -n : 不执行scripts.sh,仅查询语法问题;

        -x : 将所执行的scripts.sh内容显示到屏幕上;

    实例演示:

        

        利用图12脚本进行测试:# bash -x function-test.sh one

       说明:图12的脚本名称为function-test.sh

        wKioL1PeBsWyhjJYAADKtdek5sg372.jpg