shell的特殊符号&逻辑运算符
特殊符号
在我们看shell脚本的时候,经常会看到以下特殊符号,如[]
、[[]]
、(())
、$(())
、()
等,具体他们有什么作用将会在下面一一解答
test命令
test
命令主要是来做表达式判断的
1. 语法结构
test {EXPRESSION}
- 示例
#!/bin/bash
if test "a" == "b"
then
echo "eq"
else
echo "not eq"
fi
- 结果输出
not eq
let
let
命令主要是来做算术运算
1. 语法结构
let EXPRESSION
- 示例
#!/bin/bash
a=1
let b=a+2
echo $b
- 结果输出
3
[]
[]
符号的作用与 test 命令一样,都用于判断表达式的真假。只不过 []
将表达式括起来了,更加易读
- 语法结构
let EXPRESSION
- 示例
#!/bin/bash
if test [ "a" == "b" ]
then
echo "eq"
else
echo "not eq"
fi
- 结果输出
not eq
[[]]
[[]]
符号与[]
符号的区别是,在 [[]]
符号里,我们引用变量时可以不再用 $
符号了,而且还可以使用 &&
和 ||
运算符
- 示例
#!/bin/bash
a=10
b=20
if [[ a -lt b ]]
then
echo "a < b"
else
echo "a >= b"
fi
- 结果输出
a < b
(())
(())
符号的作用与let
命令相似,用在算数运算上,执行效率上会比使用 let指令要好
- 示例
#!/bin/bash
a=10
b=20
((b=b+a))
echo $b
if (( a > b))
then
echo "a>b"
else
echo "a<=b"
fi
- 结果输出
30
a<=b
$(())
$(())
会把运算结果替换出来
- 示例
#!/bin/bash
a=10
b=$(( a <= 12 && a > 0))
echo $b
- 结果输出
1
如果要让他作为一个表达式去使用的话,就要结合[]一起使用
- 示例
#!/bin/bash
a=10
if [ $(( a < 10)) -eq 1 ]
then
echo a lower than 10
fi
- 结果输出
a lower than 10
()
()
符号表示括号中作为一个子 Shell 运行,运行结果不干扰外层的 shell,这让我们可以在写shell的时候可以做到不切换当前目睹而在其他目录做事情
- 示例
#!/bin/bash
pwd
#去subdir这个子目录创建了test.txt文件,写入test subdir
(cd ./subdir;echo "test subdir " >test.txt )
cat ./subdir/test.txt
- 结果输出
/usr/xiao/myshell
test subdir
{}
{}
和()
非常相似,不过它在当前的 shell 执行,不会产生 subshell。 单纯只使用大括号时,作用就像是个没有指定名称的函数一般。
{}
和()
用法区别:
- {}
里的运算是在当前 Shell 运行,会影响外层结果,而()
的不会影响外层结果
- {}
最后一个语句必须要用;
结束,否则出错,而括号()
的并没有这个要求
逻辑运算符
和高级语言一样,shell语言也有逻辑运算符,与、或、非三个逻辑运算符,分别如下
- !:非
- -a:与
- -o:或
由于shell中没有布尔类型,如果要做布尔判断,可以这么理解,所有结果大于0的就是true,反之为false
- 示例
#!/bin/bash
a=5
b=10
# 非运算
if !(( a == b ))
then
echo "a!=b"
fi
# 或运算
if [ $a -gt 8 -o $b -gt 8 ]
then
echo "a > 8 || b > 8"
fi
# 与运算
if [ $a -lt 10 -a $a -gt 0 ]
then
echo "0<a<10"
fi
- 输出结果
a!=b
a > 8 || b > 8
0<a<10