变量定义
格式:变量名=变量值
注意:1、’‘="两边不能有空格
2、变量值,linux都会认为是字符串,如果有字符有空格,需要用双引号或单引号括起
3、变量值,双引号括起,会解释变量;而单引号不会,只会原样输出
eg:var="hello world"
变量调用
格式:$变量名 或者 ${变量名}
注意:1、如果变量名后还有其他字符串,需要将变量名用大括号{}括起来
eg:echo $var 输 出 hello world
echo ${var}_green 输出 hello world_green
提高:输出变量值的值,即将变量值作为下一个变量的名字(输出下一个变量的值)
abc_key="hello"
Informix=abc
temp=${Informix}_key
echo ${temp}
echo ${!temp}
export设置环境变量
格式:export 变量名=变量值
注意:export的效力仅及于该次登陆操作,如果希望长久有效,可以将其写在/etc/profile文件中(此文件是系统启动后自动加载的),或者将其写在/home/用户名/.bash_profile文件中(此文件是此用户登陆都自动加载的)。
命令:export 列出当前系统中的环境变量(包括临时的环境变量)
变量取消
格式:unset 变量名 eg:unset var
unset var= (表示变量存在,但其值是null)
变量扩展
测试变量是否为空
方法1、[ -n $变量名 ] 变量为空,返回true,否则为false
方法2、${#变量名} 获取变量值的长度,为0,变量为空
var=
if [ -n $var ];then
echo "var is null"
else
echo "var is not null"
fi
# 输出 :var is null
echo ${#var}
#输出 :0
取字符串切片
格式1:${变量名:位置起点}
解释:由指定的字符串位置开始,截取字符串到字符串结束的位置
格式2:${变量名:位置起点:截取字符串长度}
解释:由指定的字符串位置开始,截取指定长度的字符串
abc_key="hello"
Informix=abc
temp=${Informix}_key
echo ${temp}
echo ${!temp}
输出 :hello
计算字符串长度
格式1:${#变量名}
格式2:echo ${变量名} | wc -c 统计的是字节数比字符串长度多1(可能是结束符)
格式3:expr length "${变量名}"
# echo ${#var}
15
# echo ${var} | wc -c
16
# expr length "$var"
15
字符串替换
格式1:${变量/ 样式 / 替换的字符串} 替换第一个与样式匹配的,样式可以包含正则表达式(下面都可以)
格式2:${变量// 样式 / 替换的字符串} 替换全部匹配的
# var="da :: bai :: ni :: hao"
# echo $var
da :: bai :: ni :: hao
# echo ${var/::/_}
da _ bai :: ni :: hao
# echo ${var//::/_}
da _ bai _ ni _ hao
补充:
语法
用途
${变量 /# 样式 / 替换的字符串}
替换第一个,但是从变量值开头首字符开始匹配,不匹配,不替换
${变量 /% 样式 / 替换的字符串}
替换第一个,但是从变量值尾部尾字符开始匹配,不匹配,不替换
# echo ${var}
da :: bai :: ni :: hao
# echo ${var/#da/hh}
hh :: bai :: ni :: hao
# echo ${var/#::/hh}
删除字符串
格式1:${变量 / 样式/} 删除第一个与样式匹配
格式2:${变量 // 样式/} 删除全部匹配的
其实就是字符串替换搁置中替换后的字符串变为空。
语法
用途
${变量 /# 样式/}
删除第一个,但是从变量值开头首字符开始匹配,不匹配,不删除
${变量 /% 样式/}
删除第一个,但是从变量值尾部尾字符开始匹配,不匹配,不删除
# echo ${var}
da :: bai :: ni :: hao
# echo ${var/#::/}
da :: bai :: ni :: hao
# echo ${var/#da/}
:: bai :: ni :: hao
其他
语法
用途
${变量#样式}
与前面对比,删除最短的匹配,首字符不匹配就不删除了
${变量##样式}
与前面对比,删除最长的匹配,首字符不匹配就不删除了
${变量%样式}
与后面对比,删除最短的匹配,首字符不匹配就不删除了
${变量%%样式}
与后面对比,删除最短的匹配,首字符不匹配就不删除了
# var="/home/dxx/test/mypro"
# echo ${var#*/}
home/dxx/test/mypro
# echo ${var##*/}
mypro
# echo ${var#bai*/}
/home/dxx/test/mypro
提取指定变量名
格式:${!开头字符串@} 或者 ${!开头字符串*}
把所有一指定字符串开头的变量名列出
filename="ntupdate"
dir="adsf"
dir_file="12313"
echo ${!di@}
输出:dir dir_file
取命令参数
语法
解释
$0
命令名字
$1-$n
第一个到第n个的参数
$*
所有的位置参数
$#
位置参数的个数
$?
上一个命令执行的结果 0 成功,非0有误
$$
目前的进程编号
${@:起点}
由起点开始,取得后面的位置参数
${@:起点:个数}
由起点开始,取得后面指定个数的位置参数