四、我也来抄shell之ABS--退出,Test

第 6 章 退出和退出状态

exit 命令被用来结束脚本,就像 C 语言一样.他也会返回一个值来传给父进程,父进程会判断是否可用.
每个命令都会返回一个 exit 状态(有时候也叫 return 状态).成功返回 0,如果返回一个非 0 值,通常情况下都会被认为是一个错误码.一个编写良好的 UNIX 命令,程序,和工具都会返回一个 0 作为
退出码来表示成功,虽然偶尔也会有例外.同样的,脚本中的函数和脚本本身都会返回退出状态.在脚本或者是脚本函数中执行的最后的命令会决定退出状态.在脚本中,exit nnn 命令将会把 nnn 退出码传递给 shell(nnn 必须是 10 进制数0-255).
"$?" 读取最后执行命令的退出码.函数返回后,$?给出函数最后执行的那条命令的退出码.这种给函数返回值的方法是 Bash 的方法.对于脚本来说也一样.总之,一般情况下,0 为成功,非 0 失败 W.
第 7 章 Tests

每个完整的合理的编程语言都具有条件判断的功能.Bash 具有 test 命令,不同的[]和()操作,和if/then 结构.
7.1 Test 结构
一个 if/then 结构可以测试命令的返回值是否为 0(因为 0 表示成功),如果是的话,执行更多命令.有一个专用命令"["(左中括号,特殊字符).这个命令与 test 命令等价,但是出于效率上的考虑,它是一个内建命令.这个命令把它的参数作为比较表达式或是文件测试,并且根据比较的结果,返回一个退出码.
在版本 2.02 的 Bash 中,推出了一个新的[[...]]扩展 test 命令.因为这种表现形式可能对某些语言的程序员来说更加熟悉.注意"[["是一个关键字,并不是一个命令.Bash 把[[ $a -lt $b ]]看作一个单独的元素,并且返回一个退出码.((...))和 let...结果也能够返回一个退出码,当它们所测试的算术表达式的结果为非 0 的时候,他们的退出码将返回 0.
7.2 文件测试操作
----------------
返回 true 如果...
-e    文件存在
-a    文件存在
    这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用
-f    file 是一个 regular 文件(不是目录或者设备文件)    
-s    文件长度不为 0
-d    文件是个目录
-b    文件是个块设备(软盘,cdrom 等等)
-c    文件是个字符设备(键盘,modem,声卡等等)
-p    文件是个管道
-h    文件是个符号链接
-L    文件是个符号链接
-S    文件是个 socket
-t    关联到一个终端设备的文件描述符
    这个选项一般都用来检测是否在一个给定脚本中的 stdin[-t0]或[-t1]是一个终端
-r    文件具有读权限(对于用户运行这个 test)
-w    文件具有写权限(对于用户运行这个 test)
-x    文件具有执行权限(对于用户运行这个 test)
-g    set-group-id(sgid)标志到文件或目录上
-u    set-user-id(suid)标志到文件上
    如果运行一个具有 root 权限的文件,那么运行进程将取得 root 权限,即使你是一个普通用户
-k    设置粘贴位
-O    你是文件的所有者.
-G    文件的 group-id 和你的相同.
-N    文件最后被阅读到现在,是否被修改.
f1 -nt f2    文件 f1 比 f2 新
f1 -ot f2    f1 比 f2 老
f1 -ef f2    f1 和 f2 都硬连接到同一个文件.
!        非--反转上边测试的结果(如果条件缺席,将返回 true)
7.3 其他比较操作
----------------
二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.
整数比较
-eq    等于,如:if [ "$a" -eq "$b" ]
-ne    不等于,如:if [ "$a" -ne "$b" ]
-gt    大于,如:if [ "$a" -gt "$b" ]
-ge    大于等于,如:if [ "$a" -ge "$b" ]
-lt    小于,如:if [ "$a" -lt "$b" ]
-le    小于等于,如:if [ "$a" -le "$b" ]
<    小于(需要双括号),如:(("$a" < "$b"))
<=    小于等于(需要双括号),如:(("$a" <= "$b"))
>    大于(需要双括号),如:(("$a" > "$b"))
>=    大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
=    等于,如:if [ "$a" = "$b" ]
==    等于,如:if [ "$a" == "$b" ],与=等价
    注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]]    # 如果$a 以"z"开头(模式匹配)那么将为 true
2 [[ $a == "z*" ]]     # 如果$a 等于 z*(字符匹配),那么结果为 true
3
4 [ $a == z* ]        # File globbing 和 word splitting 将会发生
5 [ "$a" == "z*" ]     # 如果$a 等于 z*(字符匹配),那么结果为 true一点解释,关于 File globbing 是一种关于文件的速记法,比如"*.c"就是,再如~也是.
!=    不等于,如:if [ "$a" != "$b" ]
    这个操作符将在[[]]结构中使用模式匹配.
<     小于,在 ASCII 字母顺序下.如:
    if [[ "$a" < "$b" ]]
     if [ "$a" \< "$b" ]
    注意:在[]结构中"<"需要被转义.
>     大于,在 ASCII 字母顺序下.如:
    if [[ "$a" > "$b" ]]
    if [ "$a" \> "$b" ]
-z    字符串为"null".就是长度为 0.
-n    字符串不为"null"
















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值