字符串简介
1、大括号{ }用法实例
1)纯{ }用法
拓展功能:例如:ls {name1,name2}.sh ;touch {1..3}.sh
代码组织功能:例如:多条命令在当前shell中执行 { cmd1;cmd2;cmd3;},注意cmd1与{之间有空格,cmd3后边有;
2)$结合{ }用法
取值拓展功能:例如:var=dreamer;echo ${var}way 此条语句输出dreamerway
替换结构:${var:-string},${var:+string},${var:=string},${var:?string}
A,${var:-string}和${var:=string}:若变量var为空,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string};对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
B. ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的)
C,${var:?string}替换规则为:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。
模式匹配替换结构:${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
第一种模式:${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式;
第二种模式: ${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式;
第三种模式:${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式;
第四种模式: ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式;
这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示零个或一个任意字符,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。
2、中括号[ ]用法实例
单中括号用于条件测试:"["是一个可执行程序,路径是"/usr/bin/[",
if [ $num1 -eq $num2 ] ; then 等价于 if /usr/bin/[ $num1 -eq $num2 ] ; then
还等价于if test $num1 -eq $num2 ; then
单中括号用于数组:例如:输出数组全部元素echo ${array[@]}
双中括号:单中括号加强版 [[是 bash 程序语言的关键字,并不是一个命令,在单括号中是不可以用 || &&等关系运算符号的,只能用-a -o等等,例如[[ $arch_com = i386 || $ARCH = i*86 ]]
3、小括号( )用法实例
单括号代码组织功能:跟上边{}不同的是,此处命令块会在子shell中运行,例如:(cmd1;cmd2;cmd3) 这三条命令的执行不会影响当前的shell环境
单括号数组初始化功能:例如:array=(1 2 3 4 5)
双括号算术运算比较功能:例如:for((i=0;i<9;i++)) 如果不采用双括号可用
for i in `seq 0 9`或者for i in {0..9}代替