架构师的成长之路初片-shell-1(变量)
三,变量
常量 固定不变的值
变量 以固定的名称存放有可能发生变化的值,可以提高脚本对
环境的适应力
1: 自定义变量,变量名称可以用大小写字母,数字,下划线,不能
使用特殊符号,不能以数字开头,等号两边不能有空格
基本格式: 变量名=变量的值
x=10 //定义变量,创建变量,给变量赋值
echo $x //调用变量
unset x //取消变量的定义
x= //将变量的值定义为空,效果同上
echo ${x}RMB //为变量添加大括号避免与后续内容发生混淆
1: 环境变量,由系统提前定义好,使用时直接调用
USER 当前用户名 UID 当前用户id号 HOME 当前用户家目录
SHELL 当前用户的解释器 HOSTNAME 主机名 PWD 当前位置
PS1 一级提示符 PS2 二级提示符 PATH 存储了系统中执行指令的所在目录
可用: echo $USER 来查看变量的值
############################################################################
3: 预定义变量与位置变量
$1 执行脚本后跟随的第一个位置参数
$2 执行脚本后跟随的第二个位置参数
$3 执行脚本后跟随的第三个位置参数
$* 所有位置参数
$# 所有位置参数的个数
$$ 随机的进程号
$? 判断上一条指令是否成功,0是成功,非0是失败
#####################################################################################
例子:
#!/bin/bash
useradd $1 //创建用户时调用第1个位置变量
echo $2 | passwd --stdin $1 //配置密码时调用第2个位置变量
执行脚本时,使用bash test06.sh xyz 123 即可创建xyz账户并配置密码123
env | grep HOST //env可以显示所有环境变量,通常可以配合grep过滤查询
xyz=8888
set | grep xyz= //set可以查看所有变量,可以配合grep过滤查询
---------------------------------------------------------------------------------
四:变量的扩展
1,引号与反撇号
"" 双引号 界定范围
touch "a b" //可以创建a空格b的文件
a=10
echo "$a" //可以调用变量
'' 单引号 界定范围 屏蔽特殊符号的功能
touch 'a b' //也可以创建a空格b的文件
echo '$a' //无法调用变量,$是调用变量的特殊符号,被单引号屏蔽
`` 反撇号 可以获得命令的执行结果,使用$( )可以得到相同效果
a=date //定义变量时如果使用命令则不会直接识别
a=`date` //使用反撇号可以将命令的执行结果赋值给变量
a=$(date) //效果同上
2:使用read指令,以交互式使用脚本
改良版:
#!/bin/bash
read -p "请输入用户名" u
useradd $u
stty -echo //屏蔽回显
read -p "请输入密码" p
stty echo //恢复回显
echo $p | passwd --stdin $u
3,使用export命令发布全局变量
局部变量 ,仅当前解释器进程中可以使用的变量
全局变量,解释器进程产生的子进程也可以使用的变量
a=10 //在父进程创建变量,子进程无法使用,默认情况下是
局部变量
export a //将已有的变量发布为全局效果,进入子进程后可以调
用该变量
export b=20 //发布一个新变量为全局效果
export -n a //取消变量的全局效果,恢复为局部变量
注意,测试时要在父进程创建变量,然后可以执行bash进入
子进程测试效果,如果要返回父进程要执行exit指令
-------------------------------------------------------------------
五,shell中的运算
加、减、乘、除、求模(取余数)
expr 可以运算并输出结果
1,expr 可以运算并输出结果
expr 1 + 1 //加法,注意,运算符号两边要有空格
expr 2 - 1 //减法
expr 2 \* 2 //乘法,使用转义符号\可以屏蔽之后一个字符的特殊含义
expr 4 / 2 //除法
expr 10 % 3 //10除以3取余数
[root@svr7 opt]# a=10
[root@svr7 opt]# b=20
[root@svr7 opt]# expr $a + $b //也支持变量的运算
30
[root@svr7 opt]# expr $a + 100
------------------------------------------------------------------------------------------------------------
练习题:
1,如何执行Shell脚本?
2 自定义Shell变量时,有哪些注意事项?
3 编写一个Shell脚本程序,用来报告当前用户的环境信息。
4 简述预定义变量$$、$?、$#、$*的作用。
5 编写一个Shell脚本程序,能够部署ftp服务,并开启ftp默认共享的目录权限。
6 简述单引号、双引号、反撇号在变量赋值操作中的特点。
------------------------------------------------------------------------------------------------------------------------