Linux系統中Shell指令碼編寫的一點心得

roc_guo發表於2022-05-19

作為一個軟體測試人員, 經常會跟開發打交道,產品開發階段,他們經常會提供一些python shell 等指令碼作為bug 的臨時解決方案以方便測試繼續進行。最近接觸的shell 指令碼比較頻繁,感覺自己的基礎有些薄弱,就自學了下,順便把獲取的知識點總結下,希望也能對需要的人有所幫助。

提到Shell 指令碼,必不可少的要知道Shell 終端直譯器,就像java 語言,要有java 編譯器,python 語言,要有pycharm 等文字編譯器一樣,它的作用就是人和計算機之間的翻譯官,讓彼此可以相互交流的工具。作為一門語言,必不可少的要知道這門語言的基礎知識以及怎麼運用這些基礎知識進行業務處理,下邊就是對這些基礎的總結。

(一)   Shell 指令碼基礎

Shell 指令碼常用互動式和批處理兩種方式和計算機交流。所謂互動式是指使用者向計算機輸入一條指令就立馬執行,而批次處理的方式就是把使用者想要做的事情事先寫好,然後交給計算機一起處理。

一個完整的shell 指令碼分為三部分,如下example.sh

#1. 指令碼宣告

#!/bin/bash   

 #2. 對該文字功能的的介紹                    

#For Example by Shell    

#3. 使用者想實現的邏輯功能

pwd

ls -al

 

可以嘗試用命令bashexample.sh ./example.sh 執行該指令碼看下執行結果,有時會提示許可權不夠,記得檢查該指令碼的是否有執行許可權和執行使用者身份。

 

(二)   如何接收使用者引數

上邊的指令碼程式只能處理一些定義好的功能,不能對輸入引數進行靈活處理,當然,Shell 指令碼語言早也早就貼心的考慮到這些問題,用$ 表示從外部接收的變數,如$0 對應當前shell 指令碼的名稱,$1 $2 $3 $4…… 分別對應第N 個位置的引數。

既然能夠從外部接收變數,那麼怎麼判斷從外部輸入的變數是否符合要求呢? 系統中的Shell 指令碼語言當然也會考慮到,用條件表示式表示:

測試語句格式:[ 條件表示式]

注意,條件表示式兩邊均有一個空格,若條件成立,返回數字0 ,否則隨機返回其他數值。

例如: [ -d /etc/fstab ], 表示判斷/etc/fstab 是否為目錄型別的檔案,其返回值可以用 echo $? 來檢視。

 

 

(三)   流程控制語句

在真實的業務場景中,經常會有很複雜的業務邏輯,透過if for while case 4 種流程控制語句來實現,這些業務邏輯跟python java 等程式語言處理邏輯是一樣的,只不過語法的表現形式略有不同。

1.       If 條件測試語句

If 條件語句在shell 指令碼中的格式:

If 條件測試操作

Then 命令序列

                             Fi

例如:判斷/media/cdrom 檔案是否存在,若存在就結束,若不存在,就去建立

#!/bin/bash

#For Example by Shell

DIR="/media/cdrom"

if  [ ! -e $DIR ]

then   

mkdir -p $DIR

fi

2.       For 迴圈語句

For 迴圈語句在shell 中的格式:

For 變數名in 取值列表

Do

命令序列

Done

例如:遍歷所有的node 配置檔案configgiles ,並在每個node 上執行dimension_image_3.1.4.py python 指令碼。

ConfigFiles=("image15_B4020S2.cfg"  "image38_B4180S2.cfg"  "image26_B4120S2.cfg"  "image49_9BFNJH2.cfg")

for config in ${ConfigFiles[*]}

do

{

        echo "Update PTAB location in file $ConfigHome${PreConfig}/$config"

        sed -i '/payload=/'d $ConfigHome${PreConfig}/$config

        echo $Pre_payload$PTAB_Build>> $ConfigHome${PreConfig}/$config

        echo "-----------Start to image system by $config -----------------------------------"

        python3 ${ConfigHome}dimension_image_3.1.4.py -C $ConfigHome${PreConfig}/$config -D -L ${ConfigHome}logs/ -T 4500

}&

done

 

3.       While 條件迴圈語句

while 迴圈語句在shell 中的格式:

while 條件測試操作

do

命令序列

                             Done

例如:針對構建環境的操作,如果成功,則直接結束,否則再次retry ,最多retry3 次。

loop_times=0

retry_times=3

while [ $loop_times -lt $retry_times ]

do

    echo -e "\n Start to setup cluster"

setup_cluster

    echo -e "\n Start to wait for cluster complete"

return_code=`echo $?`

    if [ $return_code -eq 1 ]; then

        let loop_times++;

        echo -e "\n Fail to setup cluster, loop time: $loop_times"

    else

        echo -e "\n Success to setup cluster"

        break;

    fi

done

4.       Case 條件測試語句

Case 條件測試語句在shell 中的格式:

Case 變數值in

模式1

命令序列1

;;

模式2

命令序列2

;;

       ……..

Esac

例如:

#!/bin/bash

#For Example by Shell

Read -p “ 請輸入一個字元,並按Enter 鍵確認:” KEY

Case $KEY in

[a-z] |[A-Z] )

Echo “ 您輸入的是字母

;;

[0-9])

Echo “ 您輸入的是數字

;;

Esac

以上就是總結的shell 指令碼語言基礎以及4 種邏輯處理語句的表達方式,更詳細的可以參考 這本書的第4 章,比如,條件測試語句的4 種方式:檔案、邏輯、整數值、字串比較測試語句在書中會有更詳細的介紹,這裡只是粗略的列出大綱,方便回憶知識點。有這方面需要的朋友,這本書真心推薦給你。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2895221/,如需轉載,請註明出處,否則將追究法律責任。

相關文章