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 個位置的引數。
既然能夠從外部接收變數,那麼怎麼判斷從外部輸入的變數是否符合要求呢? 系統中的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Shell 指令碼編寫指令碼
- shell指令碼心得指令碼
- 編寫shell指令碼的規範指令碼
- 如何編寫高效的 Shell 指令碼指令碼
- Linux 中高效編寫 Shell 指令碼的 10 個技巧Linux指令碼
- 一點點linux系統的學習心得Linux
- Shell指令碼——Linux系統中的時間猜數字指令碼Linux
- 如何使用zx編寫shell指令碼指令碼
- 技能篇:shell教程及指令碼編寫指令碼
- shell 指令碼如何編寫-致初學者指令碼
- shell編寫服務啟動指令碼指令碼
- 有點用的linux shell 指令碼Linux指令碼
- linux shell指令碼中 =~ 的作用Linux指令碼
- shell-【技術乾貨】工作中編寫shell指令碼實踐指令碼
- 編寫可靠 shell 指令碼的 8 個建議指令碼
- EA指令碼編寫要點指令碼
- linux系統下重啟tomcat的shell指令碼LinuxTomcat指令碼
- 使用Linux系統的Shell指令碼維護Oracle(轉)Linux指令碼Oracle
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- shell 指令碼寫法:指令碼
- Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼Linux指令碼SQL
- Linux 指令碼編寫基礎Linux指令碼
- Linux指令碼編寫基礎Linux指令碼
- Linux Shell指令碼系列之一Linux指令碼
- Shell 系統資訊監控指令碼指令碼
- 什麼是Shell指令碼?Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- 使用 Shell 指令碼監控 Linux 系統程式資源指令碼Linux
- Linux系統程式設計(15)——shell指令碼語法Linux程式設計指令碼
- 10 個實戰及面試常用 Shell 指令碼編寫面試指令碼
- Shell指令碼入門:編寫格式與執行方式指令碼
- Linux Shell指令碼Linux指令碼
- Linux shell 指令碼Linux指令碼
- 利用 Shell 指令碼來監控 Linux 系統的記憶體指令碼Linux記憶體
- Linux指令碼編寫基礎(五)Linux指令碼
- Linux 指令碼編寫基礎(轉)Linux指令碼
- 【SHELL】Linux系統 Oracle例項監控、重啟 簡易Shell指令碼LinuxOracle指令碼
- 一起學shell(十一)之安全的shell指令碼:起點指令碼
- linux常用的shell指令碼Linux指令碼