Shell之循环控制
条件判断:if语句
if [ expression ] then command; fi
注意:expression 和方括号[ ]之间必须有空格,否则会有语法错误
其他格式:
if
...
else
...
fi
语句
if
...
elif
...
else
...
fi
语句
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
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *