• Bash中的括号(一)


    初学Bash脚本编程,里面的各种括号,绝对是一个大坑,为了救人救己,以防再度入坑,特记录如下:

    一、单小括号:

          1、创建子Shell。单个小括号用来创建一个子shell,子shell允许你在不影响当前shell的环境下去执行操作。例如:

    pwd
    /root
    (cd /tmp;pwd)
    /tmp

    又如,你在 home 目录,cd 到 /tmp 目录,sleep 5 秒,最后 cd 回 home,但是你会在 sleep 的过程中按 Ctrl + c 中断。命令如下:

    ~$ cd /tmp/; sleep 5; cd ~
    ^C
    /tmp$

    你会留在 /tmp 目录中,因为最后的 cd ~ 根本没执行。所以如果你希望临时切换别的目录执行某些命令,但又希望中断后回到原来的目录,这个方法就不凑效了。

    但是如果你加上小括号:

    ~$ ( cd /tmp/; sleep 5; )
    ^C
    ~$

    这里没有最后的 cd ~,因为多此一举,subshell 有自己的工作目录,相当于你另外开一个终端而已,这样避免一些环境变量被某些代码弄乱。

          2、小括号还有命令替换的功能,result=$(command)与result=`command`有同样的效果。

    var=$(pwd)
    echo $var
    /root

         3、用于初始化数组。如: array=(a b c d) 

    二、单方括号:

         1、[和test是等同的,均是shell的内置命令,使用type测试一下:

    [root@noi ~]# type [
    [ is a shell builtin
    [root@noi ~]# type test
    test is a shell builtin

         2、Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab < bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。

    举个例子(坑了我好一阵子,才弄明白):

    #3比1大,返回0表示真,正确
    [root@noi ~]# [ 3 > 1 ];echo $?
    0
    #3比10小,返回0,错误,原因是[和test默认均是比较的字符串,而字符'3'比字符'1'(字符串“10”的第一个字符)大,所以返回真。
    [root@noi ~]# [ 3 > 10 ];echo $?
    0

    上面的例子中 [ 3 > 10 ] 实际上shell执行的是 [ '3' > '10' ] 这样写就清楚多了,呵呵。

         3、需要注意的是:[]中每个字符之间必须由空格隔开,否则shell就会报错。

         4、如果真想比较数字,可以用:-gt(大于),-lt(小于),-ge(大于等于),-le(小于等于),-eq(等于),-ne(不能于)

    [root@noi ~]# [ 3 -gt 1 ];echo $?
    0
    [root@noi ~]# [ 3 -gt 10 ];echo $?
    1
    [root@noi ~]# [ 5 -lt 2 ];echo $?
    1
    [root@noi ~]# [ 5 -gt 2 ];echo $?
    0

         5、最后一个坑,在[和test测试中,用0表示真(助记0表示没有错误),用1表示假(助记1表示有错误),之所以要这样搞,和c程序反着,

    就是因为,shell负责接收其他程序的返回值,而返回值正确(对应一种情况),返回值错误(各种各样的原因导致很多错误类型,需要用不同数值表示),

    这样的话,用0(表真)和其他值(表假)可以完美解决这个问题。可以这样理解,除了返回0是正确的以外,返回其他值都是有问题的,呵呵。

    以上是常规的用法,但是光这些还不够啊,所以需要用到其他的表达式写法,我先保存下,下篇接着写。

  • 相关阅读:
    基于Form表单和AJAX的登录示例
    HTML表格与表单
    HTML基础
    如何在AWS中部署Java Web应用程序?
    AWS前沿云计算课程——快速学会云上部署及Web应用程序管理
    如何在AWS云上部署应用
    Java知识系统回顾整理01基础02面向对象02属性
    Java知识系统回顾整理01基础02面向对象01类和对象
    Java知识系统回顾整理01基础01第一个程序07Eclipse使用----找不到类如何解决?
    Java知识系统回顾整理01基础01第一个程序06Eclipse使用技巧
  • 原文地址:https://www.cnblogs.com/litifeng/p/6894508.html
Copyright © 2020-2023  润新知