shell字符串相关操作

获取字符串长度

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

  1. #号截取,删除左边字符,保留右边字符。
echo ${var#*//}

结果:

www.linuxidc.com/123.htm
  1. ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}

结果:

123.htm
  1. %号截取,删除右边字符,保留左边字符
echo ${var%/*}

结果:

http://www.linuxidc.com
  1. %%号截取,删除右边字符,保留左边字符
echo ${var%%/*}

结果:

http:
  1. 从左边第几个字符开始,及字符的个数
echo ${var:0:5}

结果:

http:
  1. 从左边第几个字符开始,一直到结束。
echo ${var:7}

结果:

www.linuxidc.com/123.htm
  1. 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}

结果:

123
  1. 从右边第几个字符开始,一直到结束。
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:\windows\boot.ini  
  
#${变量/查找/替换值} 一个“/”表示替换第一个,”//”表示替换所有,当查找中出现了:”/”请加转义符”\/”表示。  

字符串包含

  1. 利用grep查找
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
    echo "包含"
else
    echo "不包含"
fi
  1. 利用字符串运算符
strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
    echo "包含"
else
    echo "不包含"
fi
  1. 利用通配符
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

读取字符串值

在这里插入图片描述

posted @ 2018-12-21 16:14  岳麓丹枫  阅读(106)  评论(0编辑  收藏  举报