0%

bash脚本

和$相关的

  • foo=bar

    • foo = bar (使用括号隔开)是不能正确工作的,因为解释器会调用程序foo 并将 =bar作为参数。
  • $0 - 脚本名

  • $1$9 - 脚本到参数。 $1 是第一个参数,依此类推。

  • $@ - 所有参数

  • $# - 参数个数

  • $? - 前一个命令到返回值

  • $$ - 当前脚本到进程识别码

  • !! - 完整到上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用 sudo !!再尝试一次。

  • $_ - 上一条命令的最后一个参数。如果你正在使用的是交互式 shell,你可以通过按下 Esc 之后键入 . 来获取这个值。

  • diff <(ls foo) <(ls bar) 会显示文件夹 foobar 中文件的区别。

  • ```bash convert image.{png,jpg} # 会展开为 convert image.png image.jpg mv {.py,.sh} folder # 会移动所有 .py 和 *.sh 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    ## if

    ```BASH
    if condition
    then
    command1
    command2
    ...
    commandN
    elif
    command1
    command2
    ...
    commandN
    else
    command1
    command2
    ...
    commandN
    fi

单括号[]和双括号[[]]

[]

  • [ n1 -eq n2 ] 检查 n1 是否与 n2 相等

  • [ n1 -ge n2 ] 检查 n1 是否大于或等于 n2

  • [ n1 -gt n2 ] 检查 n1 是否大于 n2

  • [ n1 -le n2 ] 检查 n1 是否小于或等于 n2

  • [ n1 -lt n2 ] 检查 n1 是否小于 n2

  • [ n1 -ne n2 ] 检查 n1 是否不等于 n2

  • -a FILE 如果文件存在,则为 true。

  • -b FILE 如果文件是块特殊的,则为 true。

  • -c FILE 如果文件是特殊字符,则为 true。

  • -d FILE 如果文件是目录,则为 true。

  • -e FILE 如果文件存在,则为 true。

  • -f FILE 如果文件存在并且是常规文件,则为 true。

  • -g FILE 如果文件是 set-group-id,则为 true。

  • -h FILE 如果文件是符号链接,则为 true。

  • -L FILE 如果文件是符号链接,则为 true。

  • -k FILE 如果文件的粘滞位(sticky)设置了,则为 true。

  • -p FILE 如果文件是命名管道,则为 true。

  • -r FILE 如果您可以读取文件,则为 true。

  • -s FILE 如果文件存在且不为空,则为 true。

  • -S FILE 如果文件是套接字,则为 true。

  • -t FD 如果在终端上打开 FD,则为 True。

  • -u FILE 如果文件是 set-user-id,则为 true。

  • -w FILE 如果文件可写,则为 true。

  • -x FILE 如果您可以执行文件,则为 true。

  • -O FILE 如果文件有效地归您所有,则为 true。

  • -G FILE 如果文件有效地归您的组所有,则为 true。

  • -N FILE 如果文件自上次读取以来已被修改,则为 true。

  • -z STRING 如果字符串为空,则为 true。

  • -n STRING 如果字符串不为空,则为 true。

  • STRING 如果字符串不为空,则为 true。

  • STRING1 = STRING2 如果字符串相等,则为 true。

  • STRING1 != STRING2 如果字符串不相等,则为 true。

  • STRING1 < STRING2 如果 STRING1 的字典排序在 STRING2 之前,则为 true。

  • STRING1 > STRING2 如果 STRING1 在字典排序在 STRING2 之后,则为 true。

  • -o OPTION 如果启用了 shell 选项 OPTION,则为 true。

  • -v VAR 如果设置了 shell 变量 VAR,则为 true。

  • -R VAR 如果设置了 shell 变量 VAR 并且是变量引用,则为 true。

  • !EXPR 如果 expr 为假,则为 true。

  • EXPR1 -a EXPR2 如果 expr1 和 expr2 都为 true,则为 true。

  • EXPR1 -o EXPR2 如果 expr1 或 expr2 为 true,则为 true。

  • arg1 OP arg2 算术表达式测试; OP 是 -eq,-ne,-lt,-le,-gt,-ge 中的一个;算术表达式为真时返回 true。

[[]]

  • 支持正则