Shell 程式設計知識點集錦

2021-10-09 06:59:17 字數 1636 閱讀 5683

shell 指令碼是按行分隔每一條 shell 語句。如果每一條shell語句寫在單獨一行,此時可以加分號,也可以不加,沒有什麼區別。如果多條 shell 寫在同一行,那麼此時需一定要用分號將不用語句分隔開來。

輸出/輸入重導向

>>   <   <<   :>   &>   2&>   2<>>&   >&2
檔案描述符(file descriptor),用乙個數字(通常為0-9)來表示乙個檔案。

常用的檔案描述符如下:

檔案描述符 名稱 常用縮寫 預設值

0               標準輸入      stdin            鍵盤

1 標準輸出 stdout 螢幕

2 標準錯誤輸出 stderr 螢幕

/dev/null代表空檔案裝置

1表示系統標準輸出,系統預設值是1, > /dev/null等同於1 > /dev/null

/dev/null 代表空裝置檔案,類似於 windows 的**站。

代表重定向到**,例如:echo 「123」 > /home/123.txt。

1表示stdout標準輸出,是標準輸出檔案描述符,預設對應螢幕。系統預設值是1,所以">/dev/null"等同於"1>/dev/null"。

2 表示stderr標準錯誤,是標準錯誤檔案描述符,預設對應螢幕。

& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1。

那麼本文標題的語句:

1>/dev/null 首先表示標準輸出重定向到空裝置檔案,也就是不輸出任何信喜到終端,說白了就是不顯示任何資訊。

2>&1 接著,標準錯誤輸出重定向等同於標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。

那麼2>&1 >/dev/null 與 >/dev/null 2>&1 的區別是什麼呢?

command >/dev/null 2>&1 相當於

stdout=

"/dev/null"

stderr=$stdout

這時,stderr也等於"/dev/null"了

結果是標準輸出和標準錯誤都指向了/dev/null, 也就是所有的輸出都被我們丟棄。

command 2>&1 >/dev/null 相當於

stderr=$stdout #stderr指向了螢幕,因為stdout這時還是指向螢幕!

stdout=

"/dev/null" #stdout指向了/dev/null,但不會影響到 stderr的指向

結果是標準錯誤仍然被列印到螢幕上, 而標準輸出被丟棄。

3.shell 指令碼的執行順序

shell 指令碼是從上到下,按照順序一條一條解析命令。如果當前命令沒有返回則阻塞等待,直到當前命令執行完成後才繼續執行下一條命令。

可以使用 & 把乙個程式的執行放入後台,但是當指令碼執行到最後是不會等待這個程序的返回結果的,所以會直接結束指令碼執行,該程序也會成為乙個孤兒。解決方法是在指令碼最後放「wait」。

Shell 程式設計知識點集錦

shell 指令碼是按行分隔每一條 shell 語句。如果每一條shell語句寫在單獨一行,此時可以加分號,也可以不加,沒有什麼區別。如果多條 shell 寫在同一行,那麼此時需一定要用分號將不用語句分隔開來。dev null 代表空裝置檔案,類似於 windows 的 站。代表重定向到 例如 ec...

Shell 程式設計知識點

linux 的選項又分為短格式選項和長格式選項。command1 command2.不管command1命令是否執行成功,command2命令都執行。command1 command2.command1命令和command2命令同時執行 command1 command2.只在command1命令執...

shell 程式設計知識點彙總

程式設計的開始 bin bash 這部分內容是必須寫的,並且在首行,就是宣告這是乙個shell程式。如何執行shell指令碼 第一種是 附許可權給指令碼,直接執行 chmod 755 指令碼名字 例如 chmod 775 hello.sh 接著我們可以使用絕對路徑來執行我們的指令碼,就可以執行指令碼...