天天看點

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