shell 脚本编程学习(三) 条件控制,循环控制

编程当然少不了条件控制和循环控制了,shell 脚本也有自己的条件和循环方法。

条件控制

if 语句

条件控制中最常用的就是 if 判断了,shell 中通过 if-then 语句来实现。它的结构是:

if some_condition; then
    do something
fi

if condition_1; then
    do something
elif condition_2
    do something
else
    do something
fi

与 js 中的 if、else、else if 道理相同,需要注意的是 if 控制结构要用反过来写的 if 即 fi 来结束,在 shell 的其他控制结构中也有这样的规则。
不同于其他编程语言(例如 js),在 if 的 condition 中我们不能直接用 ==、!=、>、< 之类的逻辑运算符来写条件,需要借助一个 test 命令来实现逻辑判断。示例如下:

NAME='jack'
if ( test $NAME = 'jack' ); then # 判断 NAME 是 jack
    echo 'hello jack'
fi

if ( test $NAME != 'jack' ); then # 判断 NAME 不是 jack
    echo 'not jack'
fi

这里要注意 if 和括号之间的空格以及括号内语句中的空格是必须的,因为它们是shell 划分命令参数的依据。除了逻辑判断之外,test 命令还能通过一些选项判断文件目录和文件权限等。如果觉得写 test 麻烦,也可以用中括号代替括号,与写 test 的方式等价,同样也要注意命令中的空格。例如:

$NAME = 'jack'
$DIR = '/etc'
if [ $NAME = 'jack' ] # 逻辑判断,等价于 if ( test $NAME = 'jack' )
if [ -d $DIR ] # 判断是否是文件夹
if [ -e $DIR ] # 判断文件是否存在
if [ -f $DIR ] # 判断文件存在并且是一个普通文件(不是目录或其他特殊的文件)

注意不像其他编程语言有数值类型,在 shell 中所有的变量都是字符串。所以想要进行数字的运算和比较需要借助其他命令(例如 expr),不能直接加减。

NUM=1
NUM=NUM+1
echo $NUM # 输出 1+1 而不是 2
NUM=1
NUM=`expr $NUM + 1` # 用 expr 命令进行数字运算,注意数字和运算符之间要有空格
echo $NUM # 输出 2

case 语句

当判断一个变量的多种取值时,用 case 语句会比 if 更方便和清楚。shell 中 case 语句的语法如下:

case expression in
    pattern1)
        action1
    ;;
    pattern2)
        action2
    ;;
    pattern3)
        action3
    ;;
    *)
        defaultAction
    ;;
esac

除了语法不一样外,和其他语言的 case 作用相同,case 结构也用反写的 case 即 esac 来结束。

循环控制

while 语句

while 循环在编程语言中很常见,只要满足特定的条件,while 语句就重复执行代码块。在 shell 中条件判断也可以通过 test 命令或中括号的形式来实现,示例如下:

# 循环输出 1 到 9 的数字
$NUM=1
while [ $NUM != 10 ]
do
    echo $NUM
    NUM=`expr $NUM + 1`
done

until 语句

until 语句的条件与 while 相反,只要不满足特定的条件,until 语句就重复执行。例如:

# 循环输出 9 到 1 的数字
$NUM=9
until [ $NUM = 0 ] # 输出 9 到 1 的数字
do
    echo $NUM
    NUM=`expr $NUM - 1`
done

以上就是 shell 中常用的控制结构了,与其他编程语言类似,但要注意语法和细节上的差异。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章