linux bash 教程,Linux Bash Shell入门教程

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 00b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值