和常見的編程語言一樣,bash也支持條件判斷和循環處理等控制結構。在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該命令成功執行,則繼續執行ls命令。如果由于目錄不存在等原因導致cd命令執行失敗,那么后面的ls命令就不會被執行.
||的含義和&&正好相反,首先執行命令1,如果命令1的狀態碼為0以外的值,則繼續執行命令2。也就是說,只有命令1執行失敗了才會執行命令2
$ file=sample.txt $ [ -e "$file" ] || touch "$file" 如果sample文件不存在(-e)則創建一個該文件
那么附帶了解一下文件屬性判斷,這在平常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
假如有對正則表達式不是很明白的話,后面打算出幾期講一下基礎的正則表達式,可以關注期待一波~
3、for語句結構
為擴展名是.txt的文件創建備份
#!/bin/bash
for file in *.txt
do
cp "$file" "${file}.bak"
done
#!/bin/bash
for i in aaa bbb ccc ←----- 單詞列表設置為 aaa bbb ccc
do
echo $i
done
在for語句的循環處理中,可以使用break和continue。這是bash中用于控制循環過程的內置命令,這與C語言類似。
4、case
case語句會使用多個模式去匹配一個字符串,并根據匹配結果執行相應的處理.
例如通過不同文件名匹配執行不同命令
#!/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 時為真,因此會繼續執行處理
do
echo "$i"
i=$((i + 3)) ←---------- 通過算術表達式展開對 i 加 3
done
這與用until實現一樣的功能
使用until語句將10以下的數以3為增量累加并輸出
#!/bin/bash
i=0
until [[ $i -gt 10 ]] ←----- 當 i 小于等于 10 時為假,因此會繼續執行下面的處理
do
echo "$i"
i=$((i + 3)) ←---------- 通過算術表達式展開對 i 加 3
done
-
編程語言
+關注
關注
10文章
1964瀏覽量
39564 -
字符串
+關注
關注
1文章
596瀏覽量
23165 -
命令
+關注
關注
5文章
755瀏覽量
23753 -
Shell
+關注
關注
1文章
375瀏覽量
25375 -
腳本
+關注
關注
1文章
409瀏覽量
29193
原文標題:shell腳本基礎(三)控制結構(if、for、case、while、until)
文章出處:【微信號:FPGA學姐,微信公眾號:FPGA學姐】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
嵌入式和物聯網的shell腳本學習指南之shell腳本入門免費下載
109個實用shell腳本分享
shell腳本基礎知識
Linux Shell腳本經典案例分享
shell腳本基礎之控制結構
評論