一、构造字符串
直接构造
2 | STR_FIRST= "i am a string" |
重复多次
05 | if [ "$x" == "" ]; then |
12 | STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1" ` |
举例:
1 | STR_REPEAT=`strRepeat "$USER_NAME" 3` |
2 | echo "repeat = $STR_REPEAT" |
二、赋值与拷贝
直接赋值
与构造字符串一样
从变量赋值
三、联接
直接联接两个字符串
STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
使用printf可以进行更复杂的联接
四、求长
求字符数(char)
1 | COUNT_CHAR=` echo "$STR_FIRST" | wc -m ` |
求字节数(byte)
1 | COUNT_BYTE=` echo "$STR_FIRST" | wc -c ` |
求字数(word)
1 | COUNT_WORD=` echo "$STR_FIRST" | wc -w ` |
五、比较
相等比较
不等比较
举例:
1 | if [ "$USER_NAME" = "terry" ]; then |
小于比较
1 | then x=2 localTEMP=`printf "%s/n%s" "$1" "$2" ` local TEMP2=`( echo "$1" ; echo "$2" ) | sort ` if [ "$TEMP" = "$TEMP2" ]; |
1 | then x=1 fi fi echo $x } |
六、测试
判空
判非空
是否为数字
06 | local STR_TEMP=` echo "$1" | sed 's/[0-9]//g' ` |
07 | if [ -z "$STR_TEMP" ]; then |
举例:
1 | if [ -n "$USER_NAME" ]; then |
2 | echo "my name is NOT empty" |
5 | echo `strIsNum "9980" ` |
七、分割
以符号+为准,将字符分割为左右两部分
使用sed
举例:
命令 date --rfc-3339 seconds 的输出为
2007-04-14 15:09:47+08:00
取其+左边的部分
date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
输出为
2007-04-14 15:09:47
取+右边的部分
date --rfc-3339 seconds | sed 's/.*+//g'
输出为
08:00
以空格为分割符的字符串分割
使用awk
举例:
STR_FRUIT="Banana 0.89 100"
取第3字段
echo $STR_FRUIT | awk '{ print $3; }'
八、子字符串
字符串1是否为字符串2的子字符串
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘/(.//).*’
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
1、第一种方法:
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子:
1 | $ MYVAR=foodforthought.jpg |
2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:
比如获取后缀名
1 | ls -al | cut -d “.” -f2 |