获取字符串长度
string=abc12342341 //等号二边不要有空格
echo ${#string} //结果11
expr length $string //结果11
expr "$string" : ".*" //结果11 分号二边要有空格,
字符串比较
不等值比较
在[[]]中支持,在[]中不支持
只支持大于与小于
不管是使用[[]]还是使用[],请注意在靠近括号的字符与括号之间要使用空格
- 实例1 支持小于
-> # cat -n test.sh
1 #!/bin/sh
2 if [[ 133 < 133SP01 ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:23:13] [~/vm8500_Uniview]
-> # sh test.sh
yes
- 实例2 不支持单个中括号
-> # cat -n test01.sh
1 #!/bin/sh
2 if [ "133" < "133SP01" ];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:23:48] [~/vm8500_Uniview]
-> # sh test01.sh
test01.sh: line 2: 133SP01: No such file or directory
no
- 实例3: 不支持"小于等于"
-> # cat -n test01.sh
1 #!/bin/sh
2 if [[ "133" <= "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:33:25] [~/vm8500_Uniview]
-> # sh test01.sh
test01.sh: line 2: syntax error in conditional expression
test01.sh: line 2: syntax error near `"133"'
test01.sh: line 2: `if [[ "133" <= "133" ]];then'
root@cenos62-64 [10:33:30] [~/vm8500_Uniview]
- 实例4 支持"大于"
root@cenos62-64 [10:34:48] [~/vm8500_Uniview]
-> # cat -n test01.sh
1 #!/bin/sh
2 if [[ "134" > "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:34:50] [~/vm8500_Uniview]
-> # sh test01.sh
yes
- 实例5 不支持"大于等于"
-> # cat -n test01.sh
1 #!/bin/sh
2 if [[ "134" >= "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:35:09] [~/vm8500_Uniview]
-> # sh test01.sh
test01.sh: line 2: syntax error in conditional expression
test01.sh: line 2: syntax error near `"133"'
test01.sh: line 2: `if [[ "134" >= "133" ]];then'
- 实例6
-> # cat -n test01.sh
1 #!/bin/sh
2 if [[ "133a" > "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:40:00] [~/vm8500_Uniview]
-> # sh test01.sh
yes
root@cenos62-64 [10:40:02] [~/vm8500_Uniview]
等值比较
- 相等比较: 可以使用== 也可以使用=,二者是等价的,注意=号与字符串之间要有空格
- 不相等比较: 使用 !=
实例如下
- 实例1 使用=
-> # cat -n test.sh
1 #!/bin/sh
2 if [[ "133" = "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:41:00] [~/vm8500_Uniview]
-> # sh test.sh
yes
- 实例2 使用==
-> # cat -n test.sh
1 #!/bin/sh
2 if [[ "133" == "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:41:13] [~/vm8500_Uniview]
-> # sh test.sh
yes
- 实例3 使用!=
-> # cat -n test.sh
1 #!/bin/sh
2 if [[ "132" != "133" ]];then
3 echo yes
4 else
5 echo no
6 fi
root@cenos62-64 [10:41:34] [~/vm8500_Uniview]
-> # sh test.sh
yes
字符串截取
假设有变量 var=http://www.linuxidc.com/123.htm
#
号截取,删除左边字符,保留右边字符。
echo ${var#*//}
结果:
www.linuxidc.com/123.htm
##
号截取,删除左边字符,保留右边字符。
echo ${var##*/}
结果:
123.htm
%
号截取,删除右边字符,保留左边字符
echo ${var%/*}
结果:
http://www.linuxidc.com
%%
号截取,删除右边字符,保留左边字符
echo ${var%%/*}
结果:
http:
- 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
结果:
http:
- 从左边第几个字符开始,一直到结束。
echo ${var:7}
结果:
www.linuxidc.com/123.htm
- 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
结果:
123
- 从右边第几个字符开始,一直到结束。
echo ${var:0-7}
结果:
123.htm
字符串替换
string=abc12342341
echo ${string/23/bb} //abc1bb42341 替换一次
echo ${string//23/bb} //abc1bb4bb41 双斜杠替换所有匹配
echo ${string/#abc/bb} //bb12342341 #以什么开头来匹配
echo ${string/%41/bb} //abc123423bb %以什么结尾来匹配
test='c:/windows/boot.ini'
echo ${test///\} 结果 c:windows/boot.ini
echo ${test////\} 结果 c:windowsoot.ini
#${变量/查找/替换值} 一个“/”表示替换第一个,”//”表示替换所有,当查找中出现了:”/”请加转义符”/”表示。
字符串包含
- 利用grep查找
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi
- 利用字符串运算符
strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
echo "包含"
else
echo "不包含"
fi
- 利用通配符
A="helloworld"
B="low"
if [[ $A == *$B* ]]
then
echo "包含"
else
echo "不包含"
fi
字符串遍历
- 方式0
for i in 'hello world'
do
echo $i
done
结果:
root@centos7-132:[/root]sh test_str.sh
hello world
- 方式1
str='hello world'
for i in $str
do
echo $i
done
结果:
hello
world
- 方式2
str="hello world"
for i in `seq ${#str}`
do
echo ${str:$i-1:1}
done
结果:
h
e
l
l
o
w
o
r
l
d
- 方式3
echo "hello world" | awk -F '' '{for (i=1;i<=NF;i++) {print $i}}'
结果:
h
e
l
l
o
w
o
r
l
d
- 方式4
data='hello world'
for i in `seq ${#data}`
do
echo ${data:$i-1:1}
done
结果:
h
e
l
l
o
w
o
r
l
d