导航:[首页]->[bash]->[Bash学习-入门2]

执行多条命令

    ls .;echo "test" # 依次执行两条命令,用;风格
    ls . && echo "test" # 依次执行两条命令,若前面的命令失败,后面的命令不会执行

管道

    ls . | wc -l

后台运行

    ls & # &表示后台运行
    echo "$!"  # 获得这个后台线程的PID

重定向

  • cmd >&n 把输出送到文件描述符n
  • cmd m>&n 把输出 到文件符m的信息重定向到文件描述符n
  • cmd >&- 关闭标准输出
  • cmd <&n 输入来自文件描述符n
  • cmd m<&n m来自文件描述各个n
  • cmd <&- 关闭标准输入
  • cmd <&n- 移动输入文件描述符n而非复制它。(需要解释)
  • cmd >&n- 移动输出文件描述符 n而非复制它。(需要解释)
  • tee 命令的作用是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去; echo "test" > file #重定向stdout到文件,如果file已经存在,则清空原有文件 echo "test" >> file #重定向stdout到文件,如果file已经存在,则把信息加在原有文件后面。 echo "test" 2> file #重定向stderr到文件,如果file已经存在,则把信息加在原有文件后面。 echo "test" 2>> file #重定向stderr到文件,如果file已经存在,则把信息加在原有文件后面。 echo "test" > file 2>&1 #同时重定向stderr和stdout到文件 echo "test" > f1 2>f2 #把stdout重定向到f1,而把stderr重定向到f2 echo "test" | tee file # 保持stdout的同时,将stdout重定向到file中
命令组()

命令组作为子Shell执行,能够继承父Shell的变量,但是作出的修改将自动失效 declare var=1 ( # 访问外部变量 echo "var:$var" # 1 var=2 echo "after modify var:$var" # 1

        # 创建内部变量
        declare var1=2;
        echo "var1 $var1" # 2
    )

    # 不能访问里面的变量
    echo "var1 ouside: $var1" # echo null

    # 访问外部变量
    # 修改外部变量自动失效
    echo "var in outside:$var" # 1

    #####################################3
    echo;cd /;
    echo "pwd outside: `pwd`" # /
    (
        # 修改pwd
        echo "pwd inside before modify `pwd`" # /
        cd /tmp;
        echo "pwd inside after modify `pwd`" # /tmp
    )
    # 修改pwd自动失效
    echo "pwd outside: `pwd`" # /

代码块{}

代码块是一个匿名函数,但是内部却不能声明local变量 declare var=1 { echo "var1 : $var" var=2 echo "var2 : $var" } echo "var3 : $var"

整数扩展(())

    var=10
    var2=$(($var + 1))
    echo $var2 # 11

    var3=11
    var2=$(($var + $var3 + 1))
    echo $var2 # 22

    var2=$(($var * $var3 + 1))
    echo $var2 # 111

    var2=$(($var * ($var3 + 1)))
    echo $var2 # 120

参考: