互動式shell和非互動式shell
互動式模式就是shell等待你的輸入, 並且立即執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。這種模式也是大多數使用者非常熟悉的:登入、執行一些命令、簽退。當你簽 退後,shell也終止了。
shell也可以運行在另外一種模式:非互動式模式,以shell script(非互動)方式執行。在這種模式 下,shell不與你進行互動,而是讀取存放在檔案中的命令,並且執行它們。當它讀到檔案的結尾,shell也就終止了。
登入shell和非登入shell
當init3時,mingetty spawn出登入提示符的時候,你輸入帳號和密碼進入了,出現了shell提示符,這個過程就是登入shell
在Gnome圖形介面中開啟“終端”出來的那種視窗程序,和登入shell 相比,它是“非登入”的,你並不需要輸入使用者名稱和密碼。
在登入shell裡,唯讀取/etc/profile和~ /.bash_profile, ~/.bash_login 和 ~/.profile按順序最先的一個,並執行其中的命令。除非被 --noprofile選項禁止了;
在非登入shell裡,唯讀取 /etc/bash.bashrc和~/.bashrc
輸入輸出重新導向
命令從標準輸入讀入資料,從標準輸出、標準錯誤輸出資料,shell支援對命令的輸入、輸出進行重新導向。
重新導向到管道
使用 | 將兩個命令串連起來,就實現了將前一個命令的標準輸出內容作為後一個命令的標準輸入
ls –l | wc –l
以行方式列出目前的目錄檔案,並計算行數,即計算檔案數量
重新導向到檔案
< 將標準輸入定向到檔案(從檔案讀入資料)
> 將標準輸出定向到檔案(如果檔案存在,則覆蓋原檔案)
>> 將標準輸出定向到檔案,如果檔案存在,則將輸出內容添加到檔案末尾
cat abc.txt >> def.txt
將檔案abc.txt的內容合并到def.txt檔案
重新導向任意檔案描述符
對於 Linux 而言,所有對裝置和檔案的操作都使用檔案描述符來進行的。檔案描述符是一個非負的整數,它是一個索引值,並指向核心中每個進程開啟檔案的記錄表。當開啟一個現存檔案或建立一個新檔案時,核心就向進程返回一個檔案描述符;當需要讀寫檔案時,
也需要把檔案描述符作為參數傳遞給相應的函數。
n< 從檔案中接受檔案描述符n
n> n>> 將檔案描述符n定向到檔案
主要應用在重新導向標準錯誤
cat dddcat: ddd: 沒有那個檔案或目錄cat ddd 2> /dev/null
更多重新導向方法
command > file1 2> file2分別重新導向標準輸出和標準錯誤command 2>&1將標準錯誤發送到標準輸出同樣的位置command 2>&1 > file將標準錯誤發送到標準輸出同樣的位置,然後再重新導向到filecommand 2>&1 | tee file將命令的標準輸出、標準錯誤都發送到檔案file,同時輸出到終端
tee命令會從標準輸入裝置讀取資料,將其內容輸出到標準輸出裝置,同時儲存成檔案。我們可利用tee把管道匯入的資料存成檔案,甚至一次儲存數份檔案。
子shell
調用另外一個指令碼程式,自動產生一個新的shell環境,如果希望定義並使用一些變數,但不影響當前環境中,可以使用子shell。
格式:( 命令 ) (將要執行的命令用圓括弧括起來)
( export LANG=en_US; command )
臨時將變數LANG設定成en_US,然後執行命令
source命令
如果希望在本shell的環境中執行一些在指令檔中定義的文本,可以使用source命令,作為一種簡寫,也可以寫成:. 指令碼(注意圓點和指令碼名之間的空格)
source config.sh. config.shconfig.sh中的內容將在本shell環境中執行
如果不用source命令,則會在一個新的shell中執行config.sh指令碼