If条件语句

基础

1、 设置命令执行的条件

shell环境中,可以根据命令执行后的返回状态值来判断该命令是否成功执行,当返回值为0是表示成功执行,否则表示执行失败。用于特定条件表达式的测试时,可以使用linux系统中提供的专用工具-------test命令

Test命令测试方式: test 条件表达式        或者   [ 条件表达式 ] 注意,方括号与条件表达式语句之间至少需要有一个空格进行分割。

2、 常见的条件操作主要包括文件状态测试、比较整数值大小、比较字符串、以及同时判断多个条件时的逻辑关系。

测试文件状态

文件状态测试是指根据给定的路径名称,判断该名称对应的是文件还是目录,或者判断文件是否可读、可写、可执行等等。

-d:测试是否为目录(directory

-e:测试目录或者文件是否存在(exist

-f:测试是否问文件(file

-r:测试当前用户是否有权限读取(read

-w:测试当前用户师傅可写入(write

-x:测试当前用户是否可执行(excute)该文件

-L:测试是否为符号连接(link)文件。

注意:当执行条件测试操作后,可通过预定义变量“$?”可以获得测试命令的返回状态值,从而判断该条件是否成立(返回0表示成立,否则不成立)

例:[ -f /etc/passwd ] -------àecho$?-----à返回值为0,表示成立

整数值比较

是指根据给定的两个整数值,判断第一个数是否大于、等于、小于……2个数值

-eq:第一个数值等于(equal)第二个数值

-ne:第一个数值不等于(not equal)第二个数值

-gt:第一个数值大于(greater than)第二个数值

-lt:第一个数值小于(lesser than)第二个数值

-le:第一个数值小于或者等于(lesser or equal)第二个数值

-ge:第一个数值大于或者等于(greater or equal)第二个数值

例如:[ 10 –le 11 ] && echo “wangtongpeng” -----à输出结果为wangtongpeng,表示成立

字符串比较

可以用于检查用户输入,例如,在提供交互式操作时,判断用户输入的选项是否与指定的变量内容相匹配

=:表示匹配

!=:表示不匹配

-z:用于检查字符串是否为空    [ -z `cat zero.file` ] && echo “yes”

!:用于取反,表示相反意思

逻辑测试

逻辑测试是指同时使用的两个或者多个条件表达式之间的关系。用户可以同时测试多个条件,根据这些提哦啊件是否同时成立或者只要有其中一个成立等情况,来决定采取何种操作。

&&:逻辑与,表示前后两个表达式都成立时整个测试结果才为真,否则结果为假。在使用test命令形式进行厕所是,此选项可以改为“-a”。

||:逻辑或,表示前后两个或多个条件至少有一个成立时整个测试结果即为真,否则结果为假。在使用test命令形式测试时,此选项可以改为“-o”。

!:逻辑否,表示当指定的条件表达式不成立时,整个测试命令的结果为真。

例如:[ -f /etc/passwd ] || [ -d /var/log ] && echo “yes”-----à结果输出为yes

If语句的结构

1、 单分支if语句

格式:if 条件测试命令

         Then

          命令序列

       Fi

2、 双分支if语句

格式:if 条件测试命令

        Then

        命令序列1

       Else

       命令序列2

      Fi

3、 多分支if语句

格式:if 条件测试命令1

      Then

      命令序列1

      Elif 条件测试命令2

      Then

      命令序列2

      Else

      命令序列3

         Fi

使用for循环语句

For循环语句,可以为变量设置一个取值列表,每次读取列表中不同的变量值并执行相关命令操作,变量值用完以后则退出循环,其不需要执行条件判断,其使用变量的取值来自于预先设置的值列表

格式:

      For 变量名 in 取值列表

        Do

        命令序列

       Done

例如:

        #!/bin/bash

         For TM in “morning”“noon”“evening”

          Do

          Echo “the $TM of the day. ”

              Done

当执行这个脚本时,结果为:

         The moring of the day.

         The noon of the day.

         The evening of the day.

使用while循环语句

While语句,可以根据特定的条件重复执行一个命令列表,直到该条件不再成立为止。除非有特殊需要,够则在脚本程序中应该避免出现无限循环执行命令的情况,因为如果无法跳出循环,后边的命令操作将无法执行。所以通常在执行的命令序列中包含修改测试条件的语句,当循环达到一定次数后,测试条件将不再成立,从而可以跳出循环。

格式:

     While 条件测试命令

     Do

   命令序列

Done

Case语句

Case语句适用于需要进行多重分支的应用情况。

格式:

     Case 变量值 in

     模式1

      命令序列1

      ;;

      模式2

      命令序列2

      ;;

   ……………….

      *

默认执行的命令序列

   Esac

注意:

a. case行的末尾必须为单词“in”,没一个模式必须以右括号“)”结束

b. 双分号“;;”表示命令序列的结束。

c. 匹配模式中可以使用方括号表示一个连续的范围,例如“[1-9]”,使用竖杠符号“|”表示或者

d. 最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行该命令序列。

Shift语句

bash中一个特殊的内部命令,但是在命令行较少使用,而更多的是用在shell脚本程序中,执行shift命令后,位置变量($1-$9)中的命令行参数会依次向左传递

例如:

      如果当前脚本程序获得的位置变量为:$1=file1,$2=file2,$3=file3,$4=file4,$5=file5

      则当执行一次shift命令操作时,各个位置变量为:$1=file2,$2=file3,$3=file4,$4=file5

      当再次执行,各个位置变量为:$1=file3,$2=file4,$3=file5

如编辑一个相加脚本:

#!/bin/bash

 Result=0

While [ $# -gt 0 ]

do

   result=`expr $result +$1`

   shift

 done

echo “the sum is: $result”

测试:./脚本 1 2 3 -------à输出结果为:6

循环控制语句:break命令、continue命令

 Break :中断,用于跳出当前所在的循环体,但是并不退出程序。

 Continue:继续,用于暂停本次循环,跳转到循环语句的顶部重新测试条件。

例如:编辑一个脚本,删除stu1~stu20各用户,但是保留stu8stu18

     #!/bin/bash

     I=1

     While [ $i –le 20 ]

     Do

If [ $i –eq 8 ] || [ $i –eq 18 ] ; then

 Let i++

Continue

Fi

Userdel –r stu$i

Let i++

done