1. 程式人生 > 其它 >Linux系統中Shell指令碼編寫的一點心得

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

作為一個軟體測試人員, 經常會跟開發打交道,產品開發階段,他們經常會提供一些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個位置的引數。

既然能夠從外部接收變數,那麼怎麼判斷從外部輸入的變數是否符合要求呢?Linux系統中的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種邏輯處理語句的表達方式,更詳細的可以參考《Linux就該這麼學》這本書的第4章,比如,條件測試語句的4種方式:檔案、邏輯、整數值、字串比較測試語句在書中會有更詳細的介紹,這裡只是粗略的列出大綱,方便回憶知識點。有這方面需要的朋友,這本書真心推薦給你。