总结
- 引号
- ` 反引号:直接执行
"双引号:对变量名进行替换,直接输出'单引号:全部原样输出
- 括号
$():直接执行$(()):可以进行数字计算。(()):数学运算符,也可以跟>/</=作为测试判断,返回1/0
- 中括号
- 可以使用
test替代布尔运算符[[ ]] [[ -z STRING ]]: 判断为空[[ -n STRING ]]: 判断非空[[ NUM -eq NUM ]]: Equal,等于。[[ NUM -ne NUM ]]: Not equal,不等于。[[ NUM -lt NUM ]]: Less than,小于。[[ NUM -le NUM ]]: Less than or equal,小于等于。[[ NUM -gt NUM ]]: Greater than,大于。[[ NUM -ge NUM ]]: Greater than or equal,大于等于。[[ NUM >/</= NUM ]]: 大于 小于 等于[[ -e FILE ]]: Exists 文件是否存在[[ -r FILE ]]: Readable 文件是否可读[[ -w FILE ]]: Writable 文件是否可写[[ -x FILE ]]: Executable 文件是否可指向[[ -h FILE ]]: Symlink 是否软链接[[ -d FILE ]]: Directory 是否目录文件[[ -f FILE ]]: File 是否为文件[[ -s FILE ]]: 文件内容不为空
- 可以使用
提问
- [x] 1. shell 中
${}与$()有什么区别${}可以作为引用变量的边界,${PATH}等同于$PATH。$()作为执行命令的边界 - [x] 2. shell 中
'与"有什么区别': 直接原样输出": 对变量名进行替换,直接输出 - [x] 3. shell 中
[[]]与(())有什么区别What is the difference between the Bash operators [[ vs [ vs ( vs ((?[[]]: 类似布尔运算符,if的替代,内部的条件表达式可以比较字符串、检查文件是否存在等,功能比较多。返回true/false(()): 数学运算符,也可以跟>/</=作为测试判断,返回1/0 - [x] 4. 如何判断某个文件是否存在
[[ -e FILE ]] - [x] 5. 如何直接在 shell 中计算
1+1=echo $(( 1 + 1 ))
1. 前提提要、场景
2. 引号
- 反引号:对命令直接执行
- 双引号:对命令直接输出,对变量名进行替换
- 单引号:全部原样输出
sh
# 直接执行变量
$ echo `pwd`
/root
# 对变量名进行替换输出
$ echo "$USER"
root
# 对变量名不做替换进行输出
$ echo '$USER'
$USER
3. 括号
$()(Command substitution) 和 反引号一样,直接执行
sh
$ echo `pwd`
/root
$ echo $(pwd)
/root
$(()):有数字计算功能。
sh
$ echo $(( 1 + 1 ))
2
(()):数学运算符,也可以跟 >/</= 作为测试判断,返回 1/0
sh
$ (( 4 > 1 )) && echo ok
ok
$ (( 4 < 1 )) && echo ok
# 没有输出
3. 中括号
[[ ]]:布尔运算符,返回 true/false
sh
# 如果用户为 root,则输出 ok
$ [[ $USER == 'root' ]] && echo ok
# 如果用户不是 root,则输出 ok
$ [[ $USER != 'root' ]] && echo ok
3.1 是否为空
[[ -z STRING ]]: 判断为空[[ -n STRING ]]: 判断非空
sh
$ [[ -z 'yes' ]] && echo ok
# 没有输出
$ [[ -n 'yes' ]] && echo ok
ok
3.2 数字判断
[[ NUM -eq NUM ]]: Equal,等于。[[ NUM -ne NUM ]]: Not equal,不等于。[[ NUM -lt NUM ]]: Less than,小于。[[ NUM -le NUM ]]: Less than or equal,小于等于。[[ NUM -gt NUM ]]: Greater than,大于。[[ NUM -ge NUM ]]: Greater than or equal,大于等于。
sh
# 以下三个等同
$ [[ 4 -gt 1 ]] && echo ok
ok
$ [[ 4 > 1 ]] && echo ok
ok
$ (( 4 > 1 )) && echo ok
ok
sh
# 以下两个等同
$ [[ 4 -eq 4 ]] && echo ok
ok
$ (( 4 == 4 )) && echo ok
ok
3.3 布尔判断,配合文件操作
[[ -e FILE ]]: Exists 文件是否存在[[ -r FILE ]]: Readable 文件是否可读[[ -w FILE ]]: Writable 文件是否可写[[ -x FILE ]]: Executable 文件是否可指向[[ -h FILE ]]: Symlink 是否软链接[[ -d FILE ]]: Directory 是否目录文件[[ -f FILE ]]: File 是否为文件[[ -s FILE ]]: 文件内容不为空
sh
# 文件存在,则输出 ok
$ [[ -e /usr/local/bin/npm ]] && echo ok
# 如果不存在文件,则输出 ok
$ [[ ! -e /usr/local/bin/npm ]] && echo ok
# 可以使用 `test` 替代布尔运算符 `[[ ]]`
$ test -n $USER && echo ok
ok