设为首页 收藏本站
查看: 1013|回复: 0

shell中let和(())、[]、test、[[]]区别

[复制链接]

尚未签到

发表于 2015-10-26 10:55:49 | 显示全部楼层 |阅读模式
一、let与(()) 在shell编程中是可以互换的它们我们可以像C语言那样写程序对于变量运算赋值在循环语句中控制变量变化非常有用;

1、使用(())时,运算符两边需要有空格;
2(())算数表达式的值在if和while判断时不用在前面加“$”;在echo输出值时需要加"$"
[iyunv@zq-crmtest-20423tmp]# echo $((c = a + b +  1))
输出4
3let(())都只能对整数进行运算赋值
4、使用let(())赋值时,也可以使用expr+老板键代替;(如下,二者等价)
letllines=$llines+$fileLines
llines=`expr $llines+ $fileLines`


实例:
[iyunv@zq-crmtest-20423tmp]# a=1
[iyunv@zq-crmtest-20423tmp]# b=2
[iyunv@zq-crmtest-20423tmp]# let c=a+b
[iyunv@zq-crmtest-20423tmp]# echo $c
输出3
[iyunv@zq-crmtest-20423tmp]# let a=1*111
[iyunv@zq-crmtest-20423tmp]# echo $a
输出111
[iyunv@zq-crmtest-20423tmp]# ((c = a + b))
[iyunv@zq-crmtest-20423tmp]# echo $c
输出3

$ x=12
$ let &quot;x<10&quot;   
$ echo $?
1

$ (( x > 10 ))
$ echo $?
0

$if ((x > 10 ))
>then echo x greater
>else echo x not greater
>fi


二、shell能够识别的表达式如下所示:
操作符     描述
-        减去
!        逻辑相反
* / %      乘,除,余数
&#43; -       加,减
<=  >= < > 关系比较
== !=      等于不等于
=        赋&#20540;
括号能够被用作改变表达式中计算的顺序当使用逻辑和关系操作符,(!,<=,>=,<,>,&#43;&#43;,~=),的时候,shell会返回一个代码变量,$?会反映结果是真还是假再一次说明,必须使用双引号来防止shell将大于和小于运算符当作I/O重定向。





一、先说[]和test,两者是一样的,在命令行里test expr1和[expr1 ]的效果相同。他们的三个基本作用是判断文件、判断字符串、判断整数。支持使用与或非将表达式连接起来。要注意的有:

1.test[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。
2.论是字符串比较还是整数比较都千万不要使用大于号小于号。当然,如果你实在想用也是可以的,对于字符串比较可以使用尖括号的转义形式,如果比较&quot;ab&quot;和&quot;bc&quot;:[ ab \< bc ],结果为真,也就是返回状态为0
3. test[]的逻辑运算与或非只能使用-a-o!
实例:
if  [ $a==&quot;abc&quot;  ]  ;then

fi

if test $var1 =&quot;1&quot;-a $var2 = &quot;2&quot; ; then
  echo &quot;equal&quot;
fi

if[  $var1= &quot;1&quot;-a $var2 = &quot;2&quot;  ] ; then
  echo &quot;equal&quot;
fi


二、[[ ]]是内置在shell中的一个命令,它就比刚才说的test强大的多了。简直强大的令人发指!
1.支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达 式)。逻辑组合可以不使用test的-a,-o而使用&&,||这样更亲切的形式(针对c、Java程序员)。
2.字符串比较时可以把右边的作为一个模式这是右边的字符串不加双引号的情况下。如果右边的字符串加了双引号,则认为是一个文本字符串。),而不仅仅是一个字符串,比如[[hello == hell? ]],结果为真。
DSC0000.jpg

使用[]和[[]]的时候不要吝啬空&#26684;,每一项两边都要有空&#26684;
实例:
[[ $a == z* ]]    # 如果$a以&quot;z&quot;开头(模式匹配)那么将为true
[[$a == &quot;z*&quot; ]]  #如果$a等于z*(字符匹配),那么结果为true
[ $a == &quot;z*&quot; ]   [ $a == z* ]  #效果一样,如果$a等于z*(字符匹配),那么结果为true

!=  不等于,如:if [ &quot;$a&quot; != &quot;$b&quot; ]
     这个操作符将在[[]]结构中使用模式匹配.
<      小于,ASCII字母顺序下.:
     if [[ &quot;$a&quot; < &quot;$b&quot; ]]
     if [ &quot;$a&quot; \< &quot;$b&quot; ]
:[]结构中&quot;<&quot;需要被转义.


-z     字符串为&quot;null&quot;.就是长度为0.
-n     字符串不为&quot;null&quot;
:使用-n[]结构中测试必须要用&quot;&quot;把变量引起来.使用一个未被&quot;&quot;的字符串来使用!-z

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-130892-1-1.html 上篇帖子: adb shell等 下篇帖子: Debug your shell scripts with bashdb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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