shell编程——if语句.pdf
2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ 中 小shell编程if语句if-z-n-f-eq-ne-lt(2011111109:47:01)标签:杂谈分类:shell和lperlif条件thenCommandelseCommandfi别忘了这个结尾If语句忘了结尾fitest.sh:line14:syntaxerror:unexpectedendoffi if 的三种条件表达式ifcommandthenif函数then命令执行成功,等于返回0(比如grep,找到匹配)执行失败,返回非0(grep,没找到匹配)ifexpression_r_r_rthen表达式结果为真,则返回0,if把0值引向theniftestexpression_r_r_rthen表达式结果为假,则返回非0,if把非0值引向then&快捷iff/etc/shadow&echoThiscomputerusesshadowpasswors&可以理解为then如果左边的表达式为真则执行右边的语句 shell的if与c语言if的功能上的区别shellifc语言if0为真,走then正好相反,非0走then不支持整数变量直接if必须:ifine0但支持字符串变量直接ififstr如果字符串非0支持变量直接ifif(i)=以command作为if 条件=以多条command或者函数作为if 条件echon“input:”readuserif多条指令,这些命令之间相当于“and”(与)加好友发纸条写留言加关注诗诗轩月博客等级:博客积分:1273博客访问:37,285关注人气:20获赠金笔:0赠出金笔:0荣誉徽章:Qing微博爱ORACLE的博客http:/ 订阅 手机订阅首页博文目录图片关于我2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ 以函数作为if条件 (函数就相当于command,函数的优点是其return值可以自定义)if以函数作为if条件,getynthen函数reture值0为真,走thenechoyouranswerisyeselse函数return值非0为假,走elseechoyouranserisnofi if command 等价于 command+if$?$vitestsh.sh#!/bin/shifcat111tmp.txt|grepting1thenechofoundelseechonofoundfi$vitestsh.sh#!/bin/shcat111tmp.txt|grepting1if$?eq0thenecho$?echofoundelseecho$?echonofoundfi$shtestsh.shnofound$shtestsh.sh1nofound$vi111tmp.txtthatis222filethisting1is111file$shtestsh.shthisting1is111filefound$vi111tmp.txtthatis222filethisting1is111file$shtestsh.shthisting1is111file0found =以条件表达式作为 if条件=传统if 从句子以条件表达式作为 if条件if 条件表达式 then command command commandelse command commandfi 条件表达式文件表达式if -f file 如果文件存在2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ -d.如果目录存在if -s file 如果文件存在且非空 if -r file 如果文件存在且可读if -w file 如果文件存在且可写if -x file 如果文件存在且可执行 整数变量表达式if int1-eq int2 如果int1等于int2 if int1-ne int2 如果不等于 if int1-ge int2 如果=if int1-gt int2 如果if int1-le int2 如果=if int1-lt int2 如果 和,会被当作尖括号,只有-ge,-gt,-le,ltmacgmachome$vitest.shechoinputa:readaif$age100thenecho3bitelseecho2bitfimacgmachome$shtest.sh2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ 整数操作符号-ge,-gt,-le,-lt,别忘了加-iftest$age100thenmacgmachome$shtest.shtest.sh:line4:test:ge:binaryoperatorexpectediftest$age100thenmacgmachome$shtest.shinputa:1233bit=逻辑表达式=逻辑非!条件表达式的相反if !表达式 if !-d$num 如果不存在目录$num 逻辑与 a 条件表达式的并列if 表达式1 a 表达式2 逻辑或-o 条件表达式的或if 表达式1 o 表达式2 逻辑表达式 表达式与前面的=!=-d f x-ne-eq-lt等合用 逻辑符号就正常的接其他表达式,没有任何括号(),就是并列if -z$JHHOME-a-d$HOME/$num 注意逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混了 最常见的赋值形式,赋值前对=两边的变量都进行评测左边测变量是否为空,右边测目录(值)是否存在(值是否有效)macgmachome$vitest.sh:echoinputthenum:readnumechoinputis$numifz$JHHOMEad$HOME/$num如果变量$JHHOME为空,且$HOME/$num目录存在thenJHHOME=$HOME/$num则赋值fiechoJHHOMEis$JHHOMEmacgmachome$shtest.shinputthenum:pppinputispppJHHOMEis目录d$HOME/$num不存在,所以$JHHOME没被then赋值macgmachome$mkdirppp2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ 一个-o的例子,其中却揭示了”=”必须两边留空格的问题echoinputyourchoice:readANSif$ANS=Yeso$ANS=yeso$ANS=yo$ANS=YthenANS=yelseANS=nfiecho$ANSmacgmachome$shtest.shinputyourchoice:nymacgmachome$shtest.shinputyourchoice:noy为什么输入不是yes,结果仍是y(走then)因为=被连读了,成了变量$ANS=Yes,而变量又为空,所以走else了macgmachome$vitest.shechoinputyourchoice:readANSechoinputyourchoice:readANSif$ANS=Yeso$ANS=yeso$ANS=yo$ANS=YthenANS=yelseANS=nfiecho$ANSmacgmachome$shtest.shinputyourchoice:nonmacgmachome$shtest.shinputyourchoice:yesymacgmachome$shtest.shinputyourchoice:yy=以 test 条件表达式 作为if条件=if test$num-eq 0 等价于 if$num eq 0 test 表达式,没有 if test$num-eq 0 thenecho try againelseecho goodfi man test2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ 用简化 if 和$1,$2,$3来检测参数,不合理就调用help-z$1&help 如果第一个参数不存在(-z 字符串长度为0)$1=-h&help 如果第一个参数是-h,就显示help例子#!/bin/sh-f/etc/sysconfig/network-scripts/ifcfg-eth0&rm-f/etc/sysconfig/network-scripts/ifcfg-eth0cp ifcfg-eth0.bridge/etc/sysconfig/network-scripts/ifcfg-eth0-f/etc/sysconfig/network-scripts/ifcfg-eth1&rm-f/etc/sysconfig/network-scripts/ifcfg-eth1cp ifcfg-eth1.bridge/etc/sysconfig/network-scripts/ifcfg-eth1-f/etc/sysconfig/network-scripts/ifcfg-eth0:1&rm-f/etc/sysconfig/network-scripts/ifcfg-eth0:1前一篇:bash shell中if-f$2和echo-e是什么意思后一篇:如何选个好男人做老公good2012-9-13 14:23分享:0喜欢0赠金笔推荐:中国5女追1男的艳遇之都决定女人能否幸福的关键品质登录注册2014/12/5shell编程if语句ifznfeqnelt_诗诗轩月_新浪博客http:/ 收听验证码如何选个好男人做老公11月5日 11:17发评论以上网友发言只代表其个人观点,不代表新浪网的观点或立场。新浪BLOG意见反馈留言板不良信息反馈电话:4006900000提示音后按1键(按当地市话标准计费)欢迎批评指正新浪简介|AboutSina|广告服务|联系我们|招聘信息|网站律师|SINAEnglish|会员注册|产品答疑Copyright19962014SINACorporation,AllRightsReserved新浪公司版权所有