Shell-3¶
引号¶
-
单引号
''
:字符全部视为普通字符,不会转义 -
双引号
""
:字符部分视为普通字符,变量 会被转义 -
反引号 :字符 视为命令,执行后替换将结果替换原字符
-
$(命令)
:执行命令后将结果输出
Example
条件表达式¶
表达式 | 实例 |
---|---|
[ expression ] |
[ 1 -eq 1 ] |
[[ expression ]] |
[[ 1 -eq 1 ]] |
test expression |
test 1 -eq 1 ,等同于[ 1 -eq 1 ] |
整数比较符¶
比较符 | 描述 | 示例 |
---|---|---|
-eq ,equal |
等于 | [ 1 -eq 1 ] 为 true |
-ne ,not equal |
不等于 | [ 1 -ne 1 ] 为 false |
-gt ,greater than |
大于 | [ 2 -gt 1 ] 为 true |
-lt ,lesser than |
小于 | [ 2 -lt 1 ] 为 false |
-ge ,greater or equal |
大于或等于 | [ 2 -ge 1 ] 为 true |
-le ,lesser or equal |
小于或等于 | [ 2 -le 1 ] 为 false |
字符串比较符¶
运算符 | 描述 | 示例 |
---|---|---|
== | 等于 | [ "a" == "a" ] 为 true |
!= | 不等于 | [ "a" != "a" ] 为 false |
> | 大于,判断字符串时根据ASCII 码表顺序,不常用 | 在[] 表达式中:[ 2 > 1 ]为 true 在 [[]] 表达式中:[[ 2 > 1 ]]为 true 在 (()) 表达式中:(( 3 > 2 ))为 true |
< | 小于,判断字符串时根据ASCII 码表顺序,不常用 | [ 2 < 1 ]为 false [[ 2 < 1 ]]为 false (( 3 < 2 ))为 false |
>= | 大于等于 | 在(()) 表达式中:(( 3 >= 2 ))为 true |
<= | 小于等于 | 在(()) 表达式中:(( 3 <= 2 ))为 false |
-n | 字符串长度不等于 0 为真 | VAR1=1 VAR2="" [ -n "$VAR1" ]为 true [ -n "$VAR2" ]为 false |
-z | 字符串长度等于 0 为真 | VAR1=1 VAR2="" [ -z "$VAR1" ]为 false [ -z "$VAR2" ]为 true |
str | 字符串存在为真 | VAR1=1 VAR2="" [ $VAR1 ]为 true [ $VAR2 ]为 false |
在使用 -z
和 -n
判断字符串长度时,变量要加双引号。
Example
需要加上双引号才能正常判断
eg:
如果使用双中括号就不需要加双引号
Example
布尔运算符和逻辑运算符¶
运算符 | 描述 | 示例 |
---|---|---|
! | 非关系,条件结果取反 | [ ! 1 -eq 2 ] 为 true |
-a | 与关系,在[] 表达式中使用 |
[ 1 -eq 1 -a 2 -eq 2 ] 为 true |
-o | 或关系,在[] 表达式中使用 |
[ 1 -eq 1 -o 2 -eq 1 ] 为 true |
&& | 逻辑与 在 [[]] 和 (()) 表达式中或判断表达式是否为真时使用 |
[[ 1 -eq 1 && 2 -eq 2 ]] 为 true (( 1 == 1 && 2 == 2 )) 为 true[ 1 -eq 1 ] && echo yes 如果 && 前面表达式为 true 则执行后面的 |
|| | 逻辑或 在 [[]] 和 (()) 表达式中或判断表达式是否为真时使用 |
[[ 1 -eq 1 || 2 -eq 1 ]] 为 true(( 1 == 1 || 2 == 2 )) 为 true[ 1 -eq 2 ] || echo yes 如果 || 前面的表达式为 false 则执行后面打印 yes |
运算表达式¶
整数运算符¶
运算符 | 描述 |
---|---|
+ | 假发 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
运算表达式¶
运算表达式 | 示例 | 备注 |
---|---|---|
$(()) |
$((1+1)) |
可以在括号中赋值给变量 |
$[] |
$[1+1] |
不可以在括号中赋值给变量 |
Example
以上两个运算表达式均 不支持浮点运算。
-
$(())
还有另外一个用途:三目运算 -
也可以简化,使用默认值
Example
注意,不支持返回字符串
其他运算工具¶
let
expr
bc
let¶
赋值并运算
Example
bc¶
Shell 不支持浮点数比较,可以借助 bc
命令来完成
Example
expr¶
expr
可以对字符串操作
-
获取字符串长度
Example
-
截取字符串
Example
这里下标从 1 开始,且左包含+右包含。
-
获取字符在字符串中的位置
这里只返回字符在字符串中最先出现的位置
-
获取从头匹配长度
复合命令¶
使用复合命令,可以将多条指令组合在一起执行
{} 形式¶
以 {}
括起来的命令在本 shell 内执行,括号内的命令会改变本 shell 的变量值及工作目录。
注意
{
后需有一个空格
}
前需有一个分号 ;
Example
() 形式¶
以 ()
括起来的命令在子 shell 内执行,括号内的命令不会改变本 shell 的变量值及工作目录。
Tip
(
后无需空格
)
前无需空格
Example
括号用途总结¶
-
圆括号
()
:- 用途1:在运算中,先计算小括号里的内容
- 用途2:数组
- 用途3:正则匹配分组
- 用途4:在子 Shell 内执行命令
(())
:- 用途1:表达式,不支持
-eq、-a、-o
这类运算符,支持<=、==、&&、||
这类比较符。 - 用途2:C语言风格的
for(())
表达式
- 用途1:表达式,不支持
$()
:执行 Shell 命令,与反撇号等效$(())
:- 用途1:简单算术运算
- 用途2:三目运算
$((expression?num:num))
-
方括号
[]
:条件表达式,不支持逻辑判断符&& 、||
[[]]
:条件表达式,不支持-a、-o、>=、<=
,支持-eq、>、<
这类比较符。可以不用双引号,更通用。$[]
:简单算术运算,不支持逻辑比较。
-
花括号
{}
:对逗号,
和点点..
起作用touch {a,b}
:创建 a 和 b 两个文件touch {1..4}
:创建 1、2、3、4 四个文件- 用途2:在本 Shell 内执行命令
${}
:- 用途1:引用变量
- 用途2:字符串处理