004. 数组、别名

数组允许脚本利用索引将数据集合保存为独立的条目。Bash支持普通数组(使用整数作为数组索引)和关联数组(使用字符串作为数组索引)。Bash从4.0版本才开始支持关联数组。

当数据以数字顺序组织的时候,应该使用普通数组,例如一组连续的迭代。当数据以字符串组织的时候,关联数组就派上用场了,例如主机名称。本节会介绍普通数组和关联数组的用法。

1、数组与关联数组
a. 定义数组
  • 可以在单行中使用数值列表来定义一个数组:
array_var=(test1 test2 test3 test4)    #这些值将会存储在以0为起始索引的连续位置上
  • 可以将数组定义成一组“索引-值”:
array_var[0]="test1"
array_var[1]="test2"
array_var[2]="test3"
array_var[3]="test4"
array_var[4]="test5"
array_var[5]="test6"

echo ${array_var[0]}				# 输出 test1

index=5
echo ${array_var[$index]}		# 输出 test6

# 以列表形式打印出数组中的所有值:
echo ${array_var[*]}						# 输出test1 test2 test3 test4 test5 test6
b. 数组长度
# 打印数组长度(即数组中元素的个数):
echo ${#array_var[*]}
d. 列出数组索引

每一个数组元素都有对应的索引。普通数组和关联数组的索引类型不同:

  • 获取数组的索引列表:$ echo ${!array_var[*]}$ echo ${!array_var[@]}
  • 获取关联数组的索引列表:$ echo ${!array_var[*]}
d. 定义关联数组

在关联数组中,我们可以用任意的文本作为数组索引。首先,需要使用声明语句将一个变量定义为关联数组:declare -A ass_array

将元素添加到关联数组中:

  • 使用行内“索引-值”列表(此方法将变量的指针改变了,也就是指向了新的数组):ass_array=([index1]=val1 [index2]=val2)
  • 使用独立的“索引值”进行赋值(此方式不会改变变量的指针,只是往数组里追加元素)
ass_array[index1]=val1
ass_array[index2]=val2

例子:关联数组为水果定制价格

declare -A fruits_value
fruits_value=([apple]='100 dollars' [orange]='150 dollars')

echo "Apple costs ${fruits_value[apple]}" # 输出Apple costs 100 dollars
2、别名

别名就是一种便捷方式,可以为用户省去输入一长串命令序列的麻烦。下面我们会看到如何使用alias命令创建别名。

a. 创建别名

语法:alias new_command='command sequence'

# 为apt-get install 创建了一个别名
alias install='sudo apt-get install'

alias命令的效果只是暂时的。一旦关闭当前终端,所有设置过的别名就失效了。为了使别名在所有的shell中都可用,可以将其定义放入~/.bashrc文件中。每当一个新的交互式shell进程生成时,都会执行 ~/.bashrc中的命令。

echo 'alias cmd="command seq"' >> ~/.bashrc

如果需要删除别名,只需将其对应的定义(如果有的话)从~/.bashrc中删除,或者使用unalias命令。

注意:创建别名时,如果已经有同名的别名存在,那么原有的别名设置将被新的设置取代。

b. 别名转义

如果身份为特权用户,别名也会造成安全问题。为了避免对系统造成危害,你应该将命令转义。

创建一个和原生命令同名的别名很容易,你不应该以特权用户的身份运行别名化的命令。我们可以转义要使用的命令,忽略当前定义的别名:\command

字符\可以转义命令,从而执行原本的命令。在不可信环境下执行特权命令时,在命令前加上\来忽略可能存在的别名总是一种良好的安全实践。这是因为攻击者可能已经将一些别有用心的命令利用别名伪装成了特权命令,借此来盗取用户输入的重要信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值