第四部分_Shell脚本数组和其他变量


数组定义

㈠ 数组分类

  • 普通数组:只能使用整数作为数组索引(元素的下标)
  • 关联数组:可以使用字符串作为数组索引(元素的下标)

㈡ 普通数组定义

  • 可以切片

  • 一次赋予一个值

#数组名[索引下标]=值
array[0]=v1
array[1]=v2
array[2]=v3
array[3]=v4
  • 一次赋予多个值
#数组名=(值1 值2 值3 ...)
array=(var1 var2 var3 var4)

array1=(`cat /etc/passwd`)			#将文件中每一行赋值给array1数组
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 ${array1[*]}
echo ${!array[@]}    	#获取数组元素的索引下标
echo ${array[@]:1:2}    #访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素

#查看普通数组信息:
[root@MissHou ~]declare -a

㈣ 关联数组定义

  • 不能切片

①首先声明关联数组

declare -A asso_array1
declare -A asso_array2
declare -A asso_array3

② 数组赋值

  • 一次赋一个值
#数组名[索引or下标]=变量值
asso_array1[linux]=one
asso_array1[java]=two
asso_array1[php]=three
  • 一次赋多个值
asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")
  • 查看关联数组
# declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou" )'
  • 获取关联数组值
# echo ${asso_array1[linux]}
one
# echo ${asso_array1[php]}
three
# echo ${asso_array1[*]}
three two one
# echo ${!asso_array1[*]}
php java linux
# echo ${#asso_array1[*]}
3
# echo ${#asso_array2[*]}
4
# echo ${!asso_array2[*]}
name3 name2 name1 name4
  • 其他定义方式
[root@MissHou shell05]# declare -A books
[root@MissHou shell05]# let books[linux]++
[root@MissHou shell05]# declare -A|grep books
declare -A books='([linux]="1" )'
[root@MissHou shell05]# let books[linux]++
[root@MissHou shell05]# declare -A|grep books
declare -A books='([linux]="2" )'

其他变量定义

  • 取出一个目录下的目录和文件:dirnamebasename
# A=/root/Desktop/shell/mem.txt 
# echo $A
/root/Desktop/shell/mem.txt
# dirname $A   取出目录
/root/Desktop/shell
# basename $A  取出文件
mem.txt
  • 变量”内容”的删除和替换
#一个“%”代表从右往左去掉一个/key/
#两个“%%”代表从右往左最大去掉/key/
#一个“#”代表从左往右去掉一个/key/
#两个“##”代表从左往右最大去掉/key/

#举例说明:
url=www.taobao.com
echo ${#url}		     #获取变量的长度
echo ${url#*.}			 #输出taobao.com
echo ${url##*.}			 #输出com
echo ${url%.*}			 #www.taobao
echo ${url%%.*}			 #输出www
  • 以下了解,自己完成
 #替换:/ 和 //
 1015  echo ${url/ao/AO}	#替换第一个ao
 1017  echo ${url//ao/AO}   #贪婪替换,替换全部ao
 
 #替代: - 和 :-  +和:+
 1019  echo ${abc-123}
 1020  abc=hello
 1021  echo ${abc-444}
 1022  echo $abc
 1024  abc=
 1025  echo ${abc-222}

#${变量名-新的变量值} 或者 ${变量名=新的变量值}
#变量没有被赋值:会使用“新的变量值“ 替代
#变量有被赋值(包括空值): 不会被替代

 1062  echo ${ABC:-123}
 1063  ABC=HELLO
 1064  echo ${ABC:-123}
 1065  ABC=
 1066  echo ${ABC:-123}

#${变量名:-新的变量值} 或者 ${变量名:=新的变量值}
#变量没有被赋值或者赋空值:会使用“新的变量值“ 替代
#变量有被赋值: 不会被替代

 1116  echo ${abc=123}
 1118  echo ${abc:=123}

[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc:+123}

[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc:+123}
123
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc:+123}

#${变量名+新的变量值}
#变量没有被赋值或者赋空值:不会使用“新的变量值“ 替代
#变量有被赋值: 会被替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc+123}

[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc+123}
123
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc+123}
123
#${变量名:+新的变量值}
#变量没有被赋值:不会使用“新的变量值“ 替代
#变量有被赋值(包括空值): 会被替代

[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc?123}
-bash: abc: 123

[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc?123}
hello
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc?123}

#${变量名?新的变量值}
#变量没有被赋值:提示错误信息
#变量被赋值(包括空值):不会使用“新的变量值“ 替代

[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc:?123}
-bash: abc: 123
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc:?123}
hello
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc:?123}
-bash: abc: 123

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

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

原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/244521.html

(0)
上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐

发表回复

登录后才能评论