shell的结构性语句即 分支和循环
分支语句
if 条件;then
...
代码块
else
...
代码块
fi #结尾
例:
#!/bin/bash
read var
if [ ${var}x = "goodx" ];then
echo "good"
else
echo "not good"
fi
输出结果:

当输入"good" "gooo" ""时,分别输出"good" "not good" "not good"
虽然shell的test的规则是,测试成功为0,测试失败为1(参考我之前博客:shell的功能性(测试)语句-->test),但是在分支shell的结构性语句中仍然是遵循条件满足则执行,不满足则执行else后的语句。
分支语句的结束由开始关键字的反序表示
如
if --> fi
case --> esac
多路分支语句
case 字符型变量 in
模式1)
...
;;#类似于C语言中的break,但是在shell里面;;一定要
模式2)
...
;;
...
模式n)
...
;;
esac #结尾
filename=$1
case $filename in
*.c) #匹配所有以.c结尾的文件名
echo "c source file"
;;
*.h)
echo "header file"
;;
*.cpp)
echo "c++ source file"
;;
esac
case语句真正强大的地方在于它可以使用模式而不是固定的字符来匹配。一个模式是由正规字符和特殊通配符组成的字符串,该模式可以用正则表达式
* shell通配符 代表任意多个(也可以是0个)字符
? shell通配符 代表一个任意字符
循环语句
for循环
for 变量名 in 单词表
do
...循环体语句
done
"单词表":以空白符分隔开来的字符串列表,比如: a ab c ddd
for循环执行的次数就是“单词表”中的单词的个数,并且每
次执行的时候,“变量”的值就取下一个单词的值
类似于python的for循环
例子:
for i in a b c ddd
do
echo $i
done
#该shell脚本将陆续输出 a b c ddd
while循环
while 命令或表达式
do
...
done
until循环
until 命令或表达式
do
...
done
until和while的功能相似,所不同的是until只当测试的
命令或表达式的值为假的时候才执行循环体的命令列表,
条件成立,则退出循环,这一点和while相反
break 和 continue
break n
跳出n层循环,n不写时默认为1,和C语言含义一致
continue n
跳过n层循环,n=2时,跳过本次循环和上一层循环
n不写时默认为1,和C语言含义一致