Shell 编程4(退出,测试,判断)

1 退出状态

定义

 在Linux系统中,每当命令执行完成后,系统都会返回一个退出状态。该退出状态用一整数值表示,用于判断命令运行正确与否。退出状态通常保存在预定义变量$?中。

若退出状态值为0,表示命令运行成功

若退出状态值不为0时,则表示命令运行失败

最后一次执行的命令的退出状态值被保存在内置变量“$?”中,所以可以通过echo语句进行测试命令是否运行成功

 

 设置退出状态命令

 在编写 较为复杂的脚本时,应该考虑错误捕捉机制,即当脚本中的语句执行出现错误时,脚本能够处理错误。

在脚本中设置退出状态需要是同exit命令,其常见的是同形式及对应的含义如下:

exit 0 :  表示 返回脚本执行成功,无错误返回,这种情况又是也成为返回值为 true

exit 1  表示  执行失败 有错误返回, 这种情况有时候也成为 返回值为false

除了 0 1外, 还有其他的一些数字,但是只要返回的状态非0,系统就可以认为脚本执行失败。


使用exit命令设置退出状态时需要注意,无论脚本执行到何处,只要遇到exit命令,脚本会立即设置退出状态并保存脚本。

eg1

#!/bin/bash

function usage()
{
 echo "error : must have a param"
 echo "$0 param. . . . ."
 return 1
}

if [ $# = 0 ]
  then 
   usage
   exit 1
fi

echo $1
exit 0

执行结果

anders@anders-virtual-machine:~/code/shell/exit$ ./eg1.sh 
error : must have a param
./eg1.sh param. . . . .
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
1  脚本有错误退出
anders@anders-virtual-machine:~/code/shell/exit$ ./eg1.sh abc
abc
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
0    无错误退出


这里需要注意 return 和 exit 的区别:

return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。

exit函数是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息。


eg2

#!/bin/bash

function usage()
{
 echo "error : must have a param"
 echo "$0 param. . . . ."
 exit 1
}

if [ $# = 0 ]
  then 
   usage
   exit 1
fi

echo $1
exit 2

运行结果

error : must have a param
./eg2.sh param. . . . .
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
1
anders@anders-virtual-machine:~/code/shell/exit$ ./eg2.sh 1
1
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
2


2 文件测试

文件测试包含两个方面: 

1 基本测试  包括文件、目录是否存在、文件类型  文件长度等

2 文件权限测试  写出 刻度 执行  等

(1)文件基本测试:

  -d 测试目标文件是否存在 并且是一个目录

-f  测试目标文件是否存在 并且是一个普通文件

  -L 测试目标文件是否存在 并且是一个连接文件

-b 测试目标文件是否存在 并且是一个块设备文件

-c 测试目标文件是否存在 并且是一个字符设备文件

-e 测试目标文件是否存在 

等等

格式:[ -commmand param ]

  eg

anders@anders-virtual-machine:~/code/shell/exit$ [ -d /home/anders/ ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
0

经常与if while等结合使用

(2)文件权限测试:

-w  判断指定的文件是否存在,并且拥有可写入权限

-r 判断指定的文件是否存在,并且拥有可写读权限

-x判断指定的文件是否存在,并且拥有可执行权限

-u 判断指定的文件是否具有SUID权限


3 变量测试

测试变量是否已经被定义 需要使用命令 z  

对于 没有被定义的变量,将会返回数字 0

对于已经定义的变量,将会返回数字1

eg

anders@anders-virtual-machine:~/code/shell/exit$ [ -z $NAME ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
0
anders@anders-virtual-machine:~/code/shell/exit$ NAME=ANDERS
anders@anders-virtual-machine:~/code/shell/exit$ [ -z $NAME ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
1


4 字符串和数值测试

字符串操作符测试

= 判断两个字符串是否相等  如果相等 返回为真 数字0

!= 是否不相等

n 测试字符串是否为非空

anders@anders-virtual-machine:~/code/shell/exit$ [ "aa" = "aa" ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
0
anders@anders-virtual-machine:~/code/shell/exit$ [ "aa" = "AA" ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
1


数值测试

数值测试命令如下

eq 两个数相等 则返回为真

ne 不相等

lt 第一个数小于 第二个数

le 小于等于

gt 第一个数大于第二个数

ge  大于等于


5 逻辑操作符

 a   逻辑与   &&

o 逻辑或    ||

! 逻辑非

文件可读可写

anders@anders-virtual-machine:~/code/shell/exit$ [ -r /etc/passwd -a -w /etc/passwd ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值