bash腳本內(nèi)部變量

bash腳本內(nèi)部變量

$BASH

bash的程序文件的路徑,如/bin/bash

$BASH_ENV

該環(huán)境變量保存一個Bash啟動文件路徑冤寿,當啟動一個腳本程序時會去讀該環(huán)境變量指定的文件秕脓。

例如可以設(shè)置

export BASH_ENV=./testScript

這里testScript的內(nèi)容為

#!/bin/bash
echo $BASH_ENV
echo "Hello world!"

相當于我們每次運行一個bash腳本的時候都會去引用一下testScript這個文件零蓉。

運行的結(jié)果為:

Hello world!
./testScript

Hello world!
./testScript
相當于首先引用了一次testScript凑耻,打印出了前兩行澄港,然后執(zhí)行testScript骡苞,打印出了后兩行辽社。我們可以利用這個變量引入一個文件來設(shè)置一些別名费什,設(shè)置一些常量之類钾恢。

$BASH_SUBSHELL

一個指示子shell(subshell)等級的變量。它是Bash版本3新加入的鸳址。

例如運行一下腳本:

#!/bin/bash
echo $BASH_SUBSHELL
( echo $BASH_SUBSHELL )

輸出內(nèi)容為:

0

1

這里()用于使用子shell(subshell)來執(zhí)行命令瘩蚪。

根據(jù)這個變量可以判斷子shell等級,進行例如變量作用域判斷之類的操作稿黍。

$BASH_VERSINFO[n]

這個數(shù)組含有6個元素疹瘦,指示了安裝的Bash版本的信息。它和$BASH_VERSION相似巡球,但它們還是有一些小小的不同言沐。

# BASH_VERSINFO[0] = 3                      # 主版本號.
# BASH_VERSINFO[1] = 00                     # 次版本號.
# BASH_VERSINFO[2] = 14                     # 補丁級.
# BASH_VERSINFO[3] = 1                      # 編譯版本.
# BASH_VERSINFO[4] = release                # 發(fā)行狀態(tài).
# BASH_VERSINFO[5] = i386-redhat-linux-gnu  # 結(jié)構(gòu)體系

$BASH_VERSION

安裝在系統(tǒng)里的Bash版本

如運行

echo $BASH_VERSION

會得到

3.2.57(1)-release

$DIRSTACK

在目錄堆棧里面最頂端的值(它受pushdpopd的控制)

這個內(nèi)建的變量和dirs命令相符邓嘹,但dirs是給出整個目錄堆棧的內(nèi)容。

$EDITOR

由腳本調(diào)用的默認的編輯器险胰,一般是vi或是emacs汹押。通常是沒有設(shè)置的空變量。

$EUID

有效用戶id

$FUNCNAME

當前函數(shù)的名字

例如運行以下bash腳本:

#!/bin/bash

function HelloWorld(){
  echo $FUNCNAME
}

echo $FUNCNAME
HelloWorld

得到的輸出為:

HelloWorld

第一行為空鸯乃,第二行為函數(shù)名鲸阻。

$GLOBIGNORE

由通配符(globbing)擴展的一列文件名模式

$GROUPS

目前用戶所屬的組

這是一個當前用戶的group id的列表,記錄在/etc/passwd和/etc/group中

$HOME

用戶的家目錄

linux中如/home/username

mac中如/User/username

也即~表示的目錄

$HOSTNAME

在系統(tǒng)啟動時由一個初始化腳本中用hostname命令給系統(tǒng)指派一個名字缨睡。

$HOSTTYPE

機器類型

類似$MACHTYPE一樣表示系統(tǒng)硬件

echo $HOSTTYPE

x86_64

$IFS

內(nèi)部字段分隔符鸟悴,決定了bash如何分割字段,默認是空白符

運行腳本如下:

#!/bin/sh

function OutPutArgs(){
        for arg
        do
                echo "[$arg]"
        done
}

IFS=" "
var=" a  b c  "
OutPutArgs $var

IFS=":"
var="a::b:b:c"
OutPutArgs $var

結(jié)果如下:

[a]
[b]
[c]
[a]
[]
[b]
[b]
[c]

$IGNOREEOF

忽略EOF奖年,在控制臺退出之前忽略所有的文件結(jié)尾標識

$LC_COLLATE

它常常在.bashrc或/etc/profile文件里被設(shè)置细诸,它控制文件名擴展和模式匹配的展開順序。如果設(shè)置不當陋守,LC_COLLATE會在文件名通配符(filename globbing)里引起不可預(yù)料的結(jié)果震贵。

到Bash2.05版本止,文件名通配符不再區(qū)分在方括號里的字符串范圍中的大小寫了水评。例如猩系,ls [A-M]*會匹配File1.txt和file1.txt。為了保持方括號區(qū)分大小寫的慣例中燥,在/etc/profile文件和/或在~/.bashrc文件里由命令export LC_COLLATE=C把LC_COLLATE環(huán)境變量設(shè)置成C可以達到目的寇甸。

$LINENO

表示當前變量在shell腳本中的行數(shù),可以用于調(diào)試shell腳本疗涉。

$MACHTYPE

機器類型

如:

echo $MACHTYPE
x86_64-apple-darwin15

$OLDPWD

上一次的工作目錄拿霉,即運行cd -所到達的目錄

$OSTYPE

操作系統(tǒng)類型

如:

echo $OSTYPE
darwin15

$PATH

可執(zhí)行程序的搜索路徑

當給出一個命令時,shell會自動在一個哈希表里搜索由PATH變量里所列的路徑尋找該命令程序咱扣。$PATH變量被保存在環(huán)境變量里绽淘,是一串由冒號(:)分割的目錄名的列表。通常闹伪,系統(tǒng)把此變量的值在/etc/profile文件和/或在~/.bashrc文件中被定義賦值沪铭。

PATH=${PATH}:/opt/bin 能把/opt/bin目錄加到當前現(xiàn)有的目錄列表中去。在一個腳本中祭往,它可以用這種方法臨時地加一個目錄到目錄列表中去伦意。當一個腳本退出時,此變量會恢復(fù)回原先的$PATH值(子進程不能改變父進程的環(huán)境變量)硼补。

保存在$PATH目錄列表中的當前"工作目錄"(./)通常因為會引發(fā)安全漏洞而被忽略驮肉。因此search path中通常沒有工作目錄。

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

$PIPESTATUS

此數(shù)組變量保存了最后執(zhí)行的前臺管道的退出狀態(tài)已骇。它不一定和最后執(zhí)行的命令的退出狀態(tài)一樣离钝。

$PIPESTATUS數(shù)組的成員保存了每一個在管道里執(zhí)行的命令各自的退出狀態(tài)票编。$PIPESTATUS[0]保存了管道里第一個命令的退出狀態(tài),$PIPESTATUS[1]保存了管道里第二個命令的退出狀態(tài)卵渴,以此類推慧域。

例如:

$ ls | aaa | wc
bash: aaa: command not found
       0       0       0
$ echo ${PIPESTATUS[@]}
141 127 0

$PPID

一個進程的$PPID變量保存它的父進程的進程ID(pid)。

$PROMPT_COMMAND

這個變量在主提示符前($PS1顯示之前)執(zhí)行它的值里保存的命令浪读。

$PS1

這是主提示符(第一提示符)昔榴,它能在命令行上看見。即每次輸入命令時前面的那些內(nèi)容碘橘。

$PS2

副提示符(第二提示符)互订,它在期望有附加的輸入時能看見。它顯示像">"的提示痘拆。即如果輸一條命令如

for i in a

然后回車仰禽。通常我們看見的是>符號。即PS2纺蛆。

$PS3

第三提示符吐葵。它在一個select循環(huán)里顯示

例如運行以下腳本:

#!/bin/bash

PS3='Choose one:'

select vegetable in "beans" "carrots"
do
        echo "Your choose is ${vegetable}"
        break
done

exit 0

運行結(jié)果類似:

1) beans
2) carrots
Choose one:1
Your choose is beans

$PS4

第四提示符,它在用-x選項調(diào)用一個腳本時的輸出的每一行開頭顯示桥氏。它通常顯示像"+"的提示温峭。

$PWD

工作目錄。類似于內(nèi)建命令pwd

$REPLY

沒有變量提供給read命令時的默認變量.這也適用于select命令的目錄字支,但只是提供被選擇的變量項目編號而不是變量本身的值

例如執(zhí)行以下腳本:

#!/bin/bash

echo -n "Input a:"
read

echo "a is: $REPLY"

read -p "b is :" b

echo "b is: $b"
echo "REPLY is :$REPLY"

得到的結(jié)果如下:

Input a:a
a is: a
b is :b
b is: b
REPLY is :a

$SECONDS

腳本已運行秒數(shù)

$SHELLLOPTS

已經(jīng)激活的shell選項列表诚镰,它是一個只讀變量

$SHLVL

SHELL的嵌套級別.指示了Bash被嵌套了多深.在命令行里,$SHLVL是1祥款,因此在一個腳本里,它是2.

$TMOUT

如果$TMOUT環(huán)境變量被設(shè)為非零值時間值time月杉,那么經(jīng)過time這么長的時間后刃跛,shell提示符會超時.這將使此shell退出登錄.

在Bash版本2.05b以上,可以在腳本中把$TMOUTread命令結(jié)合使用

有其他更復(fù)雜的在腳本中實現(xiàn)定時輸入的方法.另一個方法是設(shè)置一個定時循環(huán)苛萎,超時時給腳本發(fā)送一個信號.這個辦法要求有一個處理例程來捕捉(trap)由定時循環(huán)產(chǎn)生的信號

$UID

用戶ID號

這是當前用戶的用戶標識號桨昙,它在/etc/passwd文件中記錄。

這是當前用戶的真實ID腌歉,即使只是臨時通過su命令轉(zhuǎn)換成另外一個用戶也會顯示成轉(zhuǎn)換成的ID號蛙酪。$UID是個只讀變量,不能在命令行或是腳本中更改它翘盖,并且它和內(nèi)建命令id是有些相似的桂塞。

位置參數(shù)

$0, $1, $2,等等

位置參數(shù)由命令行傳給腳本或傳給一個函數(shù),或設(shè)置(set)給一個變量

$##

命令行參數(shù)[]或者是位置參數(shù)的數(shù)量

$*

所有的位置參數(shù)都被當成單個單元馍驯。

"$*"必須被引號引起來

$@

和$*相同阁危,但每個參數(shù)都是一個引起的字符串玛痊。那是說,參數(shù)都是沒有被解析或擴展狂打,是完整無缺地被傳遞的擂煞。這是說在參數(shù)列表中的每一個參數(shù)都被看作是一個單獨的單元。

"$@"應(yīng)該被引號引起來趴乡。

其他特殊參數(shù)

$!

在后臺運行的最后一個作業(yè)的PID(進程ID)

$ echo aa & echo bb & echo $!
[1] 12875
[2] 12876
12876

$_

保存前一個命令最后一個參數(shù)的變量值

例如:

$ echo a b c
a b c
echo $_
c
$ echo
$ echo $_
echo

$?

一個命令对省,函數(shù)或腳本自身的退出狀態(tài)碼,可以用于在腳本里判斷運行狀況晾捏。

$

腳本本身的進程PID蒿涎。$$變量常被用于腳本中生成一個"唯一的"臨時文件名. 這通常比調(diào)用mktemp還要簡單。

Locale

Locale是linux系統(tǒng)中多語言環(huán)境的設(shè)置接口粟瞬,Locale根據(jù)計算機用戶所使用的語言同仆,所在國家或者地區(qū),以及當?shù)氐奈幕瘋鹘y(tǒng)所定義的一個軟件運行時的語言環(huán)境裙品。

Locale是linux系統(tǒng)中多語言環(huán)境的設(shè)置接口俗批,Locale根據(jù)計算機用戶所使用的語言,所在國家或者地區(qū)市怎,以及當?shù)氐奈幕瘋鹘y(tǒng)所定義的一個軟件運行時的語言環(huán)境岁忘。
locale把按照所涉及到的文化傳統(tǒng)的各個方面分成12個大類,這12個大類分別是:

1区匠、語言符號及其分類(LC_CTYPE)
2干像、數(shù)字(LC_NUMERIC)
3、比較和排序習(xí)慣(LC_COLLATE)
4驰弄、時間顯示格式(LC_TIME)
5麻汰、貨幣單位(LC_MONETARY)
6、信息主要是提示信息,錯誤信息,狀態(tài)信息,標題,標簽,按鈕和菜單等(LC_MESSAGES)
7戚篙、姓名書寫方式(LC_NAME)
8五鲫、地址書寫方式(LC_ADDRESS)
9、電話號碼書寫方式(LC_TELEPHONE)
10岔擂、度量衡表達方式 (LC_MEASUREMENT)
11位喂、默認紙張尺寸大小(LC_PAPER)
12、對locale自身包含信息的概述(LC_IDENTIFICATION)乱灵。

例如:

$ locale
LANG="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_ALL=

設(shè)定locale就是設(shè)定12大類的locale分類屬性塑崖,即12個LC。除了這12個變量可以設(shè)定以外痛倚,為了簡便起見规婆,還有兩個變量:LC_ALL和LANG。它們之間有一個優(yōu)先級的關(guān)系:LC_ALL > LC >LANG×兀可以這么說苗踪,LC_ALL是最上級設(shè)定或者強制設(shè)定,而LANG是默認設(shè)定值削锰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末通铲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子器贩,更是在濱河造成了極大的恐慌颅夺,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛹稍,死亡現(xiàn)場離奇詭異吧黄,居然都是意外死亡,警方通過查閱死者的電腦和手機唆姐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門拗慨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奉芦,你說我怎么就攤上這事赵抢。” “怎么了声功?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵烦却,是天一觀的道長。 經(jīng)常有香客問我先巴,道長其爵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任伸蚯,我火速辦了婚禮摩渺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剂邮。我一直安慰自己证逻,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布抗斤。 她就那樣靜靜地躺著,像睡著了一般丈咐。 火紅的嫁衣襯著肌膚如雪瑞眼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天棵逊,我揣著相機與錄音伤疙,去河邊找鬼。 笑死,一個胖子當著我的面吹牛徒像,可吹牛的內(nèi)容都是我干的黍特。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼锯蛀,長吁一口氣:“原來是場噩夢啊……” “哼灭衷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旁涤,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤翔曲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后劈愚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞳遍,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年菌羽,在試婚紗的時候發(fā)現(xiàn)自己被綠了掠械。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡注祖,死狀恐怖猾蒂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氓轰,我是刑警寧澤婚夫,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站署鸡,受9級特大地震影響案糙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜靴庆,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一时捌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炉抒,春花似錦奢讨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塞茅,卻和暖如春亩码,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背野瘦。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工描沟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留飒泻,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓吏廉,卻偏偏與公主長得像泞遗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子席覆,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,407評論 0 5
  • 1史辙、bash 與 shell 管理整個計算機硬件的其實是操作系統(tǒng)的內(nèi)核(Kernel),這個內(nèi)核是需要被保護的娜睛,所...
    Zhang21閱讀 858評論 0 2
  • 第 2 章 SHELL 基礎(chǔ)知識2.1 shell腳本我們在上面簡單介紹了一下什么是shell腳本髓霞,現(xiàn)在我們來進一...
    LiWei_9e4b閱讀 1,578評論 0 0
  • 說明,本文所使用的機器是:SUSE Linux Enterprise畦戒。 問題定位 這看起來像是環(huán)境變量引起的問題方库,...
    lework閱讀 2,933評論 6 11
  • 第一眼心動,便搭進去了一輩子障斋,自你走后纵潦,我還在吹著那支曲子,只是這南城垃环,已然宛若隆冬邀层,我心已經(jīng)冰封。 南城最東邊有...
    璞白閱讀 436評論 0 0