Shell学习--Shell变量与Shell数组

一、普通变量

1.定义变量时直接赋值,不需要 $ 等特殊符号

name="Tom"

  注:变量名和等号之间不能有空格

2.使用一个定义过的变量,只要在变量名前面加 $ 符号即可。

  花括号是为了帮助解释器识别变量的边界,适当的时候可以不加,推荐都加。

name="Tom"
echo $name
echo ${name}

3.已定义的变量,可以被重新定义。

  第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)

name="Tom"
echo $name
name="Jack"
echo $name

4.使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

name="Tom"
readonly name
name="Jack"
#会报错

5.使用 unset 命令可以删除变量。

  变量被删除后不能再次使用,unset 命令不能删除只读变量。

name="Tom"
unset name
echo $name
#无输出

二、Shell 字符串

1.字符串可以用单引号,也可以用双引号,也可以不用引号。

  ①单引号:

str='this is a string'

  单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

  ②双引号:

name="Tom"
str="Hello, I am \"$name\"! \n"
echo -e $str

  输出结果:

Hello, I am "Tom"! 

  双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

2.拼接字符串

name="Tom"
# 使用双引号拼接
greeting="hello, "$name" !"
greeting_1="hello, ${name} !"
echo $greeting  $greeting_1

# 使用单引号拼接
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !'
echo $greeting_2  $greeting_3

  输出结果:

hello, Tom !  hello, Tom !
hello, Tom !  hello, ${name} !

 3.获取字符串长度

string="abcd"
echo ${#string}   # 输出 4

4.变量为数组时,${#string} 等价于 ${#string[0]}:

string="abcd"
echo ${#string[0]}   # 输出 4

5.提取子字符串

  以下实例从字符串第 2 个字符开始截取 2 个字符:

string="Tom is a great boy"
echo ${string:1:2} # 输出 om

6.查找子字符串

  查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):

string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

三、Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似于 C 语言,数组元素的下标由 0 开始编号。

1.在 Shell 中,用括号来表示数组

  数组元素用"空格"符号分割开。定义数组的一般形式为:

  数组名=(值1 值2 ... 值n),例如:

array=(val0 val1 val2 val3)

2.可以单独定义数组的各个分量,可以不使用连续的下标,而且下标的范围没有限制。

array[0]=val0
array[1]=val1
array[2]=val2

3.  读取数组元素值的一般格式是:

  ${数组名[下标]}

val0=${array[0]}

4.使用 @ 或 * 符号可以获取数组中的所有元素,例如:

echo ${array[@]}
# 或
echo ${array[*]}

  输出结果:

val0 val1 val2

5.获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数
length=${#array[@]}
# 或者
length=${#array[*]}
# 取得数组单个元素的长度
lengthn=${#array[n]}

四、关联数组

Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

1.关联数组使用 declare 命令来声明,语法格式如下:

declare -A array_name

   -A 选项就是用于声明一个关联数组,关联数组的键是唯一的。

  我们创建一个关联数组 site,并创建不同的键值:

declare -A site=(["google"]="www.google.com", ["runoob"]="www.runoob.com", ["taobao"]="www.taobao.com")

2.也可以先声明一个关联数组,然后再设置键和值:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

3.访问关联数组元素可以使用指定的键,格式如下:

array_name["index"]

  可以通过键来访问关联数组的元素:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo ${site["runoob"]}
# 输出 www.runoob.com

4.在数组前加一个感叹号 ! 可以获取数组的所有键,例如:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"

  输出的结果为:

数组的键为: google runoob taobao
数组的键为: google runoob taobao

五. 多行注释还可以使用以下格式:

:<

参考:

        ​​​​​https://www.runoob.com/linux/linux-shell-variable.html

        https://www.runoob.com/linux/linux-shell-array.html

你可能感兴趣的:(#,Shell学习,学习,shell)