shell 指令碼是按行分隔每一條 shell 語句。如果每一條shell語句寫在單獨一行,此時可以加分號,也可以不加,沒有什麼區別。如果多條 shell 寫在同一行,那麼此時需一定要用分號將不用語句分隔開來。
輸出/輸入重導向
檔案描述符(file descriptor),用乙個數字(通常為0-9)來表示乙個檔案。>> < << :> &> 2&> 2<>>& >&2
常用的檔案描述符如下:
檔案描述符 名稱 常用縮寫 預設值
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 接著我們可以使用絕對路徑來執行我們的指令碼,就可以執行指令碼...