2022-06-23-Shell系列03丨 shell字符串变量

一.格式介绍

1.目标

能够使用字符串的三种方式

掌握3种方式的区别

能够获取字符串的长度

2.介绍

字符串(string) 就是一系列字符的组合,是shell编程中最常用的数据类型之一。

3.字符串3种格式

  • 单引号方式 e.g. var1 = ‘abc’
  • 双引号方式,推荐 e.g. var1 = “abc”
  • 不用引号方式 e.g. var1 = abc

4.3种格式的区别

1.使用单引号’‘的字符串:

任何字符都会原样输出,在拼接字符串中使用变量是无效的。

var1 = abc
var2 = '${var1} hello'
echo $var2    
# ${var1} hello

2.使用双引号”“的字符串:

如果包含变量,那么该变量会被解析得到值,而不是原样输出。

字符串中还可以出现双引号的子字符串,但是需要转义。

var1 = abc
var3 = "${var1} hello"
echo $var3
# abc hello 
echo "hello \"${var1}\""
# hello "abc"

3.不被引号包围的字符串

不被引号包围的字符串中出现变量也会被解析,这点和双引号的用法一样。

字符串中不能出现空格,否则空格后边的字符串会作为其他命令解析。

var1 = abc
var4 = ${var1}hello
echo $var4
# abchello 
var5 = ${var1} hello
echo $var5
# bash:hello: 未找到命令

5.获取字符串长度

语法:${#字符串变量名}

var1 = abc
echo ${#var1}
# 3

二.拼接

1.目标

掌握shell字符串拼接

2.字符串拼接方式

  • 无符号拼接
  • 双引号拼接
  • 混合拼接

2.1 无符号拼接

var1 = abc
var2 = "hello world"
var3 = ${var1}${var2}
echo $var3
# abchello world

2.2 双引号拼接(推荐)

var1 = abc
var2 = "hello world"
var3 = "${var1}${var2}"
echo $var3
# abchello world

2.3 混合拼接

var1 = abc
var2 = "hello world"
var3 = ${var1}"&"${var2}
echo $var3
# abc&hello world

三.字符串截取

1.目标

掌握字符串截取的常用格式

2.语法

20221220223526

var1 = "welcome to world"
# 从左侧第0个开始,截取2个字符
echo ${var1:0:2}
# we

# 从左侧第11个开始,截取后边全部字符
echo ${var1:11}
# world

# 从右侧第5个开始,截取后边2个字符
echo ${var1:0-5:2}
# wo

# 截取从左侧第一次出现的字符l右边的所有字符
echo ${var1#*l}
# come to world

# 截取从左侧最后一次出现字符e右边的所有字符
echo ${var1##*e}
# to world

# 截取从右侧第一次出现的字符e左边的所有字符
echo ${var1%e*}
# welcom

# 截取从右侧最后一次出现的字符e左边的所有字符
echo ${var1%%e*}
# w

四.shell索引数组变量:定义-获取-拼接-删除

1.目标

  • 能够定义shell数组
  • 能够获取shell数组数据
  • 能够进行shell数组的拼接,删除

2.介绍

shell支持数组(Array),数组是若干数据的集合,其中的每一份数据都称为数组的元素。

注意:Bash Shell 只支持一维数组,不支持多维数组

3.数组的定义

在shell中,用括号()来表示数组,数组元素中间用空格来分隔,语法为:

array_name=(item1 item2 ...)   # 方式1

array_name=([下标1]=item1 [下标2]=item2 ...)  # 方式2
注意:赋值号 = 两边不能有空格

4.演示

nums=(29 100 "www.baidu.com")
arr[6]=100
arr2=([0]=1 [3]="abc")

5.数组的获取

  • 通过下标获取元素值,index从0开始
${arr[index]}

注意使用 { }

  • 获取值同时赋值给其他变量
item=${arr[index]}
  • 使用 @ 或 * 可以获取数组中的所有元素
${arr[@]}
${arr[*]}
  • 获取数组的长度或个数
${#arr[@]}
${#arr[*]}
  • 获取数组指定元素的字符长度
${#arr[索引]}

6.数组的拼接

6.1 介绍

shell数组拼接(数组合并),就是将两个数组连接成一个数组

6.2 语法

使用 @ 和 * 获取数组所有元素之后进行拼接

array_new=(${array1[@]} ${array2[@]} ...)
array_new=(${array1[*]} ${array2[*]} ...)

6.3 演示

nums1=(29 22)
nums2=("ff" "cc")
nums3=(${nums1[*]} ${nums2[*]})
echo ${nums3[*]}
# 29 22 ff cc

7.数组的删除

7.1 介绍

删除数组指定元素数据和删除整个数组数据

7.2 语法

  • 删除数组指定元素数据
unset array_name[index]
  • 删除整个数组
unset array_name

7.3 演示

nums=(29 22 ff cc)
unset nums[1]
echo ${nums[*]}
# 29 ff cc

unset nums
echo ${nums[*]}
# 为空