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  

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章