shell脚本循环和信号

条件判断

    if     条件1;then

         COMMAND

   elif  条件2;then

        COMMAND

   else

       COMMAND

    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

猜你喜欢

转载自www.cnblogs.com/yxh168/p/9004821.html
今日推荐