1. 变量
1.1 变量的分类
全局变量:所有的用户都可以使用,保存在 /etc/profile、/etc/bashrc文件中。在开机之后,用户登陆之前,把前面文件中的变量加载到内存中,等待用户使用。
本地变量:用户私有变量,只有本用户可以使用,保存在用户家目录下的 .bash_profile、.bashrc文件中。在用户登录成功之后才会加载到内存中。
用户自定义变量:由用户自定义,比如脚本中的变量。
1.2 定义变量
变量格式: 变量名=值 (注意:在shell编程中的变量名和等号之间不能有空格)
变量命名规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;
中间不能有空格,可以使用下划线(_);
不能使用标点符号;
不能使用bash里的关键字(可用help命令查看保留关键字);
建议变量名全部用大写,和命令区分开
定义全局变量 -- export
[root@haha ~]# export UNAME="xiaoming"
[root@haha ~]# echo $UNAME
xiaoming
这种方式设置的变量是一次性变量,系统重启后就会丢失。如果希望可以永久使用,可以将需要定义的变量写入变量文件中即可。
定义永久变量 -- 变量文件
定义全局的永久变量:vim /etc/profile,添加全局变量 export UNAME="xiaoming",重启配置文件生效 source /etc/profile
定义本地的永久变量:vim ~/.bash_profile,添加本地变量 UNAME="xiaoming",重启配置文件生效 source ~./bash_profile
定义普通变量 -- 变量赋值
[root@www ~]# UNAME="xiaoming"
[root@www ~]# SCHOOL=‘nanjing‘
[root@www ~]# AGE=25
[root@www ~]# SCORE=99
1.3 读取变量内容
读取方法: echo $变量名
[root@haha ~]# UNAME="xiaoming"
[root@haha ~]# echo $UNAME
xiaoming
1.4 取消变量 -- unset
unset取消不了永久变量,在重启之后又会恢复,除非在变量文件中删除。
[root@haha ~]# unset UNAME
[root@haha ~]#
[root@haha ~]# echo $UNAME
2. 数组
2.1 基本数组
基本数组,即数组索引从0开始,不允许用户自定义索引的数组。
1. 基本数组语法: 数组名称=(元素1 元素2 元素3 元...)
2. 基本数组查询: echo ${数组名称[index]}
3. 基本数组赋值:数组名[index]=元素值
4. 查看所有数组: declare -a
[root@haha ~]# NAME_ARRAY=(‘a‘ ‘b‘ ‘c‘ ‘d‘)
[root@haha ~]# declare -a
declare -a ARRAY1=‘([0]="a" [1]="b" [2]="c" [3]="d" [4]="e" [5]="f")‘
declare -a NAME_ARRAY=‘([0]="a" [1]="b" [2]="c" [3]="d")‘
...
5. 访问数组元素:
echo ${NAME_ARRAY[0]} # 访问数组第一个元素
echo ${NAME_ARRAY[@]} 或 echo ${NAME_ARRAY[*]} # 访问数组中的所有元素
echo ${#NAME_ARRAY[@]} # 统计数组的长度
echo ${!NAME_ARRAY[@]} # 获取数组的元素索引
echo ${NAME_ARRAY[@]:2} # 数组切片,从索引为2到结束的元素
echo ${NAME_ARRAY[@]:1:2} # 从索引为1开始获取两个元素
6. for循环遍历数组
pass
2.2 关联数组
关联索引,即允许用户自定义数组索引,使用起来更方便高效。
1. 关联数组语法:
# 声明一个关联数组变量
declare -A ASS_ARRAY
ASS_ARRAY=([index1]=‘元素1‘ [index2]=‘元素2‘ [index3]=‘元素3‘ [index]=...)
2. 关联数组查询:
[root@haha ~]# declare -A ASS_ARRAY
[root@haha ~]# ASS_ARRAY=([name]=‘xiaoming‘ [age]=25 [gender]=‘male‘)
[root@haha ~]# echo ${ASS_ARRAY[name]}
xiaoming
[root@haha ~]# echo ${ASS_ARRAY[gender]}
male
3. 访问关联数组元素的长度、索引、切片等方法同基本数组一样。
4. 关联数组赋值(同基本数组):关联数组[index]=元素
[root@haha ~]# ASS_ARRAY[score]=100 [root@haha ~]# echo ${ASS_ARRAY[score]} 100