條件式判斷,一般的應用鳥哥已寫的很清楚了,但他沒有寫到的是如何將正規表示法用於條件式判斷。
先說一下基本語法
if [ 條件判斷式 ]; then
當條件判斷式成立時,可以進行的指令工作內容;
fi <==將 if 反過來寫,就成為 fi 啦!結束 if 之意!
進階
# 一個條件判斷,分成功進行與失敗進行 (else)
if [ 條件判斷式 ]; then
當條件判斷式成立時,可以進行的指令工作內容;
else
當條件判斷式不成立時,可以進行的指令工作內容;
fi
搭配zentify的實例
#!/bin/bash
file="/home/backup/update.7z"
SSH1=sshserver1
zenity --question --title=更新luks '--text=3秒自動下載更新檔!\n或按否離開!' --timeout=3
#說明:zentify選項按是則此變數$?得0,不按得5。按否得1。
if [ $? = 0 -o $? = 5 ]; then
echo "下載"
#mate-terminal -x bash -c "echo 從ssh1下載更新檔" ; scp $SSH1 $file ;
else
echo "離開"
fi
更進階,這個就比較少用到了,但還是記一下
# 多個條件判斷 (if ... elif ... elif ... else) 分多種不同情況執行
if [ 條件判斷式一 ]; then
當條件判斷式一成立時,可以進行的指令工作內容;
elif [ 條件判斷式二 ]; then
當條件判斷式二成立時,可以進行的指令工作內容;
else
當條件判斷式一與二均不成立時,可以進行的指令工作內容;
fi
正規表式法
若要將正規表示法帶入判斷式裡,就只是個語法問題而已,重點在於 =~ 這兩個符號。
實例說明:
若我們要檢查對方上傳上來的檔案是不是按我們指定定的格式來命名,手機號碼-英文檔名.txt,如:0911111111-audio.txt 因此我們就要使用正規表示法來檢查它取的檔名合不合規定,不合規定就不予處理。
#!/bin/bash
fullfile=`find /home/ftp/upload/*.txt |sed -n '1p'`
fileName=$(basename $fullfile )
if [[ "$fileName" =~ 9[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\-.*\.txt ]];then
echo do nothing
else
exit 0
fi
程式繼續......
另一種寫法,還沒空試,先記下來
# GLOB matching
gg=svm-grid-ch
case "$gg" in
*grid*) echo $gg ;;
esac
# REGEXP
if echo "$gg" | grep '^....grid*' >/dev/null ; then echo $gg ; fi
if echo "$gg" | grep '....grid*' >/dev/null ; then echo $gg ; fi
if echo "$gg" | grep 's...grid*' >/dev/null ; then echo $gg ; fi
# Extended REGEXP
if echo "$gg" | egrep '(^....grid*|....grid*|s...grid*)' >/dev/null ; then
echo $gg
fi
Some grep incarnations also support the -q (quiet) option as an alternative to redirecting to /dev/null, but the redirect is again the most portable.
[note]參考資料:stackOverFlow
google關鍵字:shell script regular expression match if
[/note]