(1)判断一个字符串是不是全为数字
#!/bin/sh # 该变量就是要判断的变量 VAR="1234908" RET=`expr match $VAR "[0-9]*$"` if [ ${RET} -gt 0 ]; then echo "It is a Number!" else echo "Not a Number!" fi
另外要注意:用这种方式来判断负数的时候,也认为不是全为数字的,因为负数中带了一个负号,就不是数字。
(2)取字符串的第1个字符
VAR="[Sun Feb 20 03:10:51 2011]" echo ${VAR:0:1}
这样输出的就是第一个字符“[”了。VAR:0:1表示从变量VAR中的字符串的第0个字符开始(也就是从头开始),截取到第1个字符为止,所以就相当于取字符串的第一个字符了。
同理,如果要取某个字符中的第6个字符到第10个字符的子串,可以用类似于 VAR:6:10 这样的写法。
详细用法请看这个链接。
(3)从一个字符串的尾部开始,删除从指定字符开始直到最后一个字符
如下命令:
STR=`ethtool eth0 | grep Speed | awk '{print $2}'`
执行之后,变量 STR 中保存的是字符串“1000Mb/s”(不含引号),现在我要删除“Mb/s”,只剩下“1000”,可以这样做:
echo ${STR%M*}
这表示从右边开始,删除第一个 M 及右边的字符。
同理,如果要删除一个字符串中的最右边的一个子字符串(例如,要删除“file.checksum”中的“.checksum”,可以这样做:
A=file.checksum B=`echo ${A%.checksum}` echo $B
输出即为“file”(不含引号)。
(4)截取字段串,可以考虑用删除掉多余字符串的方法来实现,例如:
截取字符串 [192.168.3.11] 中的方括号里的IP地址, 用将方括号删除的方法,即可实现同样的效果:
A="[192.168.3.11]" B=`echo $A | sed 's/\ [//' | sed 's/]//'` echo $B
输出即为:192.168.3.11
注意:上面的第2行代码中,\ 和 [ 之间特意多加了一个空格(其实不应该有空格的),是因为本站安装的LaTex插件的影响。
其中,两个sed命令分别将左括号[及右括号]替换为了空字符串,相当于删除了它们。左方括号在sed中需要转义,所以要以 \ 开头。
文章来源:http://www.codelast.com/
(5)截取字符串——删除字符串末尾的子字符串
[root@ codelast]$ INPUT_STR="abc.txt" [root@ codelast]$ echo ${INPUT_STR%.txt} abc
其中,一个百分号表示从 INPUT_STR 的右边开始,去掉最短匹配子串。
(6)截取字符串——从字符串的开头开始,删除最短匹配字符串
假设有字符串“part-r-00000”,要从左边开始,删除最短的、匹配“part”的字符串,可以这样:
[codelast@ ~]$ A="part-r-00000" [codelast@ ~]$ B=${A#part} [codelast@ ~]$ echo $B -r-00000
(7)截取字符串——从字符串的右边第几个字符开始,一直截取到字符串的末尾
假设要截取一个字符串最右边的3个字符,可以像下面这样:
[codelast@alarmpi ~]$ A="testStr" [codelast@alarmpi ~]$ B=`echo ${A:0-3}` [codelast@alarmpi ~]$ echo $B Str
在这里,0-3表示从右边第3个字符开始(0-表示从右边开始算),一直截取到字符串的末尾。
A="[192.168.3.11]"
B=`echo $A | sed 's/\ [//' | sed 's/]//'`
echo $B
上面代码中 第一个sed 中 \和[ 之间 不应该有 空格. 请验证
我在文章中已经特意注明过了:
“注意:上面的第2行代码中,\ 和 [ 之间特意多加了一个空格(其实不应该有空格的),是因为本站安装的LaTex插件的影响。”