目录
一、变量基础
1.1 命名要求
二、变量的类型
2.1 自定义变量
2.2 系统预设变量
2.2.1环境变量
2.2.2 只读变量
2.2.3 位置变量
2.2.4 预定义变量
三、各种引号
四、read标准输入取值
五、变量的作用范围
六、总结
一、变量基础
保存将来会变化的数据,即使数据变化,直接调用变量即可,各种 Shell 环境中都使用到了“变量”的概念。Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强
1.1 命名要求
以固定的名称,存放可以能有变化的值
定义变量的格式:变量名=变量值
取消变量的格式:unnet 变量名
区分大小写
不能使程序中的保留字和内置变量:如:if, for,hostname
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
注意事项:
1.=号两边不能有空格
2.如果变量名已经存在则覆盖之前的变量值
查看变量
$变量名
${变量名} {}可以防止变量的歧义或者异常
二、变量的类型
常见 Shell 变量的类型包括:
自定义变量:由用户自己定义,修改和使用 系统预设变量: 环境变量:由系统维护,用于设置工作环境,通常大写PATH,UID,HOSTNAME 只读变量:只可以读取不可以更改 位置变量:通过命令行给脚本传递参数 预定义变量:Bash中内置的一类变量,可以调用,不能修改
2.1 自定义变量
可以把赋值的过程看成定义了一个指针,而$就是调用了这个指针
2.2 系统预设变量
2.2.1环境变量
存储在/etc/profile或者~/.bash_profile
命令env可以列出所有环境变量
常见环境变量:PATH、PWD、USER、UID、HOME、SHELL
[root@localhost data]# ls #当我们在 命令框输入ls命令时,系统去path中找有没有ls, #冒号将每个目录隔开,从这些目录中一次查找,找到就执行
2.2.2 只读变量
我们在定义shell变量时,默认定义的变量就是可以被修改的,我们还可以定义一个不能被修改的变量,即,使用 readonly 来定义变量
我们首先定义一个变量,接着,使用 readonly 来修饰该变量,表明该变量是只读的
无法使用 unset删除,最快方法重启
2.2.3 位置变量
存储脚本执行时的参数
使用$n表示,n为数字序列号
$1、$2、。。。${10}、${11} 两位数的数字需要用花括号
2.2.4 预定义变量
用来保存脚本程序的执行信息
直接使用这些变量
不能直接为这些变量赋值
变量名 | 含义 |
$0 | 当前所在进程或脚本名称 |
$# | 已加载的位置变量的个数 |
$$ | 当前运行进程的PID号 |
$? | 命令执行后的返回状态,0表示正常,非0表示异常 |
$@ | 所有位置参数的内容分成n份,每份作为一个独立的个体返回 |
$* | 表示所有位置参数的值看成一个整体返回 |
三、各种引号
双引号" ":允许扩展,以$引用其他变量
单引号' ':禁止扩展,即便$也视为普通字符
反引号` `:将命令的执行输出作为变量值,$()与反引号等效
四、read标准输入取值
read从键盘读入变量值完成赋值,类似Java中的 Scanner sc = new Scanner(System.in);
格式:read[ -p "提示信息" ] 变量名
参数:
-p 可以在屏幕显示提示信息
-t 可指定超时秒数
-s 设置是否在终端显示输入内容
#!/bin/bash read -p "请输入用户名:" name #谁来执行这个脚本,谁就给name赋值 read -s -p "请输入密码:" pass #-s 参数可以使密码不明文显示,更加安全 #谁来执行这个脚本,谁就给pass赋值 useradd $name echo "$pass" |passwd --stdin $name #如果变量赋值不加空格,这里加不加引号没区别 #加引号可以防止一些意外出错
五、变量的作用范围
局部变量:新定义的变量默认只在当前shell环境有效,无法在子shell环境中使用
全局变量:在当前shell和子shell环境中均有效
export x=11 #全局有效
再次试验,使用export就会全局生效
六、总结
变量
赋值 变量名=变量值
只读变量 readonly
环境变量 在任何bash环境都被识别 export 变量名=变量值