Shell之循环控制

条件判断:if语句

if [ expression ]
  then
  command;  
fi

注意:expression 和方括号[ ]之间必须有空格,否则会有语法错误
 其他格式:
  if ... else ... fi 语句
  if ... elif ... else ... fi 语句
 
 eg:

  root@wdev02:/usr/local/shell# cat if.sh
    #!/bin/bash
    read num
    if [ $num -eq 10 ]
    then
    echo "输入ok"
    else
    echo "输入错误"
    fi
  root@wdev02:/usr/local/shell# sh if.sh
    10
    输入ok

分支控制:case语句

  case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构。

语法结构:
  case $变量 in
    值1)
      执行动作1;;
值2)
      执行动作2;;
*)
      执行默认动作;
   esac

eg:由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符, 并输出相应的提示信息

  root@dev02:/usr/local/shell# cat case.sh
  #!/bin/bash
   read -p "press some key ,then press return :" KEY
  case $KEY in
    [a-z]|[A-Z])
      echo "It's a letter.";;
     [0-9])
      echo "It's a digit.";;
    *)
      echo "It's function keys、Spacebar or other ksys."
  esac
  root@dev02:/usr/local/shell# bash case.sh
  press some key ,then press return :1
  It's a digit.

循环控制:for语句

#!第一种写法 类似C、Java
for ((i=1; i<=100; i ++))
do
  echo $i  
done
注意:从 ubuntu 6.10 开始,ubuntu 就将先前默认的bash shell 更换成了dash shell;其表现为 /bin/sh 链接倒了/bin/dash而不是传统的/bin/bash
解决办法:直接使用bash

eg:

  root@dev02:/usr/local/shell# cat for.sh
    #!/bin/bash
    for((i=1;i<=5;i++));
    do
      echo $(expr $i \* 3 + 1);
    done
  root@dev02:/usr/local/shell# bash for.sh
    4
    7
    10
    13
    16

#!第二种写法 in应用
for i in {1..100} 
do 
  echo $i 
done 
#!第三种写法 seq 使用 for i in `seq 1 100` do echo $i done

循环控制:while语句

while [ 条件判断式 ]
    do
        执行动作
    done

eg:利用while循环打印一个5x5的*

  root@dev02:/usr/local/shell$ cat while.sh
    #!/bin/bash
    i=1
    j=1
    while [ $i -le 5 ]
      do
        while [ $j -le 5 ]
          do
            echo -n "* "
            j=$(($j + 1))
          done
          echo
        i=$(($i + 1))
        j=1

      done
  root@dev02:/usr/local/shell$ sh while.sh
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *

 

posted @ 2020-03-13 20:14  鄙人取个名字好难  阅读(228)  评论(0编辑  收藏  举报