linux shell命令之间接变量引用
间接变量引用
如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值
就称为间接变量引用。设有如下两个表达式:
variable1=variable2
variable2=value
间接引用是通赤variable1获得value的行为,有如下两种方式:
(1) eval tmpvar=\$variable1
(2) tmpvar=${!variable1}
vi indirect.sh
#!/bin/bash
variable1=variable2 #定义变量variable1变量,它的值为variable2
variable2=Hadoop #variable2又是一变量名,值为Hadoop
echo "variable1=$variable1" #直接引用variable1
eval tempvar=\$$variable1 #用第(1)种格式命令间接引用variable1
echo "tempvar=$tempvar"
#用第(2)种格式间接引用variable1
echo "Indirect ref variable1 is :${!variable1}"
vi indirectapp1.sh
#!/bin/bash
######################数据库表格数据######################
S01_name="Li Hao"
S01_dept=Computer
S01_phone=025-83481010
S01_rank=5
S02_name="Zhang Ju"
S02_dept=English
S02_phone=025-83466524
S02_rank=8
S03_name="Zhu Lin"
S03_dept=Physics
S03_phone=025-83680010
S03_rank=3
######################数据库表格数据######################
#设置三级Shell的提示符变量,改变select命令的提示符
PS3='Pls. select the number of student:'
#用select建立选择菜单,供用户选择学号
select stunum in "S01" "S02" "S03"
do
#将输入学号组合成名字,系名,电话和排名的变量名
name=${stunum}_name
dept=${stunum}_dept
phone=${stunum}_phone
rank=${stunum}_rank
#通过间接引用变量得到学生的信息
echo "BASIC INFORMATION OF NO.$stunum STUDENT:"
echo "NAME:${!name}"
echo "DEPARTMENT:${!dept}"
echo "PHONE:${!phone}"
echo "RANK:${!rank}"
break
done
执行./indirectapp1.sh
1) S01
2) S02
3) S03
Pls. select the number of student:1
BASIC INFORMATION OF NO.S01 STUDENT:
NAME:Li Hao
DEPARTMENT:Computer
PHONE:025-83481010
RANK:5
执行 ./indirectapp1.sh
1) S01
2) S02
3) S03
Pls. select the number of student:2
BASIC INFORMATION OF NO.S02 STUDENT:
NAME:Zhang Ju
DEPARTMENT:English
PHONE:025-83466524
RANK:8
执行 ./indirectapp1.sh
1) S01
2) S02
3) S03
Pls. select the number of student:3
BASIC INFORMATION OF NO.S03 STUDENT:
NAME:Zhu Lin
DEPARTMENT:Physics
PHONE:025-83680010
RANK:3