Linux Bash Shell入门教程(2)

2.4 BASH 中的基本流程控制语法

BASH 中几乎含有 C 语言中常用的所有控制结构,如条件分支、循环等,下面逐一介绍。

2.4.1 if...then...else

if 语句用于判断和分支,其语法规则和 C 语言的 if 非常相似。其几种基本结构为:

if [ expression ]
then
statments
fi

或者

if [ expression ]
then
statments
else
statments
fi

或者

if [ expression ]
then
statments
else if [ expression ]
then
statments
else
statments
fi

或者

if [ expression ]
then
statments
elif [ expression ]
then
statments
else
statments
fi

值得说明的是如果你将 if 和 then 简洁的写在一行里面,就必须在 then 前面加上分号,如:if [ expression ]; then ... 。下面这个例子说明了如何使用 if 条件判断语句:

#!/bin/bash

if [ $1 -gt 90 ]
then
echo "Good, $1"
elif [ $1 -gt 70 ]
then
echo "OK, $1"
else
echo "Bad, $1"
fi

exit 0

上面例子中的 $1 是指命令行的第一个参数,这个会在后面的“BASH 中的特殊保留字”中讲解。

2.4.2 for

for 循环结构与 C 语言中有所不同,在 BASH 中 for 循环的基本结构是:

for $var in


do
statments
done

其中 $var 是循环控制变量,

是 $var 需要遍历的一个集合,do/done 对包含了循环体,相当于 C 语言中的一对大括号。另外如果do 和 for 被写在同一行,必须在 do 前面加上 ";"。如: for $var in ; do 。下面是一个运用 for 进行循环的例子:

#!/bin/bash

for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done

# 如果列表被包含在一对双引号中,则被认为是一个元素
for day in "Sun Mon Tue Wed Thu Fri Sat"
do
echo $day
done

exit 0

注意上面的例子中,在 for 所在那行的变量 day 是没有加 "$" 符号的,而在循环体内,echo 所在行变量 $day 是必须加上 "$" 符号的。另外如果写成 for day 而没有后面的 in

部分,则 day 将取遍命令行的所有参数。如这个程序:

#!/bin/bash

for param
do
echo $param
done

exit 0

上面这个程序将列出所有命令行参数。for 循环结构的循环体被包含在 do/done 对中,这也是后面的 while、until 循环所具有的特点。

2.4.3 while

while 循环的基本结构是:

while [ condition ]
do
statments
done

这个结构请大家自己编写一个例子来验证。

2.4.4 until

until 循环的基本结构是:

until [ condition is TRUE ]
do
statments
done

这个结构也请大家自己编写一个例子来验证。

2.4.5 case

BASH 中的 case 结构与 C 语言中的 switch 语句的功能比较类似,可以用于进行多项分支控制。其基本结构是:

case "$var" in
condition1 )
statments1;;
condition2 )
statments2;;
...
* )
default statments;;
esac

下面这个程序是运用 case 结构进行分支执行的例子:

#!/bin/bash

echo "Hit a key, then hit return."
read Keypress

case "$Keypress" in
[a-z] ) echo "Lowercase letter";;
[A-Z] ) echo "Uppercase letter";;
[0-9] ) echo "Digit";;
* ) echo "Punctuation, whitespace, or other";;
esac

exit 0

上面例子中的第四行 "read Keypress" 一句中的 read 语句表示从键盘上读取输入。这个命令将在本讲义的 BASH 的其他高级问题中讲解。

2.4.6 break/continue

熟悉 C 语言编程的都很熟悉 break 语句和 continue 语句。BASH 中同样有这两条语句,而且作用和用法也和 C 语言中相同,break 语句可以让程序流程从当前循环体中完全跳出,而 continue 语句可以跳过当次循环的剩余部分并直接进入下一次循环。

2.5 函数的使用

BASH 是一个相对简单的脚本语言,不过为了方便结构化的设计,BASH 中也提供了函数定义的功能。BASH 中的函数定义很简单,只要向下面这样写就可以了:

function my_funcname {
code block
}

或者

my_funcname() {
code block
}

上面的第二种写法更接近于 C 语言中的写法。BASH 中要求函数的定义必须在函数使用之前,这是和 C 语言用头文件说明函数方法的不同。

更进一步的问题是如何给函数传递参数和获得返回值。BASH 中函数参数的定义并不需要在函数定义处就制定,而只需要在函数被调用时用 BASH 的保留变量 $1 $2 ... 来引用就可以了;BASH 的返回值可以用 return 语句来指定返回一个特定的整数,如果没有 return 语句显式的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为 0,如果执行失败返回错误码)。函数的返回值在调用该函数的程序体中通过 $? 保留字来获得。下面我们就来看一个用函数来计算整数平方的例子:

#!/bin/bash

square() {
let "res = $1 * $1"
return $res
}

square $1
result=$?
echo $result

exit 0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3f2c7f0ed8722ab7d5ec880319b45984.html