1. 程式人生 > 其它 >shell基礎語法備忘錄二

shell基礎語法備忘錄二

2021-06-19

關鍵字:


1、shell中的檔案描述符

與Linux檔案系統一樣,shell中也有檔案描述符的概念,且每一個shell程序中都預設有三個已開啟的檔案描述符。它們分別代表“標準輸入”、“標準輸出”與“錯誤輸出”,對應的檔案描述符號分別為 0、1、2。描述符號3及以後的正整數值可自由使用。

從一個shell中以新程序的形式啟動的子shell會繼承父shell中的三個預設檔案描述符。

shell中檔案描述符的使用通常是在需要重定向流的走向時。重定向語法格式如下所示:

#output
[n]>

#input
[n]<

n代表非負整數值。n是可選的,如果不填,則輸出時代表標準輸出(即描述符為1),輸入時代表標準輸入(即描述符為0),以下是一些示例語句:

#將命令執行結果儲存到檔案
ls -l /etc > ls.record

#將命令執行結果輸出到螢幕,錯誤資訊儲存到檔案
ls -l /etc 2> ls.error

#將命令執行結果及錯誤資訊均儲存到檔案
ls -l /etc > ls.record 2> ls.error

#將標準輸出和錯誤輸出同時重定向,與上一條命令等價
ls -l /etc &> ls.output

#追加內容到已存在檔案
ls -l /etc 1>> ls.record #從指定檔案中查詢內容
grep name 0< names.txt #與上一條命令等價 grep
name < names.txt

如果想快速建立一個空檔案,則可以使用以下命令:

> new.file
:> new.file

2、將錯誤輸出重定向到標準輸出

語法如下:

ls -l /etc > ls.record 2>&1

3、半永久式重新分配檔案描述符

使用exec命令可以在本shell登入中永久改變描述符流向,具體如下表所示:

重定向方式 含義
exec 2> file 將所有命令的錯誤輸出重定向到檔案file
exec n< file 以只讀的方式開啟名稱為file的檔案,並使用檔案描述符n,n是大於3的整數。
exec 2> file 以寫的方式開啟名稱為file的檔案,並使用檔案描述符n。
exec n<>file 以讀寫的方式開啟檔案file,並使用檔案描述符n。
exec n>&- 關閉檔案描述符n
exec n>&m 使得檔案描述符n成為檔案描述符m的副本,即將檔案描述符m複製到n

4、根據程序名查詢執行狀態及程序號

使用 pidof 命令可以實現此目的。具體語法如下:

pidof [option] program

option可以不填。一般的用法是pidof 後加要查詢的程序名稱,查詢成功返回0值且列印相應程序號,多個程序號以製表符隔開。若指定程序未在執行則返回1值。

5、查詢當前shell的層級

在shell中可以巢狀登入到另一個shell,通過以下命令可以查詢到當前的shell登入級數:

echo $SHLVL

6、臨時開啟子shell執行命令

可以使用圓括號來實現,圓括號中的所有命令均會在子shell中以新程序的身份執行。具體語法如下所示:

(command1;command2;command3...)

(
command1
command2
...
)

7、bash shell的常用內部命令

如下表:

內部命令 含義
. 載入庫指令碼檔案進本shell中執行。簡單理解成是讀取shell指令碼中的內容進來本shell中執行即可。
alias 設定命令別名。函式是將一組命令打包設定一個別名,alias則是針對一個命令打包設定別名。
bg 將作業置於後臺執行。
cd 改變當前工作目錄。
echo 列印指定的文字。
eval 將引數作為shell命令來執行。用引號包括住命令及其引數。
exec 將指定的程式取代shell或者永久改變當前shell的流方向。
exit 退出shell
export 將變數宣告為環境變數。
fc 與命令歷史一起執行。
fg 將作業置於前臺執行。
getopts 處理引數中的選項內容。
history 顯示命令歷史
jobs 顯示在後臺執行的作業。
kill 向程序傳送訊號。
logout 從shell中登出。
pwd 顯示當前的工作目錄
set 設定shell環境變數。
shift 變換命令列的引數,將引數往左移一位,最左邊的引數將被刪除。

8、bash shell中的常用保留欄位

如下表:

保留欄位 含義
!

:

break
case
continue
declare
do
done
elif
else
esac
for
let
local
read
return
test
then
until
wait 等待後臺作業完成。
while