條件式判斷,一般的應用鳥哥已寫的很清楚了,但他沒有寫到的是如何將正規表示法用於條件式判斷。
先說一下基本語法
檢視程式碼 BASH
if [ 條件判斷式 ]; then 當條件判斷式成立時,可以進行的指令工作內容; fi <==將 if 反過來寫,就成為 fi 啦!結束 if 之意! |
進階
檢視程式碼 BASH
# 一個條件判斷,分成功進行與失敗進行 (else) if [ 條件判斷式 ]; then 當條件判斷式成立時,可以進行的指令工作內容; else 當條件判斷式不成立時,可以進行的指令工作內容; fi |
搭配zentify的實例
檢視程式碼 BASH
#!/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 |
更進階,這個就比較少用到了,但還是記一下
檢視程式碼 BASH
# 多個條件判斷 (if ... elif ... elif ... else) 分多種不同情況執行 if [ 條件判斷式一 ]; then 當條件判斷式一成立時,可以進行的指令工作內容; elif [ 條件判斷式二 ]; then 當條件判斷式二成立時,可以進行的指令工作內容; else 當條件判斷式一與二均不成立時,可以進行的指令工作內容; fi |
正規表式法
若要將正規表示法帶入判斷式裡,就只是個語法問題而已,重點在於 =~ 這兩個符號。
實例說明:
若我們要檢查對方上傳上來的檔案是不是按我們指定定的格式來命名,手機號碼-英文檔名.txt,如:0911111111-audio.txt 因此我們就要使用正規表示法來檢查它取的檔名合不合規定,不合規定就不予處理。
檢視程式碼 BASH
#!/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 程式繼續...... |
另一種寫法,還沒空試,先記下來
檢視程式碼 BASH
# 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.