shell脚本中各种括号的区别以及用法
最近学到了shell脚本编程,觉得脚本中的不同括号有不同的用处,以及有些括号的格式也有特殊要求,下面我就总结一下各种括号的用法。
一、小括号();双小括号(())
1:命令替换。等同于`comm`,shell扫描一遍命令行,发现了$(comm)结构,便将$(comm)中的comm执行一次,得到其标准输出,再将此输出放到原来命令。
[root@localhost ~]# array=(a b c d)
[root@localhost ~]# declare -a
declare -a array='([0]="a" [1]="b" [2]="c" [3]="d")'
2、双小括号 (())
((表达式))常用于算术运算比较,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}。再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。
#求100以内的偶数#! /bin/bash
num=2
while ((num<100)) #数值与运算符可以没有空格,变量的使用时也可以不使用$num
doecho "$num"((num=num*2))
done
二、中括号[ ];双中括号[[ ]]
1:单中括号[ ]
1:算术比较, 比如一个变量是否为0, [ $var -eq 0 ]。
[root@localhost ~]# echo 1234abcdef |tr -cd "[0-9]"
1234[root@localhost ~]# cat 1.txt|grep "[0-9]"
123
135
1244
156
222
178
189999
12gg
[root@localhost ~]#
4:在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号
[root@localhost ~]# echo ${name[2]}
durank
[root@localhost ~]#
2:双中括号 [[ ]]
[[ ]] 多用来进行字符串比较, 比如两个字符串是否相同, [[ $var1 == $var2 ]]
注意 = 前后有一个空格,如果忘记加空格, 就变成了赋值语句,而非比较关系了。
字符串的其他比较情况:
| 操作符 | 意义 |
|---|---|
[[ $str1 != $str2 ]] | 如果 str1 与 str2 不相同,则返回真 |
[[ -z $str1 ]] | 如果 str1 是空字符串,则返回真 |
[[ -n $str1 ]] | 如果 str1 是非空字符串,则返回真 |
使用逻辑运算符 && 和 || 可以轻松地将多个条件组合起来, 比如:
# ls {ex1,ex2}.sh
ex1.sh ex2.sh
# ls {ex{1..3},ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh
# ls {ex[1-3],ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh
2:字符串提取和替换
|
|
第一种模式:${var:num},这种模式时,shell在var中提取第num个字符到末尾的所有字符。若num为正数,从左边0处开始;若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如${var: -2}、${var:1-3}或${var:(-2)}。
第二种模式:${var:num1:num2},num1是位置,num2是长度。表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。不能为负数。
第三种模式:${var/pattern/pattern}表示将var字符串的第一个匹配的pattern替换为另一个pattern。
第四种模式:${var//pattern/pattern}表示将var字符串中的所有能匹配的pattern替换为另一个pattern。
[root@centos ~]# var=/home/centos
[root@centos ~]# echo $var
/home/centos
[root@centos ~]# echo ${var:5}
/centos
[root@centos ~]# echo ${var: -6}
centos
[root@centos ~]# echo ${var:(-6)}
centos
[root@centos ~]# echo ${var:1:4}
home
[root@centos ~]# echo ${var/o/h}
/hhme/centos
[root@centos ~]# echo ${var//o/h}
/hhme/cenths
字符大小写转换
${var^^}:把var中的所有小写字母转换为大写
${var,,}:把var中的所有大写字母转换为
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
