shell腳本循環和信號
條件判斷
if 條件1;then
COMMAND
elif 條件2;then
COMMAND
else
COMMAND(:) : 表示pass 不執行任何命令
fi
讀取用戶輸入在進行數據判斷
1 echo -n "輸入你的數字: " 2 read userinput 3 expr $userinput+ 0 &>/dev/null 4 if [ $? -ne 0 ]; then 5 echo "必須輸入數字!" 6 continue 7 elseView Code8 COMMAND 9 fi
case 變量引用 in
PAT1)
分支1
;;
esac
變量名和變量引用的區別: 變量引用就是需要在變量名前面添加一個$, name表示變量名 $name表示變量引用
並行執行shell命令 wait的作用是表示後臺命令執行完畢後退出程序,默認後臺程序結束後需要手動敲回車鍵才能退出程序
1 net=172.17.51 2 for i in {1..254};do 3 { if ping -c1 -w1 $net.$i &> /dev/nullView Code;then 4 echo $net.$i is up 5 else 6 echo $net.$i is down 7 fi; } & 8 done 9 wait
循環
for循環
for(( exp1; exp2; exp3 )); do COMMANDS; done
exp1 是循環的初始化語句 實際上不參與循環
exp3 相當於循環體中的最後一條語句
exp2 為循環條件的判斷語句 每次執行循環體之前都必須先判斷exp2的執行結果
1 #!/bin/bash 2 declare -a array 3 for((i=1;i<=10;i++)) 4 do 5 array[$i]=$((RANDOM%100)) 6 done 7 8 MIN=${array[1]} 9 MAX=${array[1]} 10 11 for num in ${!array[@]};do 12 echo $((array[${num}])) 13 if [[ ${MIN} -ge ${array[${num}]} ]];then 14 MIN=${array[${num}]} 15 fi 16 if [[ ${MAX} -le ${array[${num}]} ]];then 17 MAX=${array[${num}]} 18 fi 19 20 done 21 echo "the min is $MIN" 22 echo "the max is $MAX"View Code
1 #!/bin/bash 2 declare -i min max 3 declare -a nums 4 for((i=0;i<10;i++));do 5 nums[$i]=$RANDOM 6 [ $i -eq 0 ] && min=${nums[$i]} && max=${nums[$i]} && continue 7 [ ${nums[$i]} -gt $max ] && max=${nums[$i]} 8 [ ${nums[$i]} -lt $min ] && min=${nums[$i]} 9 done 10 echo "all numbers are ${nums[*]}" 11 echo Max is $max 12 echo Min is $minView Code
1 #!/bin/bash 2 re=`wc -l $1 | cut -d " " -f1` 3 echo $reView Code
continue和break
continue 和 break 後面可以添加一個數字N,表示提前結束第N層的本輪循環從而直接進入下一輪的判斷,最內層的循環為第1層
continue 2 or break 3
循環控制shift命令
將參數列表向左移動,默認移動單位為1,移動後的參數會自動被刪除.使用的場景:配合循環遍歷逐個處理提供給執行腳本的位置參數
while循環的特殊用法
循環遍歷文件或者命令的標準輸出
1 df | while read line;do 2 echo $line 3 done; 4 5 while read line;do 6 echo $line 7 done < /root/fileView Code
select循環與菜單
select variable in list
do
循環體命令
done
select 循環主要用於創建菜單,按數字順序排列的菜單項將顯示在 標準錯誤上,並顯示 PS3 提示符,等待用戶輸入
用戶輸入菜單列表中的某個數字,執行相應的命令
用戶輸入被保存在內置變量 REPLY 中
信號捕捉trap
trap ‘觸發指令‘ 信號 自定義進程收到系統發出的指定信號後,將執行觸發指令,而不會執行原操作
trap ‘‘ 信號 忽略信號的操作
trap ‘-‘ 信號 恢復原信號的操作
使用 kill -l 查看所有能捕捉的信號數據
trap "echo press ctrl+c" 2
kill -9 的信號無法被捕捉到
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAXView Code
shell腳本循環和信號