总结
- 引号
- ` 反引号:直接执行
"
双引号:对变量名进行替换,直接输出'
单引号:全部原样输出
- 括号
$()
:直接执行$(())
:可以进行数字计算。(())
:数学运算符,也可以跟>
/<
/=
作为测试判断,返回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