天天看点

shell的内置变量

1.CDPATH

如果设置了CDPATH,cd一个目录时,首先查找CDPATH,如果CDPATH指明此目录,刚此目录成为当前工作目录

->pwd

/usr/local/mysql

->cd /root/

/root

->echo $CDPATH

/usr/local/

->cd mysql

2.EXINIT变量保存使用vi编辑器时的初始化选项,例如调用vi时要显示行号,命令为

EXINIT='set nu';export EXINIT

例如:

[root@localhost ~]# EXINIT='set nu';export EXINIT

[root@localhost ~]# vi aa.txt

~

"aa.txt" [New File]

3.HOME

HOME目录,通常定位于passwd文件的倒数第2列,用于保存用户自身文件,设置了HOME目录

可以简单使用cd命令进入它

[root@localhost ~]# HOME=/usr/local/;export HOME

[root@localhost root]# pwd

[root@localhost root]# cd

[root@localhost local]# pwd

/usr/local

4.IFS

IFS用作shell指定的缺省域分隔符.原理上讲域分隔符可以是任意字符,但缺省通常为空格,新行或

tab键.IFS在分隔文件或变量中各域时很有用.下面的例子将IFS设置为冒号,然后echo PATH变量

[root@localhost local]# echo $PATH

/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost local]# export IFS=:

/usr/lib/qt-3.3/bin /usr/kerberos/sbin /usr/kerberos/bin /usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin /root/bin

[root@localhost local]#

5.logname

此变量保存登录名,应该为缺省设置,但如果没有设置,可以使用下面命令完成

LOGNAME='whoami';export LOGNAME

6.MAIL

MAIL变量保存邮箱路径名,缺省为/var/spool/mail/<login name>.shell周期性检查新邮件,如果邮箱并

不在以上位置,可以用MAIL设置

MAIL=/usr/mail/root;export MAIL

7. MAINCHECK

MAIKCHECK缺省为每60s检查新邮件,但如果不想如此频繁检查新邮件,比如设为每2m,使用命令

MAILCHECK=120;export MAILCHECK

8.MAILPATH

如果有多个邮箱要用到MAILPATH,些变量设置将覆盖MAIL设置

MAILPATH=/var/spool/dave:/var/spool/admin;export MAILPATH

上面的例子中,MAIL检测邮箱dave和admin

9 PATH

PATH变量保存命令或脚本查找的目录顺序。

10 PS1

基本提示符包含shell提示符,缺省对超级用户为#,其他为$。可以使用任何符号作提示符

以下为两个例子

[root@localhost ~]# PS1="START TREK:";export PS1

START TREK:

11 PS2

PS2为附属提示符,缺省符号为>,PS2用于执行多行命令或超过一行的一个命令

12 SHELL

SHELL变量保存缺省SHELL,通常在/etc/passwd中已设置

13 TERMINFO

终端初始化变量保存终端配置文件的位置,通常在/usr/lib/terminfo或/usr/share/terminfo

14 TERM

TERM变量保存终端类型。设置TERM使应用获知终端对屏幕和键盘响应的控制序列类型

常用的有VT100,VT200,VT220-8等

15 TZ

时区变量保存时区值,只有系统管理员才可以更改些设置

SET命令在$HOME下的.profile文件中设置环境变量时,还有另一种方法导出这些变量。使用

set -a指明所有变量直接被导出,不要在/etc/profile中使用这种方法,最好只在自己的$HOME.profile

文件中使用

位置变量参数

如果要向一个sehll脚本传递作息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以

任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。参数从第一个开始,在第9个结束

每个访问参数前要加$符号。第一个参数为0,表示预留实际脚本名字。无论脚本是否有参数,些值均可用

[root@localhost ~]# sh param.sh Did You See The Full Moon

This is the script name : param.sh

This is the first parameter : Did

This is the first parameter : You

This is the first parameter : See

This is the first parameter : The

This is the first parameter : Full

This is the first parameter : Moon

This is the first parameter : 

脚本的内容为

[root@localhost ~]# cat param.sh 

#!/bin/bash

echo "This is the script name : $0"

echo "This is the first parameter : $1"

echo "This is the first parameter : $2"

echo "This is the first parameter : $3"

echo "This is the first parameter : $4"

echo "This is the first parameter : $5"

echo "This is the first parameter : $6"

echo "This is the first parameter : $7"

echo "This is the first parameter : $8"

echo "This is the first parameter : $9"

这里只传递了6个参数,7,8,9参数为空,正好预计的那样。

特定变量参数

既然已经知道了如何访问和使用shell脚本中的参数,多知道一点信息也是很有用的。有必要知道运行的

一些相关控制信息,这就是特定变量的由来。共有七个特定变量。见下表

##################################################################################

特定SHELL变量

$# 传递到脚本的参数个数

$* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个

$$ 脚本运行的当前进程ID号

$! 后台运行的最后一个进程的进程ID号

$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数

$- 显示shell使用的当前选项,与set命令功能相同

$? 显示最后命令的退出状态。0表示没有错误,其它任何值表明有错误

本文转自 gm100861 51CTO博客,原文链接:http://blog.51cto.com/gm100861/789367