红联Linux门户
Linux帮助

《我的shell笔记之初窥门径之shell控制语句》

发布时间:2010-03-28 00:38:20来源:红联作者:ailida
[align=center]《我的shell笔记之初窥门径之shell控制语句》[/align]
(一)if语句
原型1: if???then结构
if测试条件
then 语句1
fi
原型2: if???then???else结构
if测试条件
then 语句1
else 语句2
fi
原型3: if???then???elif???then???else结构
if测试条件
then 语句1
elif 测试条件
then 语句2
else 语句3
fi
在if语句中,重要的环节是编写测试条件,也就是程序执行的判断条件。事实上,可以将命令的执行结果当成条件测试。例如,如果命令正常结束,则表示执行成功,其返回值为0,条件测试为真;如果命令执行不成功,其返回值不等于0,条件测试为假。
测试条件的编写一般有以下3种形式。
(1)用test命令。
(2)用方括号[]将测试条件括起来。
(3)采用[[条件表达式]],条件表达式用来测试文件的属性和进行字符串比较。
下面以test为例:
test 的命令原型为:
test 表达式
test一般是与系统运算符搭配起来使用,它可以与如下四类运算符共同使用。
(1)字符串测试符
(2)数值测试运算符
(3)逻辑运算符
(4)文件运算符
(二)case语句
case语句是一种多重判断语句,类似于多个if???elif操作。case语句的原型为:
case 字符串 in
模式串表达式1)语句1;;
模式串表达式2)语句2;;
模式串表达式3)语句3;;
模式串表达式4)语句4;;
?
?
?
esac
case语句执行原理,是将字符串与各个模式顺次匹配,若满足则执行,否则继续查找,如果没有匹配成功的,则不执行任何语句,直接退出。
使用case语句需要注意的是:
每个模式匹配后的处理语句,是以;;两个分号进行结束。
模式串表达式应该有唯一性,不要出现几个模式串表达式能够互相转换的情况,这样不利于语句调试。
一个模式表达式可以包含多个模式串,但要用“|”隔开,“|”在这里是“或”的关系。
例子:
#! /bin/sh
echo please input your name:
read name
case $name in
Tom)
echo your name is tom;;
Jim)
echo your name is Jim;;
*)
echo "Sorry we don't know your name";;
esac
(三)Shell循环语句
for语句
三种表述方式:
(1)for 变量 in 取值集合
do
语句
done
(2)for 变量 in 文件正则表达式
do
语句
done
(3)for 变量 in $*
do
语句
done
例子:
#! /bin/sh
UNIX=(tom jim my test)
for i in ${name[*]}
do
echo $i
done
运行结果:
tom
jim
my
test
上述程序是针对数组的遍历操作,依次将数组中的值取出赋予i,同时在循环体中将i的值输出。
(四)while语句
while语句的一般形式为:
while 条件测试语句
do
语句
done
while语句的执行过程是:先测试条件语句是否为真,若为真,则执行循环体;当执行完当前命令后,在进行条件测试,直到条件测试结果为假,循环结束。
这里的条件测试语句可以是test语句,也可以是运行命令的返回值,若返回值大于0,则表示条件为真,否则条件为假。
例子:
#! /bin/sh
type = "";
echo input your type:
read type
while [$type != "quit"]
do
echo "your input is :" $type
echo input your type:
read type
done
这是一段交互式的代码,不断向终端输入字符串。while语句的判断条件是:当输入的字符串值为quit时,则退出;否则除输出上次用户输入的信息外,继续要求用户输入字符串。
看看时间不早了,都已经是第二天了,困困的我不得不去睡了,明天还有更多的工作等着我去做。大家保重哦,我们明晚继续。再见。
未完待续??????
文章评论

共有 3 条评论

  1. fire312923253 于 2011-07-18 15:41:06发表:

    多谢楼主分享,受教了

  2. ailida 于 2010-04-10 21:05:31发表:

    2# searcher827


    哪里哪里,互相学习吧

  3. searcher827 于 2010-04-05 20:42:32发表:

    不错,多谢分享!