一、普通变量
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
五. 多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
参考: