1、定义方式
  • 直接赋值:值中不能包含空白字符
  • 单引号赋值:与双引号基本相同,不能解析变量引用。输入的是什么就输出什么
  • 双引号赋值:会解析双引号中的变量

    2、变量使用

    在定义的变量名之前加$即可

    1. zhangl@zhangl-PC:~/Desktop/shell$ DIR="$PATH"
    2. zhangl@zhangl-PC:~/Desktop/shell$ echo $DIR
    3. /usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin
    4. zhangl@zhangl-PC:~/Desktop/shell$ DATE="$(date)"
    5. zhangl@zhangl-PC:~/Desktop/shell$ echo $DATE
    6. 2021 05 25 星期二 15:02:32 CST

    * 有可能会出现无法确定变量名边界值的情况,所以建议使用 { } 来标识引用变量

    1. zhangl@zhangl-PC:~/Desktop/shell$ STRING="hello Shell"
    2. zhangl@zhangl-PC:~/Desktop/shell$ echo "test $STRINGtest"
    3. test
    4. zhangl@zhangl-PC:~/Desktop/shell$ echo "test ${STRING}test" # 使用 {} 来指定变量边界值,减少错误,方便识别变量
    5. test hello Shelltest
    6. zhangl@zhangl-PC:~/Desktop/shell$

    3、变量更新

    重新赋值即可实现变量的更新
    设置只读变量:

    1. zhangl@zhangl-PC:~/Desktop/shell$ readonly STRING="shell" # 设置变量为只读,在前面加readonly修饰
    2. zhangl@zhangl-PC:~/Desktop/shell$ echo "${STRING}"
    3. shell
    4. zhangl@zhangl-PC:~/Desktop/shell$ STRING="smile"
    5. bash: STRING:只读变量
    6. zhangl@zhangl-PC:~/Desktop/shell$

    4、变量删除

    使用unset删除变量。删除后不能再次使用;unset不能删除只读变量

    1. zhangl@zhangl-PC:~/Desktop/shell$ unset DIR

    5、命名规范
  • 只能使用英文字符、数字和下划线。不能以数字开头

  • 变量名中介不能用空格、标点符号
  • 不能使用base里面的关键字(help查看关键字)
  • 变量名大小写敏感

    6、赋值规范
  • 变量与值使用”=”连接,等号两边不能存在空白符合

  • 如果值中有空白䦹,使用单引号或双引号赋值方式
  • 可用”\”来转义变量,让其变为一般字符,类似单引号赋值:DIR=\$PATH的值为$PATH字符串
  • 如果变量值为指令,使用反引号或$()来引用 DATE= date 与 DATE=$(date) 等同
  • 在脚本中定义普通字符串变量时,应尽量把变量内容用双括号括起来: DIR=”/tmp”
  • 单纯数字的变量值,可以不加引号 NUM=10

    7、变量分类

    根据作用范围不同区分三类变量:

  • 局部变量:只在 Shell 脚本中定义的变量,或在 Shell 脚本函数中定义的变量,只能在 Shell 脚本中使用,或只能在 Shell 脚本函数中使用

  • 环境变量:环境变量为当前 Shell 中定义的临时变量,在当前 Shell 定义的变量可以传递给子 Shell,没有父子关系的 Shell 不能使用此变量,当然可以利用 export 将当前 Shell 的变量传递给其他终端的 Shell 中
  • 全局变量:全局变量为在当前 Shell 进程中运行的脚本都可以使用该变量,在 Shell 中默认定义的变量就是全局变量

内置变量:

  1. $Shell 默认 Shell
  2. $HOME 当前用户家目录
  3. $IFS 内部字段分隔符
  4. $LANG 默认语
  5. $PATH 默认可执行程序路径
  6. $PWD 当前目录
  7. $UID 当前用户 ID
  8. $USER 当前用户
  9. $HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间
  10. $RANDOM 随机生成一个 0 32767 的整数
  11. $HOSTNAME 主机名
  1. #!/bin/bash
  2. echo "登陆用户: ${USER}"
  3. echo "系统时间: $(date +"%Y-%m-%d %H:%M:%S")"
  4. echo "系统shell:${Shell}"
  5. echo "用户目录: ${HOME}"