单双引号有区别。
变量放在单引号里面告诉shell忽略特殊字符,双引号告诉shell解释原有符号的原有意义。
N=1
var="1 2 $N"
echo $var ----> 1 2 1
var1= '1 2 $N'
echo $var1 ---> 1 2 1
${}的定义
切片字符串
替换字符串
截取字符串
var='hello world'
echo ${var:1:4}
#解释为:将var字符串从第一个开始往后截取4个
echo ${var:(-3):2}
#解释为:将var字符串倒数第三个开始,往后截取2个字符
echo ${var/test1/test2}
# 解释为将var字符串test1替换为test2,替换第一个
echo ${vare://test1/}
#解释为将var字符串中所有的test1替换为空字符串
echo ${var://[0-9]/}
#解释为将var字符串中的所有数字替换为空字符串
echo ${var#*//}
#解释为删除var字符串中以‘//’分割的左侧的所有前缀
变量状态赋值
${var:-string}
#解释为var为空则返回string
${var:+string}
#解释为var不为空则返回string
${var:=string}
#解释为var为空就重新赋值
判断变量是否为真
[ -n "$a" ] && echo yes || echo no
#解释为$a不等于零为真,等于零为假
[ -z "$a" ]
#解释为$a为零则为真,不等于零为假
[ -e path ]
#解释为判断path是否存在,存在为真,不存在为假
[ -f file_path ]
#解释为判断文件存在为真,不存在为假
[ -d dir_path ]
#目录存在为真,不存在为假
[ -r file_path ]
#解释为判断文件是否存在可读权限,拥有可读权限为真,否则为假
[ -w file_path ]
#解释为判断文件是否有可写权限,有则为真
[ -x file_path ]
#解释为文件是否有可执行权限,拥有可执行权限为真
[ -s file_path ]
#解释为文件存在并且大小大于零为真,file_path存在并且大小大于0为真
布尔运算符
[ ! 1 -eq 2 ] 为真。条件结果取反
[ 1 -eq 1 -a 2 -eq 2 ] 为真,和关系true and true 为true
[ 1 -eq 1 -o 2 -eq 1 ] 为假,或关系true or false 为false
逻辑判断符
&& 逻辑和,前面为真则执行后面的
|| 逻辑或,前面为假则执行后面的
整数运算
+ 加
- 减
* 乘
/ 除
% 取余
运算表达式
$(()) $((1+1))
$[] $[1+1]
echo $[2*3]
echo $((2>3))
:0
echo $((2<3))
:1
echo $[2>1]
:1
echo $[1>2]
:0