高階shell特性

2021-08-25 04:10:00 字數 3249 閱讀 6887

如果歷史命令和命令補充等有用的shell特性不能工作,請看一下內容。

[b]1、環境變數[/b]

bash shell 維護大量已經執行命令、多種配置引數的設定、正在操作的環境等資訊,其中很多資訊儲存在 shell 環境中,因此稱作「環境變數(environment variable)。

可以通過輸入 printenv 命令,來顯示當前 shell 中所有環境變數的設定及其定義,如下所示:

[b]# [color=blue]printenv[/color][/b]

lesskey=/etc/lesskey.bin

nntpserver=news

infodir=/usr/local/info:/usr/share/info:/usr/info

manpath=/usr/share/man:/usr/local/man:/usr/local/share/man:/usr/x11r6/man:/opt/gnome/share/man

hostname=test

home=/root

path=/sbin:/usr/sbin:/usr/local/sbin:/opt/gnome/sbin:/root/bin:/usr/local/bin

... ...

_=/usr/bin/printenv

環境變數名通常由大寫字母和下劃線組成,具有多種使用方式。

例如:home 環境變數的值是乙個包含使用者主目錄名的字串;

path 環境變數是用冒號分開的目錄列表,當查詢已經執行過的命令時,shell順序搜尋這些目錄;

ps1 環境變數定義了shell所顯示提示的結構和內容;

「_」 環境變數(示例**的最後一行) 表示用shell執行的最後乙個命令的完成路徑,在本例中,就是剛剛執行的 printenv 命令的完整路徑。

可以在很多地方對環境變數進行設定:

* linux 系統中位於/etc/profile、/etc/profile.local以及/etc/profile.d 目錄中的系統配置檔案。這些在每次登入系統時執行,用以幫助初始化工作環境的系統檔案。

* 系統配置檔案,如/etc/bashrc。這些檔案通常在每次啟動乙個新shell以及對系統shell配置變數進行設定時,由使用者個性化的bash配置檔案執行。

* 使用者特有的配置檔案,如.bashrc,每次啟動新shell時讀取這個檔案。

* 在shell指令碼內,用於在該指令碼內使用,或者匯出到命令列環境。

* 為了方便從命令列設定,或在被shell執行的shell函式內設定。

通過使用 export 命令,讓以後所有 shell 都可用的環境變數對父shell也可用。

經常我們在 path 環境變數的列分隔值中新增新目錄,以便shell在該目錄中訪問可執行檔案。

例如,系統安裝了流行的linux firefox瀏覽器,firefox通常安裝在/usr/local/firefox目錄下,實際執行以執行瀏覽器的二進位制程式是/usr/local/firefox/firefox。可以通過輸入 firefox 命令完整的**來執行firefox,但這樣有些繁瑣,更好的解決方案是把目錄/usr/local/firefox 新增到path環境變數的值中。可以在當前shell下執行下面的命令來做到這一點:

export path=$path:/usr/local/firefox

輸入這個命令後,可以在該shell下,通過簡單地輸入 firefox 並按下回車鍵,來執行 firefox 命令。

[b]注意:[/b]

在環境變數前帶有「$」表示要引用該變數的值,而不是引用它的名稱。

設定完環境變數後,可以在任何時候使用 unset 命令取消設定。unset 命令從執行它的shell中刪除環境變數以及它的值。

[b]2、萬用字元和模式匹配[/b]

為了不需要完整地輸入每乙個檔名,並讓識別特殊的檔案變得更簡單,linux shell提供了大量不通的方法,來指定用於匹配特殊檔名的模式。

linux shell提供的最基本模式匹配是兩個特殊的字元,稱為 萬用字元。它表示字元能與其他任何字元進行匹配。linux shell支援的兩個基本萬用字元如下:

* [b]星號(*)[/b] —— [color=red]也稱作星形字元,它代表一行中的任意數量字元(包括無任何字元)。[/color]

* [b]問號(?) [/b]—— [color=red]代表任何單個字元[/color]。

除了這兩個萬用字元外,linux shell也支援在檔名中匹配特殊模式的其他兩種方法:

* 在方括號中指定值的方位,用破折號分隔。例如,表示式 [1-3] 將於任何包含在1~3範圍內的值相匹配。

* 在大括號(也成為波形括號)中指定用逗號分隔的值列表。例如,表示式將與數字1或3相匹配。

例如,假定某一目錄包含下面的檔案:

file1 file1.doc file2 file2.doc

file3 file3.txt file8 other_file.doc

如何使用萬用字元、值的範圍以及列表,與特殊的檔案相匹配,如下:

linux shell 中的模式匹配

[table]

| 模式 | 匹配的檔名

|| * | file1,file1.doc,file2,file2.doc,file3,file3.txt,file8,other_file.doc

|| file? |file1,file2,file3,file8

|| *.doc |file1.doc,file2.doc,other_file.doc

|| file?.doc |file1.doc,file2.doc

|| file?.* |file1.doc,file1.doc,file3.txt

|| file[1-3] |file1,file2,file3

|| file |file1,file3

|| file. |file1.doc,file3.txt|

[/table]

[b]3、連線命令和重定向輸入輸出[/b]

unix和linux提供了許多小且簡單的命令,可以把這些命令連線在一起執行複雜的任務。

例如,一些作業系統可以提供專門命令,用於列印當前目錄列表。在linux系統中,可以通過把已有的列表命令(ls)和列印命令(lpr)連線成單獨的命令序列來完成這個任務。在這個命令序列中,ls 命令的輸出作為 lpr 命令的輸入。

通過使用特殊的符號來連線這兩個命令,該符號稱作 [b]管道(|)[/b]。如下所示:

ls | lpr

linux shell 把乙個命令的輸出連線到另乙個命令的輸入來提供該功能。

摘自《suse linux 10 寶典》p35—p39

shell高階特性 4

1 shell模組 shell指令碼中可以載入配置檔案或呼叫已經完成函式或指令碼。a 載入配置檔案 新建配置檔案config,插入以下 1 reboot mode true 在同一路徑下,新建檔案module.sh,插入以下 1 bin bash 2 可以簡寫為 config 3source con...

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...

Python高階特性

l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...