shell语法基础

1. 变量

 1.1 变量的分类

  全局变量:所有的用户都可以使用,保存在 /etc/profile、/etc/bashrc文件中。在开机之后,用户登陆之前,把前面文件中的变量加载到内存中,等待用户使用。

  本地变量:用户私有变量,只有本用户可以使用,保存在用户家目录下的 .bash_profile、.bashrc文件中。在用户登录成功之后才会加载到内存中。

  用户自定义变量:由用户自定义,比如脚本中的变量。

 1.2 定义变量

  变量格式: 变量名=值 (注意:在shell编程中的变量名和等号之间不能有空格)

  变量命名规则:

    命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;
    中间不能有空格,可以使用下划线(_);
    不能使用标点符号;
    不能使用bash里的关键字(可用help命令查看保留关键字);
    建议变量名全部用大写,和命令区分开

  定义全局变量 -- export

[ ~]# export UNAME="xiaoming"
[ ~]# echo $UNAME
xiaoming

  这种方式设置的变量是一次性变量,系统重启后就会丢失。如果希望可以永久使用,可以将需要定义的变量写入变量文件中即可。

  定义永久变量 -- 变量文件

定义全局的永久变量:vim /etc/profile,添加全局变量 export UNAME="xiaoming",重启配置文件生效 source /etc/profile
定义本地的永久变量:vim ~/.bash_profile,添加本地变量 UNAME="xiaoming",重启配置文件生效 source ~./bash_profile

  定义普通变量 -- 变量赋值

[ ~]# UNAME="xiaoming"
[ ~]# SCHOOL=‘nanjing‘
[ ~]# AGE=25
[ ~]# SCORE=99

 1.3 读取变量内容

  读取方法: echo $变量名

[ ~]# UNAME="xiaoming"
[ ~]# echo $UNAME
xiaoming

 1.4 取消变量 -- unset

  unset取消不了永久变量,在重启之后又会恢复,除非在变量文件中删除。

[ ~]# unset UNAME
[ ~]# 
[ ~]# echo $UNAME

2. 数组

 2.1 基本数组

  基本数组,即数组索引从0开始,不允许用户自定义索引的数组。

  1. 基本数组语法: 数组名称=(元素1 元素2 元素3 元...)

  2. 基本数组查询: echo ${数组名称[index]}

  3. 基本数组赋值:数组名[index]=元素值

  4. 查看所有数组: declare -a

[ ~]# NAME_ARRAY=(‘a‘ ‘b‘ ‘c‘ ‘d‘)
[ ~]# 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_ARRAYASS_ARRAY=([index1]=‘元素1‘ [index2]=‘元素2‘ [index3]=‘元素3‘ [index]=...)

  2. 关联数组查询:

[ ~]# declare -A ASS_ARRAY
[ ~]# ASS_ARRAY=([name]=‘xiaoming‘ [age]=25 [gender]=‘male‘)
[ ~]# echo ${ASS_ARRAY[name]}
xiaoming
[ ~]# echo ${ASS_ARRAY[gender]}
male

  3. 访问关联数组元素的长度、索引、切片等方法同基本数组一样。

  4. 关联数组赋值(同基本数组):关联数组[index]=元素

[ ~]# ASS_ARRAY[score]=100
[ ~]# echo ${ASS_ARRAY[score]}
100

相关推荐