shell 函數編程
阿新 • • 發佈:2019-01-30
null rest already chkconfig name pre sta use one
函數語法
語法: function F_NAME { 函數體 } F_NAME() { 函數體 } 可調用:使用函數名 函數名出現的地方,會被自動替換為函數; 腳本: 函數的返回值: 函數的執行結果返回值:代碼的輸出 函數中的打印語句:echo, print 函數中調用的系統命令執行後返回的結果 執行狀態返回值: 函數體中最後一次執行的命令狀態結果 自定函數執行狀態的返回值:return # 函數可以接受參數: 在函數體中調用函數參數的方式同腳本中調用腳本參數的方式:位置參數 $1, $2, ... $#, $*, $@
簡單示例
#!/bin/bash # # chkconfig: 2345 67 34 # srvName=$(basename $0) lockFile=/var/lock/subsys/$srvName start() { if [ -f $lockFile ];then echo"$srvName is already running." return 1 else touch $lockFile [ $? -eq 0 ] && echo "Starting $srvName OK." return 0 fi } stop() { if [ -f $lockFile ];then rm -f $lockFile &> /dev/null [ $?-eq 0 ] && echo "Stop $srvName OK" && return 0 else echo "$srvName is not started." return 1 fi } status() { if [ -f $lockFile ]; then echo "$srvName is running." else echo "$srvName is stopped." fi return 0 } usage() { echo "Usage: $srvName {start|stop|restart|status}" return 0 } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) usage exit 1 ;; esac
信號捕捉:trap ‘COMMAND;COMMAND‘
循環控制: continue: 提前進入下一輪循環 用於條件語句中,僅在某些個特殊場景提前進入; break [n]:跳出當前循環 用於條件語句中, 例如:查看用戶登錄 #!/bin/bash # read -p "Plz enter a username: " userName while true; do if who | grep "\<$userName\>" &> /dev/null; then break fi echo "not here." sleep 5 done echo "$userName is logged on." #!/bin/bash # read -p "Plz enter a username: " userName until who | grep "\<$userName\>" &> /dev/null; do sleep 5 echo "not here" done echo "here"
shell 函數編程