1.内部变量
variable_name | variable_value | instructions |
BASH | /bin/bash | bash二进制执行文件 |
BASH_VERSINFO[0] | 4 | 主版本号 |
BASH_VERSINFO[1] | 2 | 次版本号 |
BASH_VERSINFO[2] | 46 | 更新次数 |
BASH_VERSINFO[3] | 2 | 构建次数 |
BASH_VERSINFO[4] | release | 分发状态 |
BASH_VERSINFO[5] | x86_64-redhat-linux-gnu | 架构 |
BASH_VERSION | 4.2.46(2)-release | bash版本号 |
DIRSTACK | $PWD | 当前目录 |
FUNCNAME | 正在执行的函数的名字 | 可以放在函数里定位函数执行过程 |
GROUPS | 0 | 当前登录的用户所属组的组id号,root默认为0 |
HOME | /root | 当前登录的用户家目录 |
HOMENAME | 主机名 | 主机名 |
HOSTTYPE | x86_64 | 设备硬件类型 |
IFS | 内部域分隔,默认为空白,可以自定义设置 | Bash 在解释字符串时如何识别域,或者单词边界 |
LINENO | 记录其所在的行号 | 记录其所在shell脚本中的行号 |
MACHTYPE | 系统硬件架构 | 系统设备 |
IFS
IFS默认为空白(空格 TAB 新行),该默认值是可以更改的,下面是两个关于IFS的脚本
cat example1.sh
#!/bin/bash
test () {
for arg
do
echo "[$arg]"
done
}
var=" a b c "
test $var
pwd
bash example.sh
返回
[a]
[b]
[c]
/root/bashtest
cat example2.sh
#!/bin/bash
test () {
for arg
do
echo "[$arg]"
done
}
IFS=":"
var=":a::b:c:::"
test $var
pwd
bash examlpe2.sh
返回
[]
[a]
[]
[b]
[c]
[]
[]
/root/bashtest
再看下面这个脚本,通过其结果可以理解其IFS是如何工作的
cat ifs.sh
#!/bin/bash
echo
echo "IFS域内分隔符作用,其默认值为空白(空格、TAB以及换行),可以更改"
echo
echo "IFS=\" \""
echo "-----------"
var="a b c"
echo $var
for i in $var
do
echo "[$i]"
done
echo
echo "IFS=\":\""
echo "------------"
IFS=":"
var="a:b::c"
echo $var
for i in $var
do
echo "[$i]"
done
echo
echo "IFS=\" \""
echo "------------"
IFS=" "
var="a:b::c"
echo $var
for i in $var
do
echo "[$i]"
done
echo
echo "IFS=\":\""
echo "------------"
IFS=":"
var="a b c"
echo $var
for i in $var
do
echo "[$i]"
done
返回结果
从上面返回的结果来看,IFS定义了如何去分隔变量var值,其处理空白的方式与其他方式不一样,但如果将上面的语句echo $var改成echo "$var",看看结果会是如何
PWD
当前所在的工作目录
#!/bin/bash
### 清空目录##
E_WRONG=73
TargetDirectory=/root/tmp
cd $TargetDirectory
if [ "$PWD" != "$TargetDirectory" ];then
echo "Wrong Directory"
echo "In $TargetDirectory,rather than $PWD"
exit $E_WRONG
fi
rm -Rf *
rm -Rf .[A-Za-z0-9]*
echo "Done"
exit 0
REPLAY
REPLY是read命令结果保存的默认变量,但是当且仅当没有变量提供给read命令时,REPLY才保存最后一个read命令读入的值
#!/bin/bash
echo "what is your favorite vegetable"
read
echo "your favorite vegetavle is $REPLY"
echo "waht is your favorite fruit"
read fruit
echo "the \$REPLY is still is $REPLY"
echo "youur favorite fruit is $fruit"
echo
exit 0
what is your favorit vegetable
手动输入 haha
your favorite vegetavle is haha
手动输入 apple
the $REPLY is still vegetable
youur favorite fruit is apple