shift
命令用于對參數的移動(左移),通常用于在不知道傳入參數個數的情況下依次遍歷每個參數然后進行相應處理(常見于Linux中各種程序的啟動腳本)
shift(shift 1) 命令每執行一次,變量的個數($#)減一,移動2位可以 執行2次shift
Shell腳本$變量的含義
1、$#:表示執行腳本傳入參數的個數
2、$*:表示執行腳本傳入參數的列表(不包括$0)
3、$$:表示進程的id;Shell本身的PID(ProcessID,即腳本運行的當前 進程ID號)
4、$!:Shell最后運行的后臺Process的PID(后臺運行的最后一個進程的 進程ID號)
5、$@:表示執行腳本傳入參數的所有個數(不包括$0)
6、$0:表示執行的腳本名稱
7、$1:表示第一個參數
8、$2:表示第二個參數
9、$?:表示腳本執行的狀態,0表示正常,其他表示錯誤
(())雙小括號
雙小括號 (( )) 是 Bash Shell 中專門用來進行整數運算的命令,不能對小數(浮點數)或者字符串進行運算。
[[]]和[]
盡量使用[[ … ]]條件判斷結構, 而不是[ ], 能夠防止腳本中的許多邏輯錯誤. 比如,&&, ||, <, 和> 操作符能夠正常存在于[[]]條件判斷結構中, 但是如果出現在[ ]結構中的話, 會報錯。
[]
[ ] 兩個符號左右都要有空格分隔
內部操作符與操作變量之間要有空格:如 [ “a” = “b” ]
字符串比較中,> < 需要寫成\> \< 進行轉義:如 [ “a” < “b” ]
\字符串變量盡量使用"" 雙引號擴住,避免值未定義引用而出錯
[ ] 中可以使用 –a –o 進行邏輯運算
[ ] 是bash 內置命令
[[]]
[[ ]] 兩個符號左右都要有空格分隔
內部操作符與操作變量之間要有空格:如 [[ “a” = “b” ]]
字符串比較中,可以直接使用 > < 無需轉義。如 [[ “a” < “b” ]]
[[ ]] 中字符串如未使用"" ,可以通過==和=~進行模式和正則表達式匹配
[[] ] 內部可以使用 && || 進行邏輯運算
[[ ]] 是關鍵字
[[ ]] 其他用法都和[ ] 一樣
[[ ]] 和 [ ] 都可以和 ! 配合使用
case $1 in
;;
命令“;;”指出程序流應該跳到整個case語句的末尾,類似break。
case 需要滿足的值 in #這里設置一個需要滿足的條件判斷條件1) #判斷條件1,判斷該條件是否符合需要滿足的值子模塊 #如果判斷條件為 true,執行子模塊1;; #結束整個循環判斷條件2) #如果判斷條件1沒滿足需要滿足的值,則走到判斷條件2,判斷該條件是否符合需要滿足的值子模塊2 #如果判斷條件為 true,執行子模塊2;; #結束整個循環判斷條件3) #如果判斷條件2沒滿足需要滿足的值,則走到判斷條件3,判斷該條件是否符合需要滿足的值子模塊3 #如果判斷條件為 true,執行子模塊3;; #結束整個循環……*) #如果之前的判斷條件都沒滿足需要滿足的值,則走到判斷條件*子模塊4 #走到判斷條件*后,不管有沒有滿足都會執行下面的子模塊;; #結束整個循環esac #結束語法
封裝 sh run.sh arg1 arg2
function usage(){echo "Usage: ./run.sh -c /home/work/conf.conf -start /home/work/start.sh"echo "Usage: ./run.sh -c /home/work/conf.conf -stop /home/work/start.sh"
}function help(){}if [$# -eq 0]; thenusageexit 1
ifwhile [$# -gt 0];
do case $1 in -start)shiftSTART_PATH=$1shift;;-stop)shiftSTOP_PATH=$1shift;;-c)shiftCOUNT_TIME=$1if [[ $1 -lt 0]]; thenecho "-c must bigger than 0."exit 1fishift;;-h)usageexit 1;;esac
donefunction check_dir(){if [[! -d "log/" ]];thenmkdir logelseecho "log dir already exist."fi
}