[原创] 用shell判断一个字符串是不是全为数字 & 截取字符串的若干示例

文章来源:http://www.codelast.com/

 

(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

文章来源:http://www.codelast.com/

另外要注意:用这种方式来判断负数的时候,也认为不是全为数字的,因为负数中带了一个负号,就不是数字

(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 这样的写法。
详细用法请看这个链接

文章来源:http://www.codelast.com/

(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-表示从右边开始算),一直截取到字符串的末尾。

《[原创] 用shell判断一个字符串是不是全为数字 & 截取字符串的若干示例》有2条评论

    • 我在文章中已经特意注明过了:
      “注意:上面的第2行代码中,\ 和 [ 之间特意多加了一个空格(其实不应该有空格的),是因为本站安装的LaTex插件的影响。”

      回复

回复 learnhard 取消回复