SHELL bash循环结构
1、until 的语法格式是 until 测试; do 命令块; done
只要测试命令返回非零值就命令块。其返回值是命令块中最后一个被的命令的返回值。命令
块没有被执行则返回零。
2、while命令的语法格式是 while 测试命令; do 命令块; done
只要测试命令返回零值就执行命令块。其返回值是命令块中最后一个被执行的命令的返回值。如果命令
块没有被执行则返回零。
3、for命令的语法格式是 for 变量 [in 单词];do 命令块;done
将单词扩展成一个列表,然后把结果中列表的每个元素都赋值给变量并执行一次命令块。如果没有“in 单
词”这部分,则for 依次对每个位置参数都执行一次命令块,就好像指定了“in $@”一样,其返回值是命令块中最后一个被执行的命令的返回值。如果对单词的扩展没有得到任何元素,则不执行任何命令,并返回零。
for 命令还支持另外一种格式:for (( 表达式一; 表达式二; 表达式三)); do 命令块; done
首先,按照下面将要介绍规则对算术表达式一进行求值。然后不断的对算术表达式二进行求值,直到其结果为零。每次求值时,如果表达式二的值不是零,则执行一 次命令块,并且计算算术表达式三的值。如果省略了任意一个表达式,则效果就好像该表达式总是返回一。其返回值是命令块中最后一个被执行的命令的返回值。如 果表达式的值都是假的,则返回假。
4、if 命令的语法格式是
if 测试命令一; then
命令块一;
[elif 测试命令二; then
命令块二;]
...
[else
其它命令块;]
fi
首先执行测试命令一这个命令列表,如果其返回值为零,则执行命令列表命令块一。如果测试命令一返回
非零值,则依次执行每个elif列表,如果其返回值为零,则执行其对应的命令块,并结束整个命令。如果
有奜else 其它命令块夢,并且if 或者elif 子句的最后一个命令返回值为非零,则执行其它命令块。整个命
令的返回值是最后一个被执行命令的返回值。如果没有任何一个条件为真,则返回零。
5、case命令的语法格式
case 单词 in
(模式一 | 模式二 | 模式三)命令块;;
...
esac
case 命令会选择性的执行与单词所匹配的第一个模式对应的命令块。如果打开了shell的nocasematch
选项,则匹配时将忽略字母的大小写。"|"用来分隔多个模式,而")"用来结束模式列表。[2]模式列表和其对应的命令块叫做一个"分句"。每个分句都必 须由";;",";&"或者";;&"结束。这里的单词在匹配之前要经过波浪号扩展、参数扩展、命令替换、算术扩展以及引用去除,而每个 模式也要经过波浪号扩展、参数扩展、命令替换、算术扩展等步骤。case 分句的数量量不限的,但是每个分句都以";;",";&"或";;&"结束。最先匹配的模式决定了哪个命令块被执行。下面是case 在脚本中使用的一个例子,它描述一些动物的有趣特征:
case 的例子
1 echo -n "请输入一个动物的名称:"
2 read ANIMAL
3 echo -n "$ANIMAL有"
4 case $ANIMAL in
5 ( 马| 狗| 猫) echo -n "四";;
6 人| 袋鼠) echo -n "两";;
7 *) echo -n "末知数目的";;
8 esac
9 echo "腿。"
如果使用了";;"(来结束分句)则匹配第一个模式以后就不会再匹配其它模式。如果用";&"来代替";;",则执行命令块后,如果下面还 有其它分句,就继续执行该分句。如果用";;&"来代替";;",则执行命令块后,如果下面还有其它分句,就检查其模式(如果有的话);如果其模 式为真,继续执行其对应的命令块。如果任何模式都不匹配,该命令的返回状态是零;否则,返回最后一个被执行的命令的返回值
6、select 结构使得菜单的生成变得简单。它的语法格式几乎和for 命令一样:
select 名称[in 单词表...]; do 命令块; done
举例:允许用户从当前目录选择一个文件,并显示用户选择的文件名及序号。
select fname in *;
do
echo you picked $fname \($REPLY\)
break;
done
7、 ((算术表达式))相当于let “表达式”
对算术表达式求值。如果这个值不是零,则返回状态是零,否则返回1。
[[条件表达式]]
- 最新评论