bash grep 判断_bash 退出状态与条件判断

摘自《高级bash脚本编程指南》

退出状态和退出状态码

exit 被用来结束一个脚本, 就像在C语言中一样. 它也返回一个值, 并且这个值会传递给脚本的父进程, 父进程会使用这个值做下一步的处理.

每个命令都会返回一个 退出状态码 (有时候也被称为 返回状态 ). 成功的命令返回0, 而不成功的命令返回非零值, 非零值通常都被解释成一个错误码. 行为良好的UNIX命令, 程序, 和工具都会返回0作为退出码来表示成功, 虽然偶尔也会有例外.

同样的, 脚本中的函数和脚本本身也会返回退出状态码. 在脚本或者是脚本函数中执行的最后的命令会决定退出状态码. 在脚本中, exit nnn命令将会把 nnn退出码传递给shell( nnn必须是十进制数, 范围必须是0 – 255).

当脚本以不带参数的exit命令来结束时, 脚本的退出状态码就由脚本中最后执行的命令来决定(就是exit之前的命令).1 #!/bin/bash

2

3 COMMAND_1

4

5 . . .

6

7 # 将以最后的命令来决定退出状态码.

8 COMMAND_LAST

9

10 exit

不带参数的exit命令与 exit $? 的效果是一样的, 甚至脚本的结尾不写exit, 也与前两者的效果相同.

$? 保

存了最后所执行的命令的退出状态码. 当函数返回之后, $?保存函数中最后所执行的命令的退出状态码. 这就是bash对函数”返回值”的处理方法.

当一个脚本退出, $?保存了脚本的退出状态码, 这个退出状态码也就是脚本中最后一个执行命令的退出状态码. 一般情况下, 0表示成功, 在范围1

– 255的整数表示错误.

$? 用于测试脚本中的命令结果的时候, 往往显得特别有用。

! 逻辑 “非”操作符, 将会反转命令或条件测试的结果, 并且这会影响退出状态码.

例:反转一个条件的用法!1 true # "true" 是内建命令.

2 echo "exit status of \"true\" = $?" # 0

3

4 ! true

5 echo "exit status of \"! true\" = $?" # 1

6 # 注意: "!" 需要一个空格.

7 # !true 将导致"command not found"错误

8 #

9 # 如果一个命令以'!'开头, 那么会启用Bash的历史机制.

10

11 true

12 !true

13 # 这次就没有错误了, 也没有反转结果.

14 # 它只是重复了之前的命令(true).

15

16 # 感谢, Stephane Chazelas和Kristopher Newsome.

条件判断

条件测试结构if/then 结构用来判断命令列表的退出状态码是否为0(因为在UNIX惯例, 0表示”成功”), 如果成功的话, 那么就执行接下来的一个或多个命令.

有一个专有命令[ (左中括号, 特殊字符). 这个命令与test命令等价, 并且出于效率上的考虑, 这是一个内建命令. 这个命令把它的参数作为比较表达式或者作为文件测试, 并且根据比较的结果来返回一个退出状态码(0 表示真, 1表示假).

在版本2.02的Bash中, 引入了[[ ... ]]扩展测试命令, 因为这种表现形式可能对某些语言的程序员来说更容易熟悉一些. 注意[[是一个关键字, 并不是一个命令.Bash把[[ $a -lt $b ]]看作一个单独的元素, 并且返回一个退出状态码.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值