zoukankan      html  css  js  c++  java
  • Linux Shell 中各种括号的作用 ()、(())、[]、[[]]、{}

    请参考简书:https://www.jianshu.com/p/1a96d0d9da37

    大括号、花括号 {}

    代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。
    如下
    JENKINS_WAR="/usr/lib/jenkins/jenkins.war"
    test -r "$JENKINS_WAR" || { echo "$JENKINS_WAR not installed";
            if [ "$1" = "stop" ]; then exit 0;
            else exit 5; fi; }

    [和[[的区别

    区别一

    在使用"[[ ]]"时,不能使用"-a"或者"-o"对多个条件进行连接。

    在使用"[ ]"时,如果使用"-a"或者"-o"对多个条件进行连接,"-a"或者"-o"必须被包含在"[ ]"之内。

    在使用"[ ]"时,如果使用"&&"或者"||"对多个条件进行连接,"&&"或者"||"必须在"[ ]"之外。

    区别二

    [是shell命令,在它包围的表达式是它的命令行参数,所以串比较符>和<需要转义,否则就变成io重定向了。

    [[是shell关键字,不会做命令行扩展,所以<和>不需要进行转义。但是语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ "-z" "ab" ]。

    区别三

    [[可以做算术扩展,[则不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]则会报错。

    区别四

    对比字符串时,[ 末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。如if [[ $1 == a*a ]] 或者if [ $1x == a*ax ]

    区别五

    当使用"-n"或者"-z"这种方式判断变量是否为空时,"[ ]"与"[[ ]]"是有区别的,使用"[ ]"时需要在变量的外侧加上双引号,与test命令的用法完全相同,使用"[[ ]]"时则不用。

    区别六

    在使用符号"=~"去匹配正则表达式时,只能使用"[[  ]]",当使用">"或者"<"判断字符串的ASCII值大小时,如果结合"[ ]"使用,则必须对">"或者"<"进行转义。


    字符串和数字比较的区别

    在shell中对比字符串和对比数字,要分开两种方式。

    1)对比字符串只能使用==、<、>、!=、-z、-n。对比字符串时,末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。使用<或者>时,如果是用[ ],需要用转义符"",如>。

    2)对比数字使用既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=。其中-eq的意思是equal,-ne是unequal,-gt是greater than,-ge是greater than or equal to,-lt是less than,-le是less than or equal to。

  • 相关阅读:
    PCLVisualizer可视化类
    【Leetcode】课程表(拓扑排序)
    不是充许的静态以太网地址,它与vmware保留的mac地址冲突
    vmware虚拟机linux添加硬盘后先分区再格式化操作方法
    卸载mysql时,提示libmysqlclient.so.16()(64bit) is needed by (installed) postfix
    创建mysql数据库,在新数据库中创建表,再尝试删除表
    忘记linux下的mysql密码,需要重新创建密码123456
    创建mysql表
    程序员的冷笑话 python版本
    python的__mro__与__slot__
  • 原文地址:https://www.cnblogs.com/faberbeta/p/linuxshell040.html
Copyright © 2011-2022 走看看