1、定义方式
- 直接赋值:值中不能包含空白字符
- 单引号赋值:与双引号基本相同,不能解析变量引用。输入的是什么就输出什么
-
2、变量使用
在定义的变量名之前加$即可
zhangl@zhangl-PC:~/Desktop/shell$ DIR="$PATH"zhangl@zhangl-PC:~/Desktop/shell$ echo $DIR/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/sbinzhangl@zhangl-PC:~/Desktop/shell$ DATE="$(date)"zhangl@zhangl-PC:~/Desktop/shell$ echo $DATE2021年 05月 25日 星期二 15:02:32 CST
* 有可能会出现无法确定变量名边界值的情况,所以建议使用 { } 来标识引用变量
zhangl@zhangl-PC:~/Desktop/shell$ STRING="hello Shell"zhangl@zhangl-PC:~/Desktop/shell$ echo "test $STRINGtest"testzhangl@zhangl-PC:~/Desktop/shell$ echo "test ${STRING}test" # 使用 {} 来指定变量边界值,减少错误,方便识别变量test hello Shelltestzhangl@zhangl-PC:~/Desktop/shell$
3、变量更新
重新赋值即可实现变量的更新
设置只读变量:zhangl@zhangl-PC:~/Desktop/shell$ readonly STRING="shell" # 设置变量为只读,在前面加readonly修饰zhangl@zhangl-PC:~/Desktop/shell$ echo "${STRING}"shellzhangl@zhangl-PC:~/Desktop/shell$ STRING="smile"bash: STRING:只读变量zhangl@zhangl-PC:~/Desktop/shell$
4、变量删除
使用unset删除变量。删除后不能再次使用;unset不能删除只读变量
zhangl@zhangl-PC:~/Desktop/shell$ unset DIR
5、命名规范
只能使用英文字符、数字和下划线。不能以数字开头
- 变量名中介不能用空格、标点符号
- 不能使用base里面的关键字(help查看关键字)
-
6、赋值规范
变量与值使用”=”连接,等号两边不能存在空白符合
- 如果值中有空白䦹,使用单引号或双引号赋值方式
- 可用”\”来转义变量,让其变为一般字符,类似单引号赋值:DIR=\$PATH的值为$PATH字符串
- 如果变量值为指令,使用反引号或$()来引用 DATE=
date与 DATE=$(date) 等同 - 在脚本中定义普通字符串变量时,应尽量把变量内容用双括号括起来: DIR=”/tmp”
-
7、变量分类
根据作用范围不同区分三类变量:
局部变量:只在 Shell 脚本中定义的变量,或在 Shell 脚本函数中定义的变量,只能在 Shell 脚本中使用,或只能在 Shell 脚本函数中使用
- 环境变量:环境变量为当前 Shell 中定义的临时变量,在当前 Shell 定义的变量可以传递给子 Shell,没有父子关系的 Shell 不能使用此变量,当然可以利用
export将当前 Shell 的变量传递给其他终端的 Shell 中 - 全局变量:全局变量为在当前 Shell 进程中运行的脚本都可以使用该变量,在 Shell 中默认定义的变量就是全局变量
内置变量:
$Shell 默认 Shell$HOME 当前用户家目录$IFS 内部字段分隔符$LANG 默认语$PATH 默认可执行程序路径$PWD 当前目录$UID 当前用户 ID$USER 当前用户$HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间$RANDOM 随机生成一个 0 至 32767 的整数$HOSTNAME 主机名
#!/bin/bashecho "登陆用户: ${USER}"echo "系统时间: $(date +"%Y-%m-%d %H:%M:%S")"echo "系统shell:${Shell}"echo "用户目录: ${HOME}"
