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

[root@www 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. $@

用途:代表所有的位置参数,但$@代表各位置参数组成的串行。

如:test.sh ABC 123 xyz,则$@的内容为"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. 检查邮件时,$_的值为邮件文件名。