单撇号
用命令的执行结果来替换这个字符串本身
例1:
#now=‘date’
#echo $now
#now=`date`
#echo $now
例2:
#count=10
#count=`expr$count + 1`
#echo $count
注意: 反撇号与单引号的区别
expr expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
expr也是一个手工命令行计数器。
例 $expr 10 + 10
20
$expr 1500 + 900
2500
$expr 30 / 3
10
$expr 30 / 3 / 2
5
(注意运算符左右都有空格 ,如果没有空格表示是字符串连接) 使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
变量
name=string
赋值号“=”两边不允许有空白符;
nodehost="beijing.UUCP beijing.UUCP”
path=/bin:/usr/bin:/etc/bin
count=10
)允许多个赋值操作,按从右到左的顺序进行
#A=$BB= A=$BB=abc C="OK"
# echo $A $B $C
abcabcOK
)当引用一个未设置的变量时,其隐含值为空
#echo "$mail is path of mailbox”
is path of mailbox is path of mailbox
用户自定义变量(双引号)
)如果用双引号“”将值括起来,则括起来的字符串允许出现空格、
制表符和换行符的特殊字符,而且允许有变量替换
# MAIL=/ MAIL=/var/mail/fk
#var="$MAIL is a path of mailbox"
#echo $var
```r/mail/fkis a path of mailbox
例2: #str="This is \n a book"
#echo $str
This is
a book a book
用户自定义变量(单引号)
)如果用单引号‘’将值括起来,则括起来的字符串允许出现空格、
制表符和换行符的特殊字符,但不允许有变量
例1 #BOOK="English book"
# MSG='$BOOK'
#echo $MSG echo $MSG
例2
#msg='Today is ='Today is \t Sund
# echo $msgay is Sunday
shift命令(处理不定长参数) 使用shift可以将命令行位置参数依次移动位置,即$2->$1, $3->$2. 在移位之前的第一个位置参数$1在移位后将不在存在
使用shift时,每进行一次移位,$#减1,使用这一特性可以用until
循环对每个参数进行处理
使用shift的另一个原因是Bourne Shell的位置参数变量为$1~$9,
因此通过位置变量只能访问前9个参数。但这并不等于在命令行上
最多只能输入9个参数。此时如果想访问前9个参数之后的参数,就
必须使用shift
shift后可加整数进行一次多个移位,如:shift 3
用户自定义变量(大括号) 引用变量的值时,可以用花括号{}将变量名称括起来,使变量名称
与它的后续字符分隔开,如果紧跟在变量名称后面的字符是字母、数
字或下划线时,必须要使用花括号
例:
#str='This is a string'
#echo "${str}enttest of variables"s is a stringent test of variables
#echo "$strenttest of variables"
test of variables
变量替换格式
${var:-value} 如果变量var为非空值则用变量var的值,如果变量var为空值,则用value的值。
例:
testvar1=jiayou
echo ${testvar1:-success}
#当testvar1有非空值的时候,打印出testvar1的值
testvar2=
echo ${testvar2:-success}
#当testvar2为空值得时候,打印出字符串success
echo ${testvar3:-success}
#当testvar3未定义时,其值为空,打印出字符串success
testvar4=cheer
echo ${testvar3:-$testvar4} #当testvar3未定义为空值时,打印出变量testvar4的值,说明value的值可以是字符串也可以是变量
执行结果
jiayou success success cheer
${var:+value} 如果变量var为非空值时,也是用value的值,如果变量var为空值时,则取空值。
例:
testvar1=jiayou echo ${testvar1:+success} #当变量testvar1的值非空时,用字符串success testvar2= echo ${testvar2:+success} #当变量testvar2的值为空时,用空字符串 echo ${testvar3:+success} #当变量testvar3的值为空时,用空字符串 testvar4=cheer echo ${testvar3:+$testvar4} #当变量testvar3的值为空时,用空字符串 testvar4=cheer echo ${testvar1:+$testvar4} #当变量testvar1的值非空时,用变量testvar4的值。
执行结果:
success cheer
${var:?message} 当变量var的值为非空字符串时,为变量var的值,当变量var为空时,打印出message的值,并跳出。
例:
testvar1=jiayou echo ${testvar1:?success} #变量testvar1的值非空时,打印出变量testvar1的值 testvar2= echo ${testvar2:?success} #变量testvar2为空字符串时,打印出字符串success,并跳出,不再执行下边的动作
testvar4=cheer echo ${testvar3:?$testvar4} #因为前面已经跳出所以此处不再执行
执行结果
jiayou ./test.sh: line 175: testvar2: success
${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
例:
testvar1=AAABBBCCCBBBDDD echo ${testvar1/BBB/DDD} echo ${testvar1//BBB/EEE}
打印结果:
AAADDDCCCBBBDDD AAAEEECCCEEEDDD
字符串匹配
字符串的头尾截取
${var#pattern} 去掉变量var中开头与pattern相匹配的部分,通配符使用的情况下,最短匹配原则,通配符不使用的情况下,匹配指定字符串。
${var##pattern} 去掉变量var中开头与pattern相匹配的部分,通配符使用的情况下,最长匹配原则,通配符不使用的情况下,匹配指定字符串。
${var%pattern} 去掉变量var中尾部与pattern相匹配的部分,通配符使用的情况下,最短匹配原则,通配符不使用的情况下,匹配指定字符串。
${var%%pattern} 去掉变量var中尾部与pattern相匹配的部分,通配符使用的情况下,最长匹配原则,通配符不使用的情况下,匹配指定字符串。
例
testvar1=AAABBBCCC echo ${testvar1#A} echo ${testvar1##A} echo ${testvar1#*B} echo ${testvar1##*B} echo ${testvar1%B} echo ${testvar1#B} echo ${testvar1%C} echo ${testvar1%%C} echo ${testvar1%B*} echo ${testvar1%%B*}
打印结果:
AABBBCCC AABBBCCC BBCCC CCC AAABBBCCC AAABBBCCC AAABBBCC AAABBBCC AAABB AAA
字符串的长度
${#var}得到变量var的字符串长度
例:
testvar1=AAABBBCCC echo ${#testvar1}
打印结果:
9
字符串位置
postion为第几个位置,此位置前面的字符为被匹配的(被删除的),length表示剩下的字符的长度: ${var:postion} # 从左往右看,匹配postion位置之左的,留下之后的 ${var:postion:length} # 匹配postion位置之前的同时,显示之后的长度为length
例:
testvar1=AAABBBCCC echo ${testvar1:3} echo ${testvar1:3:3}
打印结果:
BBBCCC BBB
|