Bash默认建立了许多内置变量,以下介绍些这类变量。
1. BASH
用途:显示bash的完整路径名。通常是:/bin/bash或/usr/local/bin/bash。
用例:echo $BASH
2. BASH_VERSION
用途:bash的版本。
用例:echo $BASH
4执行结果:4.1.2(1)-release
3. FUNCNAME
用途:在函数式执行期,此变量内容即为函数式的名称。
用例:
function show_name() {
echo $FUNCNAME
echo “今个儿是$1,你$2大大,来自$3”
}
4执行结果:显示函数式名称show_name。
4. HISTCMD
用途:当前指令执行完后,它在历史指令中的排列编号(指定给下一个指令用的历史命令编号)。
用例:echo $HISTCMD
4执行结果:1051
5. HISTCONTROL
用途:控制指令是否存入历史脚本文件中。
用法:HISTCONTROL有3个可能的设定值:
ignorespace: 凡是指令开头有空格符的,不存入历史脚本文件中。
ignoredups: 连续重复的指令,只存一个。
ignoreboth: 结合前两者的功能。
6. HISTFILE
用途:设定历史脚本文件的路径文件名。通常是在: 家目录/.bash_history
用例:echo $HISTFILE
4执行结果:/root/.bash_history
7. HISTFILESIZE
用途:设定历史脚本文件存储指令的最大行数。
用例:echo $HISTFILESIZE
4执行结果:1000
8. HISTIGNORE
用途:不存入历史脚本文件的指令样式,以 : 隔开。
用例:echo HISTGNORE=ls:cd:type
9. HOME
用途:设定用户的家目录位置。通常,root的家目录在/root,一般用户的家目录在/home/账号。替换~的结果,就是HOME变量值。
10. HOSTNAME
用途:显示主机名。
用例:echo $HOSTNAME
4执行结果:www.contoso.com
11. HOSTTYPE
用途:显示主机形态。
用例:echo $HOSTTYPE
4执行结果:x86_64
12. IFS
用途:定义字段分隔字符。默认值为:空格符、tab字符、换行字符(newline)。
用例1
[[email protected] lab]# cat ifs1.sh
#!/bin/bash
#
CHK="t1 t2 t3 t4"
for i in $CHK; do
echo $i
done
4执行结果:
t1
t2
t3
t4
由于$IFS的内容之一是空格符,所以,可把$CHK拆成4个部分(称为字段),分别交由echo $i显示出来。
用例2
PL是密码文件/etc/passwd中的一行,现要把该行各字段分析出来。
#!/bin/bash
#
PL="root:x:0:0:root:/root:/bin/bash"
# 重新定义IFS,要以‘:‘为分隔符
IFS=‘:‘
# j代表第几列
j=0
# 以循环分析各字段
for i in $PL; do
j=$((j+1))
echo 第$j 个字段是 $i
done
4执行结果:
第1 个字段是 root
第2 个字段是 x
第3 个字段是 0
第4 个字段是 0
第5 个字段是 root
第6 个字段是 /root
第7 个字段是 /bin/bash
13. MACHTYPE
用途:描述主机形态的GNU格式:cpu-公司-系统。
用例:echo $MACHTYPE
4执行结果:
x86_64-redhat-linux-gnu
14. MAIL
用途:显示当前用户邮件目录。
用例:echo $MAIL
4执行结果:
/var/spool/mail/root
15. MAILCHECK
用途:每隔多久就检查一次邮件。通常默认是60秒。
用例:echo $MAILCHECK
4执行结果:60
16. PATH
用途:命令的搜寻路径。
用法:如果要自行添加搜寻路径,一般的做法如下:
export PATH=/lab/tmp:$PATH
这样可以在PATH增加路径/lab/tmp
17. PPID
用途:父进程的进程编号。
用例:echo $PPID
18. RANDOM
用途:随机函数。
此变量值,随机出现整数,范围为0-32767。不过,虽然说是随机,但并不是真正的随机,因为每次得到的随机数都一样。为此,在使用RANDOM变量前,请随意设定一个数字给RANDOM,当做随机数种子,这样才不会每次产生的随机数其顺序都一样。
用例:
RANDOM=$$ #使用bash shell的进程编号当做随机数种子
echo $RANDOM
19. REPLY
用途:select和read没有设定读取变量时,默认的变量名称为REPLY。
20. SHLVL
用途:子shell的层级数。
21. $1~$n
用途:位置参数。
传入程序或函数式的参数,第一个参数$1,第二参数$2,其他类推。
请注意,若位置参数n超过9以上,则要用${n}来表示。
$0代表执行程序的名称。
22. $*
用途:代表所有的位置参数,并且视为一个字符串。
如:test.sh ABC 123 xyz,则$*的内容为字符串“ABC 123 xyz”
23. [email protected]
用途:代表所有的位置参数,但[email protected]代表各位置参数组成的串行。
如:test.sh ABC 123 xyz,则[email protected]的内容为"ABC"、"123"、" xyz”这3个字符串。
24. $#
用途:位置参数的个数。
如:test.sh ABC 123 xyz,有3个参数,$#的值为3。
25. $?
用途:上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。
26. $$
用途:目前bash shell的进程编号。
27. $_
用途:
a. script执行时,bash的绝对路径。
b. 上一个命令执行时,最后一个位置参数,如上一个命令是:test.sh ABC 123 xyz,则$_的值为’xyz’。
c. 检查邮件时,$_的值为邮件文件名。