分支语句
语法结构:
if 表达式
then 命令表
fi
如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。
if和fi是条件语句的语句括号, 必须成对使用; 命令表中的命令可以是一条, 也可以是若干条。
if中的test语句可用中括号[ ]代替
if test -e $file
等价于
if [ -e $file ] 中括号内侧两端必须有空格
语法结构为:
if 表达式
then
命令表1
else
命令表2
fi
如果表达式为真, 则执行命令表1中的命令, 再退出if语句; 否则执行命令表2中的语句, 再退出if语句. 注意: 无论表达式是否为真, 都有语句要执行.
then和else后面的命令表可以写好几条
if 表达式
then
命令表1
elif
表达式2
then
命令表2
elif
表达式3
then
命令表3
。。。。
else
命令表n
fi
相当于C语言里的else if。Shell里if和elif下面都必须有then
向上的尖括号 ^ ,是正则表达式以后面的内容开头的第一个元素
读别人的代码,如果有不认识的命令表达式,先找手册看命令的基本意思,对照说明预测表达式的含义和输出。然后把命令在终端上敲一敲,看看分析的结果是否一样。
test命令使用总结
test命令测试的条件成立时, 命令返回值为真(0),否则返回值为假(非0).
多路分支语句
case…esac
多路分支语句case用于多重条件测试, 语法结构清晰自然. 其语法为:
case 字符串变量 in case语句只能检测字符串变量
模式1)
命令表1 各模式中可用文件名元字符,以右括号结束
;;
模式2 | 模式3) 一次可以匹配多个模式用“|”分开
命令表2
;;
…… 命令表以单独的双分号行结束,退出case语句
模式n)
命令表n
;; 模式 n常写为字符* 表示所有其它模式
esac 最后一个双分号行可以省略
default其余情况可以写 *)
-o 或
-a 与
!非
-gt 大于
-lt 小于
循环语句
for的用法
当循环次数已知或确定时,使用for循环语句来多次执行一条或一组命令。格式为:
for 变量名 in 单词表
do
命令表
done
变量依次取单词表中的各个单词, 每取一次单词, 就执行一次循环体中的命令. 循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。 如果单词表是命令行上的所有位置参数时, 可以在for语句中省略 “in 单词表” 部分。
@和*,将终端输入的命令行参数传进来。*是当做整体,@是当成一个一个的
while的用法
语法结构为:
while 命令或表达式
do
命令表
done
while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。
while语句的退出状态为命令表中被执行的最后一条命令的退出状态。
循环控制语句
break 和 continue
break n 则跳出n层;
continue语句则马上转到最近一层循环语句的下一轮循环上,
continue n则转到最近n层循环语句的下一轮循环上.