shell之小括号中括号大括号

Posted ---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell之小括号中括号大括号相关的知识,希望对你有一定的参考价值。

1、Shell中变量的原形:${var}  一串命令的执行

#等价于
$ var=test 
$ echo $var 
test 

#例如,用在这个位置
$ echo ${var}AA 
testAA 

2、命令替换$(cmd) 一串命令的执行

命令替换$(cmd)和符号`cmd`(注意这不是单引号,在美式键盘上,`是ESC下面的那个键)有相同之处

$ ls 
a b c 
$ echo $(ls) 
a b c 
$ echo `ls` 
a b c 

我们来分析一下命令echo $(ls),以便理解所谓命令替换是什么意思:
shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令echo $(ls)中的$(ls)位置,即替换了$(ls),再执行echo命令。

()和{}都是对一串的命令进行执行,但有所区别:
A,()只是对一串命令重新开一个子shell进行执行
B,{}对一串命令在当前shell执行

3、POSIX标准的扩展计算:$((exp))  用于数学计算

这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在$((exp)),甚至是三目运算符。
注意:这种扩展计算是整数型的计算,不支持浮点型.若是逻辑判断,表达式exp为真则为1,假则为0。

$ echo $((3+2)) 
5 
$ echo $((3>2)) 
1 
$ echo $((25<3 ? 2:3)) 
3 
$ echo $var 

$ echo $((var=2+3)) 
5 
$ echo $var 
5 
$ echo $((var++)) 
5 
$ echo $var 
6 

4、单中括号 []

bash 的内部命令, [ 和 test 是等同的。

Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。

 

5、双中括号[[ ]]

[[是 bash 程序语言的关键字。使用[[ ... ]]条件判断结构。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。

4、5例如:

if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
 
for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done

 

 


首先,来看下shell中$与各种括号的结合:

$( )运行shell命令返回输出

如$(ls -a)

$(( )) 算术运算

如$(($a+$b))

$[] 算术运算

如$[$a+$b]

${ } 变量调用

如${$var}

 

再来看看单独使用的情况:

( ) 正则表达式中可以表示分组,并在后面通过\1,\2等调用

[ ] 测试表达式

[[ ]] 测试表达式

{ }可用于括起整个命令块

 

实在是不好记,于是,小林君又反过来总结变量调用、命令调用、测试表达式和算术运算的方法:

 

变量调用:

方法一:${var}

方法二:$var

 

 

命令调用:

方法一:`COMMAND`

方法二:$(COMMAND)

 

测试表达式:

方法一:[ expression ]

方法二:[[ expression ]]

方法三:test expression

 

 

算术运算

方法一:let 算术运算表达式

let C=$A+$B 这里变量A和B前面的$可以省略

方法二:$[算术运算表达式]

C=$[$A+$B]

方法三:$((算术运算表达式))

C=$(($A+$B))

方法四:expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用,遇到乘法的*号还要转义

C=`expr $A + $B`

方法五:expr $[算术运算表达式],遇到乘法*号不用转义。

 

 

dd

以上是关于shell之小括号中括号大括号的主要内容,如果未能解决你的问题,请参考以下文章

shell中各种括号的作用

shell 单中括号双中括号和gt、>和加大括号引用变量的区别

如何理解这段代码片段中的两对括号?

shell中常用括号用法汇总 linux课程学习

[ SHELL编程 ] shell中各种括号的使用方法

bash 函数:将主体括在大括号与括号中