shell中的单层大/中/小括号、双层大中小括号、命令替换等

参考: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 $[算术运算表达式],遇到乘法*号不用转义。

猜你喜欢

转载自blog.csdn.net/qq_31073871/article/details/80822579