关闭

shell中的各种括号

标签: shell括号
146人阅读 评论(0) 收藏 举报
分类:

1.中括号[ ]
①bash 的内部命令,[和test是等同,作为条件判断结构

    if [  ];then   cmd;fi

②引用数组中每个元素的编号
2. 双中括号 [[ ]]
双中括号大多数情况与单中括号相同,但是[[ ]] 支持字符串的模式匹配,如[[ hello == hell? ]]。且能避免许多bug

if [ $i -lt 5 ]    
if [ $a -ne 1 -a $a != 2 ]    
if [ $a -ne 1] && [ $a != 2 ]    
if [[ $a != 1 && $a != 2 ]]

①使用[ ]判断变量是否为空,我们定义4个变量,变量b只定义不赋值,变量c定义为空字符串,变量d为空格,变量e正常赋值

[root@os logs]# b=;c='';d=' ';e=e
[root@os logs]# [ -n $a ] && echo aok;[ -n $b ] && echo bok;[ -n $c ] && echo cok;[ -n $d ] && echo dok;[ -n $e ] && echo eok;
aok
bok
cok
dok
eok

所有的都判断为真,所以用[ ] 来判断某变量是否为空,会出很多bug,而用[[ ]]便不存在,如下所示,仅变量d和变量e判断为非空
②使用[[ ]]判断变量是否为空

[root@os logs]# [[ -n $a ]] && echo aok;[[ -n $b ]] && echo bok;[[ -n $c ]] && echo cok;[[ -n $d ]] && echo dok;[[ -n $e ]] && echo eok;
dok
eok

4 小括号 ( )
①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
③用于初始化数组。如:array=(a b c d)
5 双小括号 (( ))
①整数扩展
②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中
③重新定义变量值,比如 a=5; ((a++)) 可将$a 重定义为6
④for循环,for((i=0;i<5;i++))
⑤整数的条件判断,如i=5;if (($i < 6));then echo ok;fi

6 大括号{ }
①代码块,又被称为内部组,如函数定义。
注意: {}的第一个命令和左括号之间必须要有一个空格
括号内的命令间用分号隔开,最后一个也必须有分号。
②常用用法
for a in {1..10..2};do echo $a ;done
touch {a..e}.txt
touch 2015-04-0{1..9}.txt
rm –f 2015-04-0{1..9}.txt
注意{}内不允许有空格,否则将不起作用
如touch {a..e }.txt,创建了两个文件
()和{}都是对一串的命令进行执行,区别:
①()只是对一串命令重新开一个子shell进行执行
②{}对一串命令在当前shell执行
③()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
④()最后一个命令可以不用分号
⑤{}最后一个命令要用分号
⑥{}的第一个命令和左括号之间必须要有一个空格 ()里的各命令不必和括号有空格
⑦()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

[root@os logs]# name=mark
[root@os logs]# (name=chas;echo $name);echo $name
mark
chas
[root@os logs]# name=yasi
[root@os logs]# { name=yanan;echo $name;};echo $name
yanan
yanan
[root@os logs]# { echo 1;echo 2; } | awk '{print NR,$0}‘
1 1
2 2
[root@os logs]# (echo 1;echo 2) > test.txt
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39159次
    • 积分:748
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:4篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论