Linux Shell程式設計(14)——內部變數

尹成發表於2014-09-30
內建變數
影響Bash指令碼行為的變數。


$BASH
Bash二進位制程式檔案的路徑
 bash$ echo $BASH
 /bin/bash


$BASH_ENV
該環境變數儲存一個Bash啟動檔案路徑,當啟動一個指令碼程式時會去讀該環境變數指定的檔案。


$BASH_SUBSHELL
一個指示子shell(subshell)等級的變數。它是Bash版本3新加入的。


$BASH_VERSINFO[n]
這個陣列含有6個元素,指示了安裝的Bash版本的資訊。它和$BASH_VERSION相似,但它們還是有一些小小的不同。


# Bash版本資訊:


for n in 0 1 2 3 4 5
do
  echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}"
done  


# BASH_VERSINFO[0] = 3                      # 主版本號.
# BASH_VERSINFO[1] = 00                     # 次版本號.
# BASH_VERSINFO[2] = 14                     # 補丁級.
# BASH_VERSINFO[3] = 1                      # 編譯版本.
# BASH_VERSINFO[4] = release                # 發行狀態.
# BASH_VERSINFO[5] = i386-redhat-linux-gnu  # 結構體系
                                            # (和變數$MACHTYPE相同).


$BASH_VERSION
安裝在系統裡的Bash版本


檢查$BASH_VERSION是檢測哪個shell在執行的好辦法。$SHELL變數不一定能給出正確的答案。


$DIRSTACK
在目錄堆疊裡面最頂端的值(它受pushd和popd的控制)


這個內建的變數和dirs命令相符,但dirs是給出整個目錄堆疊的內容。


$EDITOR
由指令碼呼叫的預設的編輯器,一般是vi或是emacs.


$EUID
有效使用者ID


當前使用者無論是什麼標識都會被認為是這個有效使用者ID,這可能依賴於su.



變數$UID不一定和$EUID相同。


$FUNCNAME
當前函式的名字


$GLOBIGNORE
由萬用字元(globbing)擴充套件的一列檔名模式。


$GROUPS
目前使用者所屬的組


它是當前使用者在/etc/passwd檔案中記錄的所屬的組列表(陣列)。


$HOME
使用者的家目錄,通常是/home/username 


$HOSTNAME
在系統啟動時由一個初始化指令碼中用hostname命令給系統指派一個名字。然而,gethostname()函式能設定Bash內部變數E$HOSTNAME。


$HOSTTYPE
機器型別


像$MACHTYPE一樣標識系統硬體。


$PPID
一個程式的$PPID變數儲存它的父程式的程式ID(pid)。 


用這個變數和pidof命令比較。


$PROMPT_COMMAND
這個變數在主提示符前($PS1顯示之前)執行它的值裡儲存的命令。


$PS1
這是主提示符(第一提示符),它能在命令列上看見。


$PS2


副提示符(第二提示符),它在期望有附加的輸入時能看見。它顯示像">"的提示。


$PS3
第三提示符。它在一個select迴圈裡顯示 


$PS4
第四提示符,它在用-x選項呼叫一個指令碼時的輸出的每一行開頭顯示。它通常顯示像"+"的提示。


$PWD
工作目錄(即你現在所處的目錄)


它類似於內建命令pwd。



例子:是root嗎?

#!/bin/bash

ROOT_UID=0   # Root的$UID為0.


if [ "$UID" -eq "$ROOT_UID" ]  # 真正的"root"才能經得住考驗
then
  echo "You are root."
else
  echo "You are just an ordinary user (but mom loves you just the same)."
fi

exit 0

# ============================================================= #
# 下面的程式碼不會執行,因為指令碼在上面已經退出了.

# 另外一種判斷是否是root使用者的方法:

ROOTUSER_NAME=root

username=`id -nu`              # 或者...   username=`whoami`
if [ "$username" = "$ROOTUSER_NAME" ]
then
  echo "Rooty, toot, toot. You are root."
else
  echo "You are just a regular fella."
fi


相關文章