一、变量的定义
以固定名称存放,可能会变化的值
- 提高脚本对任务需求、运行环境变化的适应能力
- 方便在脚本中重复使用
变量名称规范:
- 变量名称不可以使用数字开头
- 变量名不可以为特殊字符
- 变量名可以为字母、数字、下划线
二、定义/赋值/查看/取消变量
1、定义/赋值变量
- 变量名 = 变量值
root@kylin:~# X=1 #定义变量X,赋值1
root@kylin:~# Value_1=Kylin #定义变量Value_1,赋值Kylin2、查看变量
- 引用变量值:$变量名
- 查看变量值:echo $变量名、echo ${变量名}
root@kylin:~# echo $X,$Value_1 #查看变量
1,Kylin
root@kylin:~# echo $Value_2.2 #未定义的变量无取值
.2
root@kylin:~# echo ${Value_1}.2 #变量名易混淆时,以{}界定
Kylin.23、取消变量
变量的失效:
- 退出定义变量的Shell环境时,变量会自动失效
- 也可手动取消:unset 变量名 .. ..
root@kylin:~# unset X
root@kylin:~# echo $X #发现为空白输出
三、变量的种类
1、Shell变量分类角度
1.存储类型
- 整数型、浮点型、双精度浮点型、字符型、......
- Shell脚本语言对存储类型要求较松散
2.使用类型
类型 说明 环境变量 变量名通常大写,由系统维护,用来设置工作环境,只有个别变量用户可以直接更改 位置变量 bash内置,存储脚本执行时的参数 预定义变量 bash内置,一类有特殊用途的变量,可以调用但是不能赋值或修改 自定义变量 用户自主设置、修改及使用 3.数组也是一个变量,是一个有点特殊的变量
- 存储多个数据的集合就是数组隔开;坐标0为开始
Variable=($(awk '{print $2}' /root/test)) #从文件中读取内容给数组
echo ${Varable[*]} #打印所有数组的元素
2、环境变量
描述 文件 / 命令 配置文件 /etc/profile ~/.bash_profile 列出所有的环境变量 命令:env 列出所有变量 命令:set 常见的环境变量 - PWD、PATH、USER、LOGNAME、UID
- SHELL、HOME、PS1、PS2、... ...
3、预定义变量
用来保存脚本程序的执行信息
- 直接使用这些变量
- 不能直接为这些变量赋值
变量名 含义 $0 当前所在的进程或脚本名 $$ 当前运行进程的PID号 $? 命令执行后的返回状态,0表示正常,1或其他值表示异常 $# 已加载的位置变量的个数 $* 所有位置变量的值 $= 统计行号 $@ 是传给脚本的所有参数的列表 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数
4、位置变量
root@kylin:~# cat /root/a.sh
存储脚本执行时的参数 - 使用$n表示,n为数字序列号 - $1、$2、...、${10}、${11}、...
#!/bin/bash
echo $1 $3 #查看第1,3个位置参数 root@kylin:~# /root/a.sh 1 a A
1 A
四、变量值及范围控制
1、扩展赋值操作
区分三种定界符:
双引号" ":允许扩展,以$引用其他变量,保留特殊符号含义 单引号' ':禁用扩展,即便$也视为普通字符 反引号``:将命令的执行输出作为变量值,$()与反引号等效 等于命令所输出的值
2、read标准输入取值
read从键盘读入变量完成赋值:
— 格式:read [ -p “提示信息”] 变量名 (red iname -> 等待输出值)
— -p可选,-t 可指定超时秒数
注意:没有空格,read将提示符和变量识别为一个整体
终端显示控制:
— stty -echo:关闭终端输出(无显示)
— stty echo:恢复终端输出(显示)
3、变量的作用范围
局部变量:
- 新定义的变量默认只在当前Shell环境中有效
- 无法在子Shell环境中使用
全局变量:
- 全局变量在当前的Shell及子Shell环境中均有效
- 使用export可将局部变量声明为全局变量
export 局部变量名[=变量值].. ..:为局部变量添加全局属性
export -n 全局变量名.. ..:取消指定变量的全局属性