BASH SHELL中变量分为

1、本地变量(局部变量):仅仅对当前shell进程有效

2、环境变量(全局变量):不仅对当前shell进程有效,对子进程也有效

3、位置变量:类似$1 $2 $@ 表明变量位置的

4、特殊变量:类似$$ $?代表一些特别意义的



变量的显示:echo 变量名称

wKioL1NKmwjDOJM7AAAzAKWzoAI625.jpg

如图显示变量Name Billy



变量的取消:unset 变量名称

wKiom1NKm2fiVAtLAAAxurXFe6M079.jpg

取消变量Name变量不显示了




查看环境变量:env(export,printenv)

wKioL1NKm1rRX1pyAAMT1uHGV84658.jpg


查看所有变量(包括环境变量和自定义变量):set

wKiom1NKm6vx7rEQAAFZ3KKz4ZM503.jpg


变量转换:export

Export 变量名称

将变量转换为环境变量


变量读取:read

-p:接提示符

-t:接等待的秒数


wKioL1NKm5-ROLHnAACsMg-nTbE723.jpg


通过图发现我们输入–t10 的时候过了10秒后没有输入进程停止了


变量声明:declare

-i:将后面的变量定义成整数类型

-a:将后面的变量定义成数组类型

-x:将后面的变量变成环境变量,用法和export一样

-r:将变量设置成readonly类型,既不可以更改内容,也不能重新设置






例一:让变量sum进行加法运算

wKiom1NKm97Qdw-WAABkJTs8I-8491.jpg

由于变量类型默认为字符串类型的,如果不指定变量类型,那么100+200+300是一个字符串而不是一个计算的式子。


例二:将sum设置为环境变量

wKioL1NKm8mxYSLIAAA9oFbn9FU516.jpg

例三:将sum变为只读属性,不可改动

wKiom1NKnAuS6C-XAAA9vPm0JdA416.jpg

例四:创建数组变量

wKioL1NKm_biu8bIAAB0CfDuk54813.jpg



变量的测试

判断一个变量是否存在

variable=${variable-default}

若变量已存在,则variable=variable

若变量不存在,则variable=default

wKioL1NKnA_Rr1dtAAB86h9GR7s750.jpg



变量的删除

echo ${path#/*local/bin:}中,#代表从前面开始向右删除,且仅删除最短的那个

wKiom1NKnFaCfBX4AABzh3uFQ9E950.jpg


echo ${path#/*:} echo ${path##/*:}

wKioL1NKnEDAH-tFAACKuI-mQWg912.jpg

#:从开头符合替换文字的“最短的”那一个

##:从开头符合替换文字的“最长的”那一个


wKiom1NKnI7jAEmwAACM78As4IQ852.jpg

%:从尾部符合替换文字的“最短的”那一个

%%:从尾部符合替换文字的“最长的”那一个


总结:

${变量#关键字}:若变量内容从头开始的数据符合关键字,则将符合的最短数据删除

${变量##关键字}:若变量内容从头开始的数据符合关键字,则将符合的最长数据删除

${变量%关键字}:若变量内容从尾开始的数据符合关键字,则将符合的最短数据删除

${变量%%关键字}:若变量内容从尾开始的数据符合关键字,则将符合的最长数据删除


变量的替换

例:将path变量中的sbin替换成大写SBIN

wKioL1NKnIizzVC9AABKyQHTTlo447.jpg

wKioL1NKnJ7hzWHHAABND121iXk915.jpg

总结:

${变量/旧字符串/新字符串}:                                                

若变量内容符合旧字符串,则第一个旧字符串被新字符串替换

${变量//旧字符串/新字符串}:

若变量内容符合旧字符串,则所有的旧字符串被新字符串替换