shell 脚本--字符串

1.使用字符串的时候会使用到字符串的长度

有如下两种方法

                        语法                      说明
方法一               ${#string}                    无

方法二               expr length "$string"       string有空格,则必须加双引号

举例说明:

~$ var1="Hello World"
~$ len=${#var1}
~$ echo $len
11


#因 var1 中有空格,所以在使用$的时候一定要加上双引号 ""  无可个可以不适用双引号

~$ var1="Hello World"
~$ len=`expr length "$var1"` # 其中 ` 为tab建上方按键的 ` 并非 enter键左面的单引字符'
~$ echo $len
11


2.获取字串再字符串中的索引位置 index在shell脚本中使用的不多

语法     expr index $string $substring

 举例说明:

~$ var1="quicstart is a app"
~$ ind=`expr index "$var1" app`
~$ echo $ind
7

从上面的结果看,怎么会是7 不应该是十五吗? 那是因为shell 会将后面的 app 才分成单个字符 a . p .p  而且当第一个字符匹配到的时候就会返回,

3.获取子串的长度 match在shell脚本中使用的不多,

语法        expr match $string substr

 举例说明:

~$ var1="quicstart is a app"
~$ length_sub=`expr match "$var1" app`
~$ echo $length_sub
0

返回了是0 ,这是因为shell 匹配的时候必须从头开始匹配从中间开始匹配则不进行匹配.

可以查看如下案例:返回的位子是3  是因为从头开始匹配到了第三个

~$ length_sub=`expr match "$var1" qui`
~$ echo $length_sub
3

如下是整个 var1字符串的长度

~$ length_sub=`expr match "$var1" qui.*`
~$ echo $length_sub
18

4.抽取子串

                语法                                       说明
方法一   ${string:position}                      从string 中的position开始
方法二   ${string:position:length}               从position开始,匹配长度length
方法三   ${string: -position}#:和-号中间有空格      从右边开始匹配  
方法四   ${string:(-position)}                    从左边开始匹配
方法五   expr substr $string $postion $length    从position开始,匹配长度为length

 举例说明:

使用${string:position}  是从 position开始不包含当前位子 索引冲0开始

#提取不包含当前位子
~$ var1="quicstart is a app"
~$ var2=${var1:10}
~$ echo $var2
is a app

从position开始截取长度为7个字符

~$ var1="quicstart is a app"
~$ var2=${var1:10:7}
~$ echo $var2
is a ap

 从字符串的 倒数第10个开始 截取到结尾

~$ var1="quicstart is a app"
~$ var2=${var1: -10} #注意 : 和 -之间有空格
~$ echo $var2 
t is a app

 从字符串的 第10个开始 截取到结尾

~$ var1="quicstart is a app"
~$ var2=${var1:(-10)}
~$ echo $var2
t is a app

 从字符串的 第10个开始 向后截取的长度为3 使用expr substr 索引位子从1开始

~$ var1="quicstart is a app"
~$ var2=`expr substr "$var1" 10 3`
~$ echo $var2
is

练习案例:

#!/bin/bash
string="Bingdata process framework is Hadoop,Hadoop is an open source project"


function print_tips
{
    echo "***************************"
    echo "(1)打印字符串长度"
    echo "(2)删除字符串中所有的Hadoop"
    echo "(3)替换第一个Hadoop为Mapreduce"
    echo "(4)替换全面的Hadoop为Mapreduce"
    echo "***************************"
}

function len_of_string
{
   echo -e "字符串长度为:${#string}\n"

}
function del_hadoop
{
   echo -e "删除后的结果为:${string//Hadoop/}\n"
}
function rep_mapreduce_first
{
   echo -e "替换第一个的结果:${string/Hadoop/Mapreduce}\n"
}
function rep_mapreduce_all
{
   echo -e "全部替换的结果为:${string//Hadoop/Mapreduce}\n"
}

while true
do
	echo "[string=$string]"
	read -p "请输入你的选择(1|2|3|4|q|Q):" choice
	echo -e "\n"
	case $choice in
		1)
			len_of_string	
			;;
		2)
			del_hadoop
			;;
		3)
			rep_mapreduce_first
			;;
		4)
			rep_mapreduce_all
			;;
		q|Q)
			exit
			;;
		*)
			echo "输入选项错误,请重新输入!!!"
			;;
	esac
done

猜你喜欢

转载自blog.csdn.net/ChaoLi_Chen/article/details/102691515