设为首页 收藏本站
查看: 1683|回复: 6

shell的条件测试!

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2012-11-28 09:05:32 | 显示全部楼层 |阅读模式
shell脚本结构语法很重要,但是前提的测试条件更重要!十个系统启动脚本有十个都是设计大量测试条件的语句!

写脚本时,有时要判断字符串是否相等,可能还要检查文件状态或是数字测试。基于这
些测试才能做进一步动作。Te s t命令用于测试字符串,文件状态和数字,也很适合于下一章将
提到的i f、t h e n、e l s e条件结构。
本章内容有:
• 对文件、字符串和数字使用t e s t命令。
• 对数字和字符串使用e x p r命令。
e x p r命令测试和执行数值输出。使用最后退出状态命令$ ?可测知t e s t和e x p r,二者均以0表
示正确,1表示返回错误。
17.1 测试文件状态
t e s t一般有两种格式,即:
test condition

[ c o n d i t i o n ]
使用方括号时,要注意在条件两边加上空格。
测试文件状态的条件表达式很多,但是最常用的可在表1 7 - 1中查到。
表17-1 文件状态测试
- d 目录- s 文件长度大于0、非空
- f 正规文件- w 可写
- L 符号连接- u 文件有s u i d位设置
- r 可读- x 可执行
使用两种方法测试文件s c o r e s . t x t是否可写并用最后退出状态测试是否成功。记住, 0表示
成功,其他为失败。
两种状态均返回0,可知文件s c o r e s . t x t可写,现在测试其是否可执行:
查看文件s c o r e s . t x t权限列表,可知结果正如所料。
下面的例子测试是否存在a p p s b i n目录
目录a p p s b i n果然存在。
测试文件权限是否设置了s u i d位
从结果知道s u i d位已设置。
17.2 测试时使用逻辑操作符
测试文件状态是否为O K,但是有时要比较两个文件状态。s h e l l提供三种逻辑操作完成此
功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
下面比较两个文件:
下面的例子测试两个文件是否均可读。
结果为真。
要测试其中一个是否可执行,使用逻辑或操作。
s c o r e s . t x t不可执行,但r e s u l t s . t x t可执行。
要测试文件r e s u l t s . t x t是否可写、可执行:
结果为真。
17.3 字符串测试
字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。
字符串测试有5种格式。
第17章条件测试155
下载
这里,s t r i n g o p e r a t o r可为:
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
要测试环境变量E D I TO R是否为空:
非空,取值是否是v i?
是的,用e c h o命令反馈其值:
测试变量t a p e与变量t a p e 2是否相等:
不相等。没有规定在设置变量时一定要用双引号,但在进行字符串比较时必须这样做。
测试变量t a p e与t a p e 2是否不相等。
是的,它们不相等。
17.4 测试数值
测试数值可以使用许多操作符,一般格式如下:
" n u m b e r " n u m e r i c o p e r a t o r " n u m b e r "
或者
[ " n u m b e r " n u m e r i c o p e r a t o r " n u m b e r " ]
n u m e r i c o p e r a t o r可为:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
下面的例子返回结果都一样。均为测试两个数是否相等( 1 3 0是否等于1 3 0)。
156 第四部分基础s h e l l编程
下载
结果果然正确。
改变第二个数,结果返回失败,状态1(1 3 0不等于2 0 0)
测试1 3 0是否大于1 0 0:
当然。
也可以测试两个整数变量。下面测试变量s o u r c e c o u n t是否小于d e s t c o u n t :
可以不必将整数值放入变量,直接用数字比较即可,但要加引号。
可以用逻辑操作符将两个测试表达式结合起来。仅需要用到一对方括号,而不能用两个,
否则将返回错误信息“ too many arg u m e n t s”。
下面例子测试两个表达式,如果都为真,结果为真,正确使用方式应为:
17.5 expr用法
e x p r命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
e x p r也是一个手工命令行计数器。
使用乘号时,必须用反斜线屏蔽其特定含义。因为s h e l l可能会误解显示星号的意义。
第17章条件测试157
下载
17.5.1 增量计数
e x p r在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意
即替代命令。最基本的一种是从( e x p r)命令接受输出并将之放入循环变量。
17.5.2 数值测试
可以用e x p r测试一个数。如果试图计算非整数,将返回错误。
这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入d e v / n u l l,
然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。
这是一个数。
这是一个非数值字符。
e x p r也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成
功返回1,任何其他值为无效或错误。下面的例子测试两个字符串是否相等,这里字符串为
“h e l l o”和“h e l l o”。
e x p r返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表示测试成功,
“h e l l o”确实等于“h e l l o”。
17.5.3 模式匹配
e x p r也有模式匹配功能。可以使用e x p r通过指定冒号选项计算字符串中字符数。. *意即任
何字符重复0次或多次。
在e x p r中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。
158 第四部分基础s h e l l编程
下载
17.6 小结
本章涉及e x p r和t e s t基本功能,讲到了怎样进行文件状态测试和字符串赋值,使用其他的
条件表达式如if then else和c a s e可以进行更广范围的测试及对测试结果采取一些动作。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-2626-1-1.html 上篇帖子: Linux Shell常见条件判断 下篇帖子: Linux脚本(shell)编程(二) 基本语法 测试

尚未签到

发表于 2013-3-18 07:12:00 | 显示全部楼层
沙发!沙发!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-16 22:10:26 | 显示全部楼层
吃饭与ml是第一生产力。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-20 05:48:09 | 显示全部楼层
走,MM,咱们化蝶去……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-23 13:00:09 | 显示全部楼层
走,MM,咱们化蝶去……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-30 07:51:56 | 显示全部楼层
鸳鸳相抱何时了,鸯在一边看热闹。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-4 21:45:18 | 显示全部楼层
吃饭与ml是第一生产力。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表