shell之条件测试和判断语句

来源:互联网 发布:淘宝联盟显示已结算 编辑:程序博客网 时间:2024/05/16 05:59

一 条件测试:

Shell中,用测试语句测试指定的条件表达式的条件的真或假

当指定条件为真时,返回0,反之,返回非0

条件测试的语法:test命令和[命令]

testexpression  [ epression ]

([ 命令为了增加程序的可读性,追加],同时[ ]与expression之间有空格,因为[ 为shell命令)

 1.1 字符串测试

string1=string2    判断两个字符串是否相等

string1=string2   判断两个字符串是否不相等

-n string            判断string是是否非空字符串

-z string            判断string是否是空串

 例子:

a=“hello”

b=“world”

[ “$a”  =  “$b”]    //必须有空格

Echo $?    //结果为1,不相等

Test “$a” !=”$b”

Echo $?     //结果为0

注意:shell中,空格也是字符串的一部分

$?是一个系统变量,用了获取shell命令的执行状态。执行成功,返回0,否则返回1

1.2 整数测试:

number –eqnumber2    比较number1number2是否相等,如果相等,测试结果为0

number –nenumber2    比较number1number2是否不相等,如果不相等,测试结果为0

number –gtnumber2    比较number1是否大于 number2,如果大于,测试结果为0

number –ltnumber2    比较number1是否小于 number2,如果小于,测试结果为0

number –genumber2   比较number1是否大于等于 number2,如果大于等于,测试结果为0

number –lenumber2   比较number1是否小于等于 number2,如果小于等于,测试结果为0

注意:不支持浮点数

1.3文件测试

对文件状态进行测试,判断文件是否存在,是否可读。

test op file 或者[ op file ],op代表操作符

-a file 文件是否存在,存在为0

-b file 文件是否存在,且为块文件,已存在,为0

-c file 文件是否存在,且为字符文件,存在,为0

-d file 文件是否存在,且为目录,存在,为0

-e file -a

-s file 文件的长度是否大于0或文件非空,如果非空,为0

-f file 文件存在,且为常规文件,结果为0

-w file 文件是否存在且可写

-L file 文件是否存在,且为符号链接

-u file 文件是否设置suid

-r file 文件是否存在,且可读

-x file 文件是否存在,且可执行

-nt file 某个指定的文件修改时间是否比另一个晚

-ot file某个指定的文件修改时间是否比另一个早

1.4 逻辑操作符:

expression逻辑非

expression1 –aexpression2 逻辑与,都为真,才真

expression1 –oexpression2 逻辑或,有一个真,就真

 

二 条件判断语句

2.1 if语句

if expression

then

       statement1

       stetement2

fi

if exrexxion;then

       statement1

       statement2

fi

(表达式为真,执行then,分号表示if语句结束,要想将多条语句放在一行中,可用分号隔开。fi表示if结构的结束。)

#使用条件测试判断/bin/bash是否是一个常规文件

if [ -f /bin/bash]

   then echo "/bin/bash is a file"

fi

另外:

if :; then echo"always true"; fi

:表示空命令,退出状态永远是0,即总为真,结果永远是alwaystrue

2.2 if else语句

if expression

then

       statement1

       stetement2

else

       statement3

fi

(表达式为真,执行then,为假执行else)

例子:

/bin/sh

#输出提示信息

echo "Pleaseenter a number:"

#从键盘读取用户输入的数字

read num

#如果用户输入的数字大于10

if ["$num" -gt 10 ]; then

              #输出大于10的提示信息

      echo"The number is greater than 10."

#否则

else

       #输出小于或者等于10的提示信息

              echo "The number is equal toor less than 10."

fi

 

if elif语句

if expression1

then

       statement1

       stetement2

elif expression2

then

       statement3

elif expression3

then

       statement4

else

       statement5

fi

(表达式1为真,执行then,为假再判断expression2,都为假,则执行else)

 2.3 exit语句:

exit语句基本作用是终止shell程序的执行,可带一个可选的参数,指定程序退出时的状态码,存储在$?系统变量中

退出状态0意味脚本成功运行完毕,非0意味程序执行过程中出现某些错误,具体的错误可以根据具体的状态码判断。

使用ifexit语句,使程序在适当时候退出

例子:

04   #如果文件已经存在,则直接退出

05   if [ -e "$1" ]

06   then

07      echo "file $1 exists."

08      exit 1

09   #如果文件不存在,则创建文件

10   else

11      touch "$1"

12      echo "file $1 has been created."

13      exit 0

14   fi

 2.4 多条件判断语句case

case variable in

value1)

       statement1

value2)

satement2

*)

       statement3;;

esac

(case语句将variable变量值与value1与value2匹配,相等就执行对于后面的语句,都不相等,执行*后面的语句。遇到;;跳出case语句,执行esac后面的语句)

注意:variable可使用双引号,也可不用

  测试部分以)结束

可以用case语句处理用户不同的输入,执行不同代码

例如:

#! /bin/sh

#输出提示信息

echo "Hit a key,then hit return."

#读取用户按下的键

read keypress

#case语句开始

case "$keypress" in

   #小写字母

   [[:lower:]])

      echo"Lowercase letter.";;

   #大写字母

   [[:upper:]])

      echo"Uppercase letter.";;

   #单个数字

   [0-9])

      echo"Digit.";;

   #其他字符

   *)

      echo"other letter.";;

esac

 

0 0