Shell流程控制语句

  1. 条件判断if

if 语句语法格式:

if condition
then
    command1 
elif condition
   command2
else
    commandN 
fi

if语句以fi结束, 中间elif ,else 为条件分支,是可选的。

也写成一行时,以分号;分隔语句,如:

if [ $x -gt 3 ]; then echo "true"; fi

条件语句可以是多种形式,与具体运算符有关

比较运算:

if [ "$x" -lt "$y" ]; then
    # statements
fi

if (( $x > $y )); then
    # statements
fi

i=3  
j=4  

if [ $i == $j ]  
then  
   echo "$i 等于 $j"  
elif [ $i -gt $j ]  
then  
   echo "$i 大于 $j"  
else  
    echo "$i 小于 $j"  
fi  

使用test命令作为条件:

num1=$[12/4]  
num2=$[1+2]  

if test $[num1] -eq $[num2]  
then  
    echo 'num1=num2'  
else  
    echo 'num1!=num2'  
fi  
  1. for循环语句

for循环语法格式:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成一行:

for var in item1 item2 ... itemN; do command1; command2… done;

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

示例:

# 遍历数组
arr=(1 2 3 4)
for item in ${arr[*]}  
do  
    echo "$item"  
done 

for item in a b cd ef
do  
    echo "$item"  
done

输出结果:

1
2
3
4
a
b
cd
ef

当条件不存在时表示无限循环,如:for (( ; ; ))

  1. while循环语句

语法格式:

while condition
do
    command
done

示例:

#!/bin/bash  

i=1  
while (( $i<=3 ))  
do
  echo $i 
  let i++  #i=i+1
done

输出:

1
2
3

let命令使用说明

while循环可用于读取键盘输入

示例:

echo '请输入保密问题: '  

while read ask  
do  
    echo "你的问题是:$ask"  
done  

上面代码会循环读取键盘输入并设置给变量ask,按ctrl+D或ctrl+c 可结束循环

  1. until循环

until循环执行语句直到条件为true时结束循环,即条件表达式如果返回值为false,则继续执行循环体内的语句,否则跳出循环

语法格式:

until condition
do
    command
done

示例:

#!/bin/bash  
h=0
until (( $h>4 ))  
do
 echo $h
 let h++
done
echo "结束循环后h值:$h"

运行结果:

0
1
2
3
4
结束循环后h值:5
  1. 多分支语句case ... esac

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

语法格式如下:

case expression in
pattern1)
    command
    ...
    ;;
pattern2)
    command2
    ...
    ;;
...
*)
  statements
esac

expression表达式与每一分支pattern逐个进行匹配,如果匹配成功则执行分支下语句直到遇到;;后停止并跳出case。如果没有匹配的分支会跳转到*)分支,这相当于if语句里的else,*)可省略。

1.expression必须是一个可计算出值的语句,可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果 2.每个分支应以;;结束,最后个分支可省略

示例:

case $1 in  
    start)  echo '程序启动中...'  

    ;;  

    restart)  echo '重启中...'  

    ;;  

    stop)  echo '停止运行'  

    ;;  

    \*)  echo 'usage:start | restart | stop'  

esac  

同其他语言一样在循环过程中强制跳出循环可使用breakcontinue关键字

break 用于跳出整个循环

continue 用于跳出本次循环