bash笔记-03-流程控制
时间:2006-07-15 来源:zzzppp
条件执行
shell脚本能够测试任何命令的返回值, 不管它是直接从命令行中被调用的还是在脚本中被调用的(所以你最好在脚本的末尾加上exit语句).
一般地, bash中使用"test"和"["来判断命令的返回值. 如果是要检验命令的返回值, 检测返回值的方法和c中类似.
$ if test -f file
> then
> ls -l file
> fi
若使用[, 第一句改为: $ if [ -f file ]
注意: [与file之间要留有空格, 想象[和test等价就知道原因了.
test, [ 测试它之后的语句, 若为真, 则执行then到fi之间的语句. 测试的类容分为3类: 字符串比较, 算术比较, 文件类型. 具体可参考 $ man [
联想C语言里的条件执行: if (condition) , 对比bash中的if [condition], 可以把[]想象成C语言if之后的().
控制结构
if-elif-else
if condition
then
statements
elif
statements
else
statements
fi
for
for name [in list]
do
statements
done
如果不注明[ in list], 则默认为&@
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
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
相关阅读 更多 +