Repeat the command sequence according to the different values of the variable (shell day 2)

Xiaobai's Shell Road

System versionRed Hat Enterprise Linux Server release 7.0

1: Understanding and application of for loop

Definition: A traversal and list-like execution process is used, and a fixed set of operations is performed after each copy is performed by cyclic assignments from the value list by specifying variables.
Features: Controlled by variables, loop when the condition is established;
the number of times the step size can be controlled
Format:
for variable name in value list
do
command sequence
done

例:
1)利用for循环输出:10  3   kk
#!/bin/bash          
for i in 10 3 kk           【逐次执行】
do 
      echo $i
done

 [root@server0 /]# ./test.sh
 10
  3
  kk

2)连续 输出3个nb
    #!/bin/bash
  for i in 10 3 kk   【输出结果不受值列表影响】
  do 
         echo nb
  done
   [root@server0 /]# ./test.sh
   nb
   nb
   nb

    常用命令:
    1. 造数:  echo {1..100}   【1-100顺序列出】
                     seq  5              【1-5顺序列出】

    2.不换行输出:echo -n                                  

    例:

  [root@server0 /]# seq 5
   1
   2
   3
   4
   5    

    3)利用for循环和if语句实现测试某一网段ip是否可以ping通
    #!/bin/bash
 a=0
 b=0
 for i in {10..20}
 do
 ping -c2  -i0.1 -W1 172.25.0.$i > /dev/null    【-c规定次数,-i设置回复时长,-W设置报错时长,将结果输出到黑洞设备】
 if [ $? -eq 0 ];then                                          【判断该命令是否执行】
        echo "可以"
         let a++                                                   【利用let运算计算出数量】
  else
         echo "不可以"
          let b++
  fi
  done

echo you have $a that can be pinged
echo you have $b that cannot be pinged

    4) 利用for循环设计99乘法表
        #!/bin/bash                                 【本例用到两个for循环结构】
   for i in {1..9}                              【产生第一位数】
   do
   for o in `seq $i`                         【产生第二位数】
   do
          echo -n "$i*$o=$[i*o]    "          【计算结果和输出格式】
   done
            echo                                    【换行】

   done

         二:while循环
        定义: while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定的一组操作,直到条件变化为不成立为止。
        特点:一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环
        格式:

             while 条件测试         当条件满足时【满足即循环】
  do
          命令序列
  done

         例:
         1)计算1-100的和

              #!/bin/bash
     i=1
     num=0
     while [ $i -le 100 ]   【变量若小于等于100时则一直循环】
 do  
         let num+=i           【每次循环num的值都与i的值相加】
         let i++                  【每次循环i的值都会加1】
  done
        echo $num

            2)猜数          

                #!/bin/bash
      i=$[RANDOM%100]                                  【产生1-100的随机数】
      a=0
         while :                                                     【无条件,一直循环】
     do
            read -p "shu ru:" num                          【读取用户输入数字】
            let a++                                                 【计算执行次数】
      if [ $num -eq $i ];then                                【判断是否猜中】
            echo "终于TM猜中了" 
            echo "TM猜$a次"
         exit                                                          【符合即结束脚本】
      elif [ $num -gt $i ];then
              echo "你个垃圾,猜这么大干屌"
       else 
              echo "小了,兄弟"

       fi

       done

         三:case 语句
         特点:与if判断无异,对条件进行判断更简洁。

         格式:

               case 变量值 in                     【与模式对比,若相同即执行命令】
   模式1)
                命令;;                      【注意:一定要加分号】
   模式2
                命令;;
   *)                                             【匹配任意其他】

                 命令#! /bin/sed -nf
    esac

         例:
         1)利用case语句判断用户输入和脚本输出

                #!/bin/bash
    case $1    in
    redhat)                                           【判断用户输入是否为redhat】
           echo "fedora";;                        【成立则输出】
    fedora)
            echo "redhat";;
    *)                                                     【是否为其他】
             echo "erro"
     esac

         四:shell 函数
         函数:为一段代码取别名              【定义时不会执行函数】

         方法一:
                   function  函数名 {
                 命令序列
                  .. ..
              }

    方法二:                       
              函数名(){
                   函数序列
                    .. ..
               }

         例:

         1)常量函数【单次使用】
                 [root@server0 /]# jian(){   定义
        > mkdir /ceshi
        > cd /ceshi
        > }
                 [root@server0 /]# jian      调用
                 [root@server0 ceshi]#

   2)变量函数【可多次使用,执行时需在命令后加参数】
                 [root@server0 ceshi]# lianxi(){
         > mkdir $1
         > cd $1
         > }
                 [root@server0 ceshi]# lianxi yi
                 [root@server0 yi]#

         **shell  ××× 【利用死循环使机器内存瞬间用尽,造成死机】**
                        #!/bin/bash

                  .(){
                  .|.&
                   }
                   .                               【利用shell 函数原理定义函数并连续执行】

         常用命令:

             continue结束本次循环跳到下次循环
       break可以结束整个循环
             exit 结束脚本

           例:
             1)创建循环数到3则跳过

                   #!/bin/bash
       for i in {1..5}
  do 
          [ $i -eq 3 ]&&break
         echo $i
  done
          echo "game over"
    [root@server0 /]# ./test.sh
    1
    2
    game over

     2)创建循环数到3即退出脚本
       #!/bin/bash
    for i in {1..5}
do 
        [ $i -eq 3 ]&&exit
        echo $i
done
        echo "game over"
       [root@server0 /]# ./test.sh
       1
       2

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325124483&siteId=291194637