linux中流程控制语句if if else case 实例

linux中流程控制语句if if else case 实例。

linux流程控制语句:
if语句格式如下:
#if语句的后面是Shell命令,如果该命令执行成功返回0,则执行then后面的命令。

 代码如下 复制代码
  if command
then
command
command
fi

#用test命令测试其后面expression的结果,如果为真,则执行then后面的命令。

 代码如下 复制代码
  if test expression
then
command
fi

#下面的格式和test expression等同

 代码如下 复制代码
  if [ string/numeric expression ]
then
command
fi

#下面的两种格式也可以用于判断语句的条件表达式,而且它们也是目前比较常用的两种。

 代码如下 复制代码
if [[ string expression ]]
then
command
fi

if (( numeric expression ))           #let表达式
then
command
fi

见如下示例:

 代码如下 复制代码
   /> cat > test1.sh                       #从命令行直接编辑test1.sh文件。
echo -e “Are you OK(y/n)? c”
read answer

#这里的$answer变量必须要用双引号扩住,否则判断将失败。当变量$answer等于y或Y时,支持下面的echo命令。

 代码如下 复制代码
    if [ "$answer" = y -o "$answer" = Y ]
then
echo “Glad to see it.”
fi
CTRL+D
/> . ./test1.sh
Are you OK(y/n)? y
Glad to see it.

上面的linux判断还可以替换为:

 代码如下 复制代码
    /> cat > test2.sh
echo -e “Are you OK(y/n or Maybe)? c”
read answer

# [[ ]]复合命令操作符允许其中的表达式包含元字符,这里输入以y或Y开头的任意单词,或Maybe都执行then后面的

 代码如下 复制代码
echo。
if [[ $answer == [yY]* || $answer = Maybe ]]
then
echo “Glad to hear it.
fi
CTRL+D
/> . ./test2.sh
Are you OK(y/n or Maybe)? yes
Glad to hear it.

下面的例子将使用Shell中的扩展通配模式。

 代码如下 复制代码
    /> shopt -s extglob        #打开该扩展模式
/> answer=”not really”
/> if [[ $answer = [Nn]o?( way |t really) ]]
> then
>    echo “I am sorry.”
> fi
I am sorry.

对于本示例中的扩展通配符,这里需要给出一个具体的解释。[Nn]o匹配No或no,?( way|t really)则表示0个或1个( way或t really),因此answer变量匹配的字符串为No、no、Not really、not really、No way、no way。
下面的示例使用了let命令操作符,如:

 代码如下 复制代码
/> cat > test3.sh
if (( $# != 2 ))                    #等同于 [ $# -ne 2 ]
then
echo “Usage: $0 arg1 arg2″ 1>&2
exit 1                         #exit退出值为0-255之间,只有0表示成功。
fi
if (( $1 < 0 || $1 > 30 ))      #等同于 [ $1 -lt 0 -o $1 -gt 30 ]
then
echo “arg1 is out of range.”
exit 2
fi
if (( $2 <= 20 ))                  #等同于 [ $2 -le 20 ]
then
echo “arg2 is out of range.”
fi
CTRL+D
/> sh ./test3.sh
Usage: ./test3.sh arg1 arg2
/> echo $?                          #Shell脚本的退出值为exit的参数值。
1
/> sh ./test3.sh 40 30
arg1 is out of range.
/> echo $?

2
下面的示例为如何在if的条件表达式中检验空变量:

 代码如下 复制代码
/> cat > test4.sh
if [ "$name" = "" ]                #双引号就表示空字符串。
then
echo “name is null.”
fi
CTRL+D
/> . ./test4.sh
name is null.

if/elif/else语句的使用方式和if语句极为相似,相信有编程经验的人都不会陌生,这里就不在赘述了,其格式如下:

 代码如下 复制代码
if command
then
command
elif command
then
command
else
command
fi

见如下示例脚本:

 代码如下 复制代码
/> cat > test5.sh
echo -e “How old are you? c”
read age
if [ $age -lt 0 -o $age -gt 120 ]                #等同于 (( age < 0 || age > 120 ))
then
echo “You are so old.”
elif [ $age -ge 0 -a $age -le 12 ]               #等同于 (( age >= 0 && age <= 12 ))
then
echo “You are child.”
elif [ $age -ge 13 -a $age -le 19 ]             #等同于 (( age >= 13 && age <= 19 ))
then
echo “You are 13–19 years old.”
elif [ $age -ge 20 -a $age -le 29 ]             #等同于 (( age >= 20 && age <= 29 ))
then
echo “You are 20–29 years old.”
elif [ $age -ge 30 -a $age -le 39 ]             #等同于 (( age >= 30 && age <= 39 ))
then
echo “You are 30–39 years old.”
else
echo “You are above 40.”
fi
CTRL+D
/> . ./test5.sh
How old are you? 50
You are above 40.

case语句格式如下:
case variable in
value1)
command
;;            #相同于C语言中case语句内的break。
value2)
command
;;
*)                #相同于C语言中switch语句内的default
command
;;
esac
见如下示例脚本:

 代码如下 复制代码
    /> cat > test6.sh
#!/bin/sh
echo -n “Choose a color: ”
read color
case “$color” in
[Bb]l??)
echo “you select blue color.”
;;
[Gg]ree*)
echo “you select green color.”
;;
red|orange)
echo “you select red or orange.”
;;
*)
echo “you select other color.”
;;
esac
echo “Out of case command.”
/> . ./test6.sh
Choose a color: green
you select green color.
Out of case command.
本文链接地址: linux中流程控制语句if if else case 实例