和$相关的
foo=bar
foo = bar
(使用括号隔开)是不能正确工作的,因为解释器会调用程序foo
并将=
和bar
作为参数。
$0
- 脚本名$1
到$9
- 脚本到参数。$1
是第一个参数,依此类推。$@
- 所有参数$#
- 参数个数$?
- 前一个命令到返回值$$
- 当前脚本到进程识别码!!
- 完整到上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用sudo !!
再尝试一次。$_
- 上一条命令的最后一个参数。如果你正在使用的是交互式 shell,你可以通过按下Esc
之后键入 . 来获取这个值。diff <(ls foo) <(ls bar)
会显示文件夹foo
和bar
中文件的区别。```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。
[[]]
- 支持正则