shell中四种括号作用

单括号

  • 一次性执行多条命令,各命令之间用分号分隔,最后一个命令可以没有分号 例:(cd /home; touch demo;)
  • 将命令执行结果输出给一个变量 例:a=$(date) ,下面3个赋值语句效果均相同
1. a=$(date)
2. a=`date`
3. a=$`date`
  • 初始化数组 例:arr=(a b c d)

双括号

  • 所有变量可以不加”$”前缀,直接进行四则运算
注: 1、2、3 等价
a=3.14
1. ((b=a+1))
2. b=`expr $a + 1`
3. let "b=a+1"
4. b=$[$a+1]
5. b=`echo "scale=2;$a+0.69"|bc` 
6. b=`echo "$a 3.14"|awk '{printf("%g",$1*$2)}
echo $b

等式5中的bc可进行浮点型计算,使用scale进行精度设置
等式6是利用awk进行计算,awk也支持浮点型计算,且内置有 log、sqr、cos、sin等函数

  • 可以像C语言一样,执行C语言规则运算,如a++、b–
a=1
((a++))
echo $a
  • 可进行逻辑运算
a=1
echo $((a>1?8:9))
  • 双括号结构扩展了for、while、if等条件测试运算
for语法
num=100
total=0
for((i=0;i<=num;i++))
do
    ((total+=i))
done
echo $total
while语法
num=100
total=0
i=0
while((i<=num))
do
    ((total+=i,i++))
done
echo $total
if语法
a=3
if((a>1)); then
  echo 'yes'
fi

单中括号

  • 通过 type [可知,[ 是内建命令([ is a shell builtin),它是调用 test 命令的标识,右中括号关闭条件判断
  • [ ]字符串比较是按照字典顺序,常用 ==、!=
  • [ ]整数比较采用 -eq、-gt、-lt的形式
  • [ ]是shell命令,所以中间的表达式是命令行参数,如在比较时使用> <时,需要用\转义,否则就变成重定向
  • [ ]的逻辑与用 -a,逻辑或用-o
  • 字符范围,用作正则表达式的一部分
  • 在一个array结构的上下文中,[]用来引用数组中的每个元素的编号
  • [ ]不会进行算数扩展,例
if [ 99+1 -eq 100 ]; then
  echo 'yes'
fi

 bash: [: 99+1: integer expression expected

双中括号

  • type [[可知,[[是shell关键字
  • [[ ]]字符串比较是按照字典顺序,常用 ==、!=
  • [[ ]]整数比较采用 -eq、-gt、-lt的形式
  • 当比较表达式中其中一个比较数可能为空或者不存在时,使用[ ]会报错,使用[[ ]]可以避免报错的问题
if [ a -eq 3 ]; then      --- [: a: integer expression expected
if [[ a -eq 3 ]]; then
 echo 'yes'
fi
  • [[ ]]的逻辑与用 &&,逻辑或用||
  • [[ ]]支持算数扩展,例
if [[ 99+1 -eq 100 ]]; then
  echo 'yes'
fi
    原文作者:Lee_DH
    原文地址: https://www.jianshu.com/p/112b0a85fe90
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞