变量的扩展应用
学习目标
要求进一步熟悉Shell变量的赋值控制,主要练习或验证下列内容:
三种引号对赋值的影响
使用read命令从键盘读取变量值
使用export发布全局变量
步骤
需要按照如下步骤进行。
步骤一:三种引号对变量赋值的影响
1)双引号的应用
使用双引号可以界定一个完整字符串。
[root@svr5 ~]# xx=Follow Heard
-bash: IT: command not found //未界定时赋值失败
[root@svr5 ~]# xx="Follow Heard" //界定后成功
[root@svr5 ~]# touch aa bb //创建了两个文件
[root@svr5 ~]# touch "aa bb" //创建了一个文件
[root@svr5 ~]# ls //查看结果
2)单引号的应用
界定一个完整的字符串,并且可以实现屏蔽特殊符号的功能。
[root@svr5 ~]# test=11
[root@svr5 ~]# echo "$test"
[root@svr5 ~]# echo '$test'
3)反撇号或$()的应用
使用反撇号或$()时,可以将命令执行的标准输出作为字符串存储,因此称为命令替换。
[root@svr5 ~]# tar -czf log-`date +%Y%m%d`.tar.gz /var/log
步骤二:使用read命令从键盘读取变量值
1)read基本用法
执行后从会等待并接受用户输入(无任何提示的情况),并赋值给变量str:
[root@svr5 ~]# read str
What's happen ? //随便输入一些文字,按Enter键提交
[root@svr5 ~]# echo $str //查看赋值结果
What's happen ?
为了不至于使用户不知所措、莫名其妙,推荐的做法是结合-p选项给出友好提示:
[root@svr5 ~]# read -p "请输入一个整数:" i
请输入一个整数:240
[root@svr5 ~]# echo $i
240
2)stty终端显示控制
将回显功能关闭(stty -echo),
将回显功能恢复(stty echo)。
可参考下列操作创建一个测试脚本:
[root@svr5 ~]# vim user.sh //创建一个测试脚本
#!/bin/bash
read -p "请输入用户名:" username //读取用户名
stty -echo //关闭回显
read -p "请输入密码:" passwd //读取密码
stty echo //恢复回显
echo "" //恢复回显后补一个空行
useradd "$username"
echo "$passwd" | passwd --stdin "$username"
[root@svr5 ~]# chmod +x user.sh //添加执行权限
执行测试脚本user.sh,验证效果:
[root@svr5 ~]# ./user.sh
请输入用户名: root //输入root,回车
请输入密码: //输入1234567(不会显示),回车
步骤三:使用export发布全局变量
默认情况下,自定义的变量为局部变量,只在当前Shell环境中有效,而在子Shell环境中无法直接使用。比如已定义的SCHOOL变量,当进入到sh或bash子Shell后,变量SCHOOL将处于未定义的状态:
[root@svr5 ~]# yy="Follow Heard"
[root@svr5 ~]# echo $yy
Follow Heard
[root@svr5 ~]# bash //开启bash子进程
[root@svr5 ~]# echo $yy //查看SCHOOL变量值无结果
[root@svr5 ~]# exit //返回原有Shell环境
exit
[root@svr5 ~]# echo $yy
若希望定义的变量能被子进程使用,可以使用export命令将其发布为全局变量。使用export发布时,只需指定变量名(可以有多个)即可,也可以通过export命令直接设置新的全局变量:
[root@svr5 ~]# export yy //发布已定义的变量
[root@svr5 ~]# export XX="1234" //发布新变量
验证刚刚发布的全局变量:
[root@svr5 ~]# bash //进入bash子Shell环境
[root@svr5 ~]# echo $yy //查看全局变量的值 .. ..
Follow Heard
[root@svr5 ~]# echo $XX
1234