Linux Shell 009-数组

Linux Shell 009-数组

本节关键字: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

其它变量

取出一个目录下的目录和文件:dirname命令和 basename命令
$ 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

${变量名:?新的变量值}
变量没有被赋值或者赋空值时:提示错误信息
变量被赋值:不会使用“新的变量值”替代

说明:?主要是当变量没有赋值提示错误信息的,没有赋值功能

你可能感兴趣的:(Linux,Shell脚本,linux,运维,bash,centos)