变量概述
变量是shell传递数据的一种方法,即用一个固定的字符串去表示不固定的值,便于后期引用
变量命名规范
命名要求:字母、数字、下划线组成,字母开头(不能以数字开头)
尽量具备一定含义,但不要和系统命令冲突;等号赋值,两边不能空格
#例
ip=192.168.1.1 #与系统命令冲突
HostName_IP=192.168.1.1 #推荐使用驼峰式命名
变量使用
a=34 #将固定字符a表示为34
echo $a #返回a
34 #返回的执行结果
name="zhangsan" #定义变量
age=19 #定义变量
score=90 #定义变量
id=1 #定义变量
info="ID:$id Name:$name Age:$age Score:$score" #在变量中引用变量
eccho $info #返回info
ID:1 Name:zhangsan Age:19 Score:90 #返回结果
time=$(date +%F) #变量中执行命令
echo $time #返回time
2023-07-25 #返回的执行结果
变量定义方式
-
用户自定义变量:人为定义变量
-
系统环境变量:系统操作环境相对自带的
-
位置参数变量:向脚本传递参数的变量
-
预定义变量:bash定义好的变量
-
变量名不能出现"-",有空格时需要用引号括起来
var=“hello word”
2.引用变量,$+变量名或者${变量名}
id=1 #定义变量
info="ID:$id" #引用id变量
name=zhangsan #定义name变量
echo "${name}_is" #引用name变量时后缀加_is
zhangsan_is #返回结果
例:
id=1
name=zhangsan
age=19
score=90
student="ID:${id}姓名:${name}年龄:${age}成绩:${score}"
echo $student
ID:1姓名:zhangsan年龄:19成绩:90
截取
ifconfig ens33|head -2|tail -1|awk '{print $2}' #截取ip
df -hT|head -7|tail -1|awk '{print $6}' #截取硬盘使用百分比
used *100 / buff/cache #内存占比公式定义为变量时双嵌套
mem=$((used *100 / buff/cache)) #计算
查看变量
set |grep ip
清除变量
unset ip
引用变量,双引号属于弱引用取变量的值,单引号属于强引用原封不动引用变量
echo "$var hello china" #需要引用变量值
echo '$var hello china' #只想引用变量名,不执行$特殊符号
echo "$var hello china \$SHELL" #部分变量执行,部分变量不执行
变量赋值
Ip=`ifconfig ens33 | grep "inet" |grep -v inet6 |awk '{print $2}'`
或
Ip=$(ifconfig ens33 | grep "inet" |grep -v inet6 |awk '{print $2}')
变量嵌套
aa=$(rpm -e $(rpm -qa|grep java)) #由里向外运行命令