本节关键字:Linux、Bash Shell、数组
相关指令:echo、declare
Bash Shell中数组分为:普通数组和关联数组。
只能使用整数作为数组索引(元素的下标)
基本语法1: 数组名[索引]=值
基本语法2: 数组名=(值1 值2 值3 …)
array[0]=v1
array[1]=v2
array[2]=v3
array[3]=v4
将文件中每一行赋值给array1数组
array1=(`cat /etc/passwd`)
array2=(`ls /root`)
array3=(harry amy jack "Miss Hou")
array4=(1 2 3 4 "hello world" [10]=linux)
基本语法: ${数组名[元素下标]}
# 例如
echo ${array[0]} # 获取数组里第一个元素
echo ${array[*]} # 获取数组里的所有元素
echo ${#array[*]} # 获取数组里所有元素个数
echo ${!array[@]} # 获取数组元素的索引下标
echo ${array[@]:1:2} # 访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素
declare -a # 查看普通数组信息
可以使用字符串作为数组索引(元素的下标)
基本语法: declare -A 关联数组名
# 例如,定义一个关联数组,名称为asso_arr
declare -A asso_arr
基本语法1: 关联数组名[索引或下标]=变量值
基本语法2: 关联数组名=([name1]=值1 [name2]=值2 …)
# 例如,给关联数组asso_arr赋值
asso_arr[linux]=one
asso_arr[c]=two
asso_arr[shell]=three
asso_arr=([linux]=jeck [c]=mary [shell]="Tian Di")
echo ${asso_arr[linux]}
one
echo ${asso_arr[c]}
two
echo ${asso_arr[*]}
three two one
echo ${!asso_arr[*]}
shell c linux
echo ${#asso_arr[*]}
3
# 查看关联数组:
declare -A asso_arr
$ A=/root/Desktop/shell/mem.txt
$ echo $A
/root/Desktop/shell/mem.txt
$ dirname $A
/root/Desktop/shell
$ basename $A
mem.txt
符号 | 说明 |
---|---|
% | 代表从右往左删除 |
%% | 代表从右往左去掉最多 |
# | 代表从左往右去掉删除 |
## | 代表从左往右去掉最多 |
$ url=www.taobao.com
$ echo ${#url} 获取变量的长度
$ echo ${url#*.}
$ echo ${url##*.}
$ echo ${url%.*}
$ echo ${url%%.*}
echo ${url/ao/AO} # 用AO代替ao(从左往右第一个)
echo ${url//ao/AO} # 贪婪替换(替代所有)
echo ${abc-123}
abc=hello
echo ${abc-444}
echo $abc
abc=
echo ${abc-222}
${变量名-新的变量值} 或者 ${变量名=新的变量值}
变量没有被赋值:会使用“新的变量值”替代
变量有被赋值(包括空值): 不会被替代
echo ${ABC:-123}
ABC=HELLO
echo ${ABC:-123}
ABC=
echo ${ABC:-123}
${变量名:-新的变量值} 或者 ${变量名:=新的变量值}
变量没有被赋值或者赋空值:会使用“新的变量值”替代
变量有被赋值: 不会被替代
echo ${abc=123}
echo ${abc:=123}
$ unset abc
$ echo ${abc:+123}
$ abc=hello
$ echo ${abc:+123}
123
$ abc=
$ echo ${abc:+123}
${变量名+新的变量值}
变量没有被赋值或者赋空值:不会使用“新的变量值”替代
变量有被赋值: 会被替代
$ unset abc
$ echo ${abc+123}
$ abc=hello
$ echo ${abc+123}
123
$ abc=
$ echo ${abc+123}
123
${变量名:+新的变量值}
变量没有被赋值:不会使用“新的变量值”替代
变量有被赋值(包括空值): 会被替代
$ unset abc
$ echo ${abc?123}
-bash: abc: 123
$ abc=hello
$ echo ${abc?123}
hello
$ abc=
$ echo ${abc?123}
${变量名?新的变量值}
变量没有被赋值:提示错误信息
变量被赋值(包括空值):不会使用“新的变量值”替代
$ unset abc
$ echo ${abc:?123}
-bash: abc: 123
$ abc=hello
$ echo ${abc:?123}
hello
$ abc=
$ echo ${abc:?123}
-bash: abc: 123
${变量名:?新的变量值}
变量没有被赋值或者赋空值时:提示错误信息
变量被赋值:不会使用“新的变量值”替代
说明:?主要是当变量没有赋值提示错误信息的,没有赋值功能