1. 程式人生 > >shell腳本循環和信號

shell腳本循環和信號

number 腳本循環 sele 退出 用法 color div arr 保存

條件判斷

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   else
8 COMMAND 9 fi
View Code

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/null
;then 4 echo $net.$i is up 5 else 6 echo $net.$i is down 7 fi; } & 8 done 9 wait
View Code

循環

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 $min
View Code 技術分享圖片
1 #!/bin/bash
2 re=`wc -l $1 | cut -d " " -f1`
3 echo $re
View 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/file
View 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) SIGRTMAX    
View Code

shell腳本循環和信號