国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux shell編程中IO和條件及循環處理的細節問題討論

2019-10-26 18:48:00
字體:
來源:轉載
供稿:網友

> 與 < 差在哪?
談到I/O redirection,不妨先讓我們認識一下File Descriptor(FD)。程序的運算,在大部份情況下都是進行數據(data)的處理,這些數據從哪讀進?又,送出到哪里呢?這就是File descriptor(FD)的功用了。

在shell程序中,最常使用的FD大概有三個,分別為:

0: Standard Input(STDIN) 1: Standard Output(STDOUT) 2: Standard Error Output(STDERR)

在標準情況下,這些FD分別跟如下設備(device)關聯:

stdin(0):keyboard stdout(1):monitor stderr(2):monitor

我們可以用如下下命令測試一下:

$ mail -s test rootthis is a test mail.please skip.

^d(同時按crtl跟d鍵)
很明顯,mail程序所讀進的數據,就是從stdin也就是keyboard讀進的。不過,不見得每個程序的stdin都跟mail一樣從keyboard讀進,因為程序作者可以從檔案參數讀進stdin,如:

$ cat /etc/passwd

但,要是cat之后沒有檔案參數則又如何呢?哦,請您自己玩玩看啰….^_^

$ cat

(請留意數據輸出到哪里去了,最后別忘了按^d離開…)至于stdout與stderr,嗯…然后,讓我們繼續看stderr好了。

事實上,stderr沒甚么難理解的:說穿了就是“錯誤信息”要往哪邊送而已…比方說,若讀進的檔案參數是不存在的,那我們在monitor上就看到了:

$ ls no.such.filels: no.such.file: No such file or directory

若,一個命令同時產生stdout與stderr呢?那還不簡單,都送到monitor來就好了:

$ touch my.file$ ls my.file no.such.filels: no.such.file: No such file or directorymy.file

okay,至此,關于FD及其名稱、還有相關聯的設備,相信你已經沒問題了吧?那好,接下來讓我們看看如何改變這些FD的預設數據信道,我們可用<來改變讀進的數據信道(stdin),使之從指定的檔案讀進。我們可用>來改變送出的數據信道(stdout,stderr),使之輸出到指定的檔案。比方說:

$ cat < my.file

就是從my.file讀進數據

$ mail -s test root < /etc/passwd

則是從/etc/passwd讀進…

這樣一來,stdin將不再是從keyboard讀進,而是從檔案讀進了…嚴格來說,<符號之前需要指定一個FD的(之間不能有空白),但因為0是<的預設值,因此<與0<是一樣的!okay,這個好理解吧?

那,要是用兩個<<又是啥呢?這是所謂的HERE Document,它可以讓我們輸入一段文本,直到讀到<<后指定的字串。比方說:

$ cat <<FINISHfirst line heresecond line therethird line nowhereFINISH

這樣的話,cat會讀進3行句子,而無需從keyboard讀進數據且要等^d結束輸入。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄄城县| 海门市| 晴隆县| 玛曲县| 营山县| 莱西市| 杭州市| 瑞金市| 琼中| 麻阳| 建湖县| 广东省| 天镇县| 保定市| 隆昌县| 桃源县| 雷波县| 察哈| 手机| 区。| 陕西省| 长宁区| 湖州市| 太和县| 武汉市| 门源| 江西省| 高雄市| 寻乌县| 和平县| 佛冈县| 红河县| 双峰县| 延津县| 阳信县| 朝阳县| 加查县| 安塞县| 南汇区| 揭阳市| 防城港市|