和常見的編程語言一樣,bash也支持條件判斷和循環(huán)處理等控制結(jié)構(gòu)。在bash中可以使用if、for、case、while、until等語句
1、if...elif...else
if 條件1; then 當條件1為真時的處理 elif 條件2; then 當條件2為真時的處理 elif 條件3; then 當條件3為真時的處理 else 當上面所有條件都為假時的處理 fi
舉例:使用cd作為判斷條件
#!/bin/bash if cd "$1"; then echo success else echo fail fi
要想在[]命令中使用特殊符號,在[命令中使用''或""將它們引起來,且需要在[]命令前后都插入空格
#!/bin/bash str1=abc str2=xyz if [ "$str1" '<' "$str2" ]; then ←----- 對 < 進行引用 echo 'str1 < str2' else echo 'str1 > str2' fi
2、&&||
cd ~/work && ls
如果cd該命令成功執(zhí)行,則繼續(xù)執(zhí)行l(wèi)s命令。如果由于目錄不存在等原因?qū)е耤d命令執(zhí)行失敗,那么后面的ls命令就不會被執(zhí)行.
||的含義和&&正好相反,首先執(zhí)行命令1,如果命令1的狀態(tài)碼為0以外的值,則繼續(xù)執(zhí)行命令2。也就是說,只有命令1執(zhí)行失敗了才會執(zhí)行命令2
$ file=sample.txt $ [ -e "$file" ] || touch "$file" 如果sample文件不存在(-e)則創(chuàng)建一個該文件
那么附帶了解一下文件屬性判斷,這在平常shell腳本編寫中也是較為常見的:
3、[[ ]]:和[]一樣用于條件判斷
#!/bin/bash x=6 if [[ $x -gt 3 && $x -lt 7 ]]; then echo 'x > 3 AND x < 7' else echo 'x <= 3 OR x >= 7' fi
不同之處語法更簡單,例如上面例子中在[[ ]]中可以使用&&或||代替用于進行AND運算或OR運算的-a或-o。
模式匹配
對路徑展開符號*(任意)進行字符串比較 #!/bin/bash str1=xyz if [[ $str1 == x* ]]; then echo YES else echo NO fi
用正則表達式進行匹配:與==類似,=~也是一個具有模式匹配功能的運算符,會將右邊的字符串作為擴展正則表達式
匹配以/home/開始,其后為/(分隔號)之外的字符 #!/bin/bash str1=/home/miyake if [[ $str1 =~ ^/home/[^/]+$ ]]; then echo YES else echo NO fi
假如有對正則表達式不是很明白的話,后面打算出幾期講一下基礎(chǔ)的正則表達式,可以關(guān)注期待一波~
3、for語句結(jié)構(gòu)
為擴展名是.txt的文件創(chuàng)建備份 #!/bin/bash for file in *.txt do cp "$file" "${file}.bak" done
#!/bin/bash for i in aaa bbb ccc ←----- 單詞列表設(shè)置為 aaa bbb ccc do echo $i done
在for語句的循環(huán)處理中,可以使用break和continue。這是bash中用于控制循環(huán)過程的內(nèi)置命令,這與C語言類似。
4、case
case語句會使用多個模式去匹配一個字符串,并根據(jù)匹配結(jié)果執(zhí)行相應(yīng)的處理.
例如通過不同文件名匹配執(zhí)行不同命令 #!/bin/bash file="$1" case "$file" in *.txt) head "$file" ;; *.tar.gz) tar xzf "$file" ;; *) echo "not supported file : $file" ;; esac
通用模式為:
case 字符串 in 模式1) 當匹配到模式1時的處理 ;; 模式2) 當匹配到模式2時的處理 ;; ... esac
5、while
#!/bin/bash i=0 while [[ $i -lt 10 ]] ←----- 當 i 小于 10 時為真,因此會繼續(xù)執(zhí)行處理 do echo "$i" i=$((i + 3)) ←---------- 通過算術(shù)表達式展開對 i 加 3 done
這與用until實現(xiàn)一樣的功能
使用until語句將10以下的數(shù)以3為增量累加并輸出 #!/bin/bash i=0 until [[ $i -gt 10 ]] ←----- 當 i 小于等于 10 時為假,因此會繼續(xù)執(zhí)行下面的處理 do echo "$i" i=$((i + 3)) ←---------- 通過算術(shù)表達式展開對 i 加 3 done
-
編程語言
+關(guān)注
關(guān)注
10文章
1942瀏覽量
34707 -
字符串
+關(guān)注
關(guān)注
1文章
578瀏覽量
20506 -
命令
+關(guān)注
關(guān)注
5文章
683瀏覽量
22011 -
Shell
+關(guān)注
關(guān)注
1文章
365瀏覽量
23356 -
腳本
+關(guān)注
關(guān)注
1文章
389瀏覽量
14858
原文標題:shell腳本基礎(chǔ)(三)控制結(jié)構(gòu)(if、for、case、while、until)
文章出處:【微信號:FPGA學姐,微信公眾號:FPGA學姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論