字符串
字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)。
字符串和变量一样也有三种方式
str1=hello
str2='Shell'
str3="Scirpt"
这个三种形式的区别
<1>由单引号’ '包围的字符串:
任何字符都会原样输出,在其中使用变量是无效的。
字符串中不能出现单引号,即使对单引号进行转义也不行。
<2> 由双引号" "包围的字符串:
如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
字符串中可以出现双引号,只要它被转义了就行。
<3> 不被引号包围的字符串
不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。
获取字符串长度
方法如下:
${#string_name}
示例:
#!/bin/bash
str="hello Shell Script"
echo $(#str)
运行结果:
[root@system ~]# ./test1.sh
18
字符串拼接
在 Shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接
#!/bin/bash
a="hello"
b="Shell script"
str1=$a$b #中间不能有空格
str2="$a $b" #如果被双引号包围,那么中间可以有空格
str3=$a"-"$b #中间可以出现别的字符串
str4="${a} haha ${b}++" #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
运行结果
[root@system ~]# ./test1.sh
helloShell script
hello Shell script
hello-Shell script
hello haha Shell script++
字符串截取
Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取。
格式 | 说明 |
---|---|
${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
${string#*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string%*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
${string%%*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
示例:
[root@system ~]# str="abcdefghigklmn"
[root@system ~]# echo ${str:1:4}
bcde
查找字符串位置
echo “*** index ***” 字符索引值,返回字符在字符串中第一次出现的索引值,此索引值从1开始;如果未找到则返回0
[root@system ~l]# str="hello world"
[root@system ~]# echo `expr index "$str" a`
0 #字符串中未找到字符a
[root@system ~]# echo `expr index "$str" e`
2
[root@system ~]# echo `expr index "$str" d`
11
expr命令
上例中expr命令用于计算数值与处理字符串
expr命令还可以用于:
数字运算
echo "*** + - * / % ***" #数字运算,最终返回计算结果。不过仅支持整数运算,如果使用浮点数将会报错,例如:
echo `expr 8 + 2` #10,数字加法
字符匹配
echo "*** : match ***" #字符匹配,其中第2个参数是正则表达式,并且会从第1个参数所代表的字符串中从头开始匹配,最终返回正确匹配的字符数;如果匹配失败,则返回0
echo `expr "$str" : "ing"` #0,无法匹配字符串的开头,所以匹配失败
echo `expr "$str" : "st"` #2,成功匹配字符串的前2个字符
获取字符串长度
echo "*** length ***" #字符串长度,返回字符串中所有字符的个数
echo `expr length "$str"` #17,返回字符串的长度
提取字符串
echo "*** substr ***" #提取子字符串,第2个参数是开始提取的索引值,第3个参数是提取子字符串的长度,最终返回所提取的子字符串
echo `expr substr "$str" 13 5` #line.,成功提取了最后一个单词和句点
echo `expr substr "$str" 1 6` #string,成功提取了第一个单词