继续Shell的学习。上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while)
流程控制
if else
流程控制不可为空,如果else没有语句执行,就不要写else
if:
if condition then command1 command2 ... commandN fi
if else:
if condition then command1 command2 ... conditionN else command fi
if else-if else:
if condition1 then command1 elif condition2 then command2 else commandN fi
if else语句经常和test命令结合使用
num1=$[*] num2=$[+] if test $[num1] -eq $[num2] then echo '两个数字相等' else echo '两个数字不等' fi
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 loop in 5 # 顺序输出列表中所有数字
do
echo "The value is: $loop"
done
for str in 'This is a string' # 顺序输出字符串中所有字符
do
echo $str
done
while
condition通常为测试条件。格式如下
while condition
do
command
done
let命令:执行一个或多个表达式,变量计算中不需要加$表示变量
#!/bin/bash
int=
while(( $int<=))
do
echo $int
let "int++"
done
读取键盘输入
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名:'
while read FILM
do
echo "是的!$FILM是一个好网站"
done
无限循环
while:
do
command
done
或者
while true
do
command
done
或者
for (( ; ; ))
until循环
until循环执行一系列命令直至条件为true为止
一般while循环优于until循环
until condition
do
command
done
一个实例
#!/bin/bash a= until [ ! $a -lt ]
do
echo $a
a=`expr $a + `
done
case
多选择语句,匹配一个值一个模式
每个模式名用右括号结束
一旦模式匹配到其中一个,执行完匹配到的模式的所有命令后不再继续执行其他模式
如果没有匹配到任何模式,使用星号*捕获这个值,再执行后面的命令
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
*)
command1
command2
...
commandN
;;
esac # 就是case反过来写
跳出循环
break
continue
跟其他语言的break continue用法相同