参考:https://www.cnblogs.com/itxdm/p/something_of_shellscirpt.html
https://www.cnblogs.com/hanggegege/p/5928870.html
https://blog.csdn.net/ztf312/article/details/52317571
简要描述:
1、单小括号( ):把括号内的命令在另一个shell执行,并把结果返回,左右不留空格,一般要带前缀 $
双小括号(( )) :整数比较、四则运算,括住的内容,完全符合C语言语法,一般要带前缀 $
2、单中括号[ ]:类似于测试命令(数字、字符串、文件三者的判断),左右必须留空格,特殊字符需用转义符\,一般用于if语句
双中括号[[ ]]:功能类似于单中括号,区别在于特殊字符无需转义,而且支持>、<等符号判断
3、单大括号{ }:快速替换
4、单反引号``:命令替换
一、小括号
1、单层小括号( ),执行shell命令并取得输出,例如:var=$(ls)、echo $(ls)
2、双层小括号(( )),内部可以
echo $((3+2)) 输出5
echo $((3>2)) 输出1
echo $((25<3 ? 2:3)) 输出3
echo $var
echo $((var=2+3)) 输出5
echo $var
echo $((var++)) 输出5,显然符合c语言特性
echo $var 输出6
二、中括号,[ ]、[[ ]]都类似于test命令,一般用于if语句。http://www.runoob.com/linux/linux-shell-test.html
单双中括号的共同点:
(1) 功能都是用于数字、字符串、文件三者的判断,字符串比较只能用==、!=、-z、-n,数字比较用-eq、-gt等,文件判断用-e -d等,取非用!,详情查阅test参考链接
(2) 两者左右两边都要留空格、运算符两边都要留空格!!!
两者的区别:
(1) 转义方面:若[ ]中出现特殊字符如( ),则左右小括号都要转义,写成\(\);而[[ ]]无需转义
(2) 判断运算符、逻辑运算符,分别支持哪些?(部分如下)
[ ]支持 | -eq | -gt | -ge | -a | -o |
[[ ]]支持 | ==和-eq | >和-gt | -ge、 不支持>= |
&& | || |
1、单中括号 [ ]
a=3
str="ab"
filePath=./hello.c #右值的单双引号可用可不用
if [ 3 -eq $a ]; then echo yes; fi #数字判断:输出yes
if [ $str!="cd" ]; then echo yes; fi #字符串判断:输出yes
if [ -e filePath ]; then echo yes; fi #文件判断:若存在则输出yes
2、双中括号[[ ]]
if [[ 3 > 2 && 3 < 2 ]]; then echo yes; fi #数字比较示例:输出yes
变量调用:
方法(1):${var}
方法(2):$var
命令调用:
方法(1):`COMMAND`
方法(2):$(COMMAND)
测试表达式:
方法(1):[ expression ]
方法(2):[[ expression ]]
方法(3):test expression
算术运算
方法(1):let 算术运算表达式
let C=$A+$B 这里变量A和B前面的$可以省略
方法(2):$[算术运算表达式]
C=$[$A+$B]
方法(3):$((算术运算表达式))
C=$(($A+$B)) #参考双( )的用法
方法(4):expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用,遇到乘法的*号还要转义
C=`expr $A + $B` #参考单反引号的用法
或C=$(expr $A + $B) #参考单( )的用法
方法(5):expr $[算术运算表达式],遇到乘法*号不用转义。