Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114851
  • 博文数量: 47
  • 博客积分: 1960
  • 博客等级: 上尉
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-18 14:52
文章分类

全部博文(47)

文章存档

2010年(47)

我的朋友

分类:

2010-02-18 15:15:24

条件执行

shell脚本能够测试任何命令的返回值, 不管它是直接从命令行中被调用的还是在脚本中被调用的(所以你最好在脚本的末尾加上exit语句).

一般地, bash中使用"test"和"["来判断命令的返回值. 如果是要检验命令的返回值, 检测返回值的方法和c中类似.
$ if ! grep $USER /etc/passwd
$ grep $USER /etc/passwd; if [ $? -ne 0 ];
test和[是等价的, 唯一的区别是调用[时候会在命令末尾加一个]以增加可读性.
实际上man中关于test和[显示的是同样的内容.
它们的使用方法如下:
$ if test -f file
> then
> ls -l file
> fi

若使用[, 第一句改为:  $ if [ -f file ]
注意: [与file之间要留有空格, 想象[和test等价就知道原因了.

test, [ 测试它之后的语句, 若为真, 则执行then到fi之间的语句. 测试的类容分为3类: 字符串比较, 算术比较, 文件类型. 具体可参考 $ man [

被比较的变量要用""引用起来! 看看下面的脚本:
#!/bin/bash
echo "please input 'yes' or 'no'"
read answer
if [ $answer = "yes" ]; then
echo "yes"
else
echo "no"
fi
如果我直接输入回车, 那么" if [ $answer = "yes" ]; then "语句会等价于 " if [  = "yes" ]; then ". 这是个无效的比较. 所以应该用""把$answer引用起来, 这样, 即便输入回车, 也是这样的比较: " if [  "" = "yes" ]; then "

联想C语言里的条件执行: if (condition) , 对比bash中的if [condition], 可以把[]想象成C语言if之后的().

控制结构

if-elif-else
if condition
then
statements
elif
statements
else
statements
fi

要执行的语句跟在then之后, if语句以fi结尾.

for
for name [in list]
do
statements
done

如果不注明[ in list], 则默认为&@

要执行的语句跟在do之后, for语句以done结尾.

Since all shell values are considered strings by default, the for loop is good for looping through a series of strings, but is a little awkward to use for executing commands a fixed number of times.

while




阅读(246) | 评论(0) | 转发(0) |
0

上一篇:bash笔记-02-变量

下一篇:bash笔记-04-函数

给主人留下些什么吧!~~