7.2 Shell脚本使用结构化命令

1.if-then语句

最基本的结构化命令就是if-then语句:

格式:

if  cmd

then

     cmds

fi

含义:

if 语句会运行 if 后面的那个命令,如果该命令的退出状态码为0,则 then 后面的命令就会被执行;

如果 if 后面的命令退出状态码为非0的值,则 then 后面的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。

‘ fi ’表示if-then语句到此结束。

在 then 部分可以使用不止一条命令,可放置多条命令。

2.if-then-else 语句

格式:

if  cmd

then

     cmds

else

     cmds

fi

含义:

if 语句会运行 if 后面的那个命令,如果该命令的退出状态码为0,则 then 后面的命令就会被执行;

当if语句中的命令返回非零的值时,bash shell 会执行else部分的命令。

3.嵌套if

好的嵌套采用elif的方式:

格式:

if  cmd1

then

     cmds

elif cmd2

then

     cmds

else

     cmds

fi

如果elif后的命令的退出状态码是0,则bash shell会执行第二个then语句后的语句。

4.test命令

test命令提供了再if-then语句中测试不同条件的途径。

如果test命令中列出的条件成了,test命令就会退出并返回退出状态码 0。

如果条件不成立,test命令就会退出并返回非0的退出状态码,这使得if-then语句不会再被执行。

格式:

if test condition

then

    cmds

fi

Bash shell 还提供了另外一种测试方法:

格式:

if  [ condition ]

then

    cmds

fi

方括号定义了测试条件,注意,第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。

test命令可以判断三类条件:

  • 数值比较;
  • 字符串比较;
  • 文件比较;

4.1 数值比较

比较数值时,test只能测试整数,不能对浮点数进行测试。

4.2 字符串比较

=;!=;<;>;

-n str1:检查str1的长度是否非0;

-z str1:检查str1的长度是否为0;

注:

大于号和小于号必须要转义,否则shell会把它们当做重定向符号,把字符串值当作文件名;

大于和小于顺序和sort命令所采用的不同。

4.3 文件比较

文件比价是shell编程中最为强大,也是用得最多的比较形式。

test命令的文件比较功能:

比较

描述

1

-d file

检查file是否存在,并且是一个目录

2

-e file

检查file是否存在

3

-f file

检查file是否存在,并且是一个文件

4

-r file

检查file是否存在,并且可读

5

-s file

检查file是否存在,并且非空

6

-w file

检查file是否存在,并且可写

7

-x file

检查file是否存在,并且可执行

8

-O file

检查file是否存在,并且属于当前用户所有

9

-G file

检查file是否存在,并且默认组与当前用户相同

10

File1 -nt file2

检查file1是否比file2新

11

File1 -ot file2

检查file1是否比file2旧

5.if-then的高级特性

  • 用于数学表达式的双括号;
  • 用于高级字符串处理功能的双方括号;

5.1 使用双括号

双括号命令允许在比较过程中使用高级数学表达式。

格式:(( expression ))

可以在if语句中使用双括号命令,也可以在脚本中的普通命令里使用来赋值。

5.2 使用双方括号

双方括号命令提供了针对字符串比较的高级特性。

格式:[[ expression ]]

6.case 命令

case命令会采用列表格式来检查单个变量的多个值。

格式:

case variable in

pattern1 | pattern2) commands1;;

pattern3)  commands2;;

*) default  commands3;;

esac

case命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行该模式指定的命令。

可以通过竖线操作符在一行中分隔出多个模式模式。

星号会捕获所有与已知模式不匹配的值。

case命令提过了一个更清晰的方法来为变量每个可能的值指定不同的选项。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值