shell學(xué)習(xí)筆記之九(重定向)
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-07-31 08:23:46 閱讀次數(shù):3090次
重定向
概念:
將默許的輸入輸出改成其他的輸入輸出
文件標(biāo)識(shí)符
linux使用0⑼指明特定進(jìn)程相干的數(shù)據(jù)流,系統(tǒng)在啟動(dòng)1個(gè)進(jìn)程的時(shí)候會(huì)為該進(jìn)程打開3個(gè)文件:標(biāo)準(zhǔn)輸入(stdin),標(biāo)準(zhǔn)輸出(stdout),標(biāo)準(zhǔn)毛病輸出,分別使用文件標(biāo)識(shí)符0,1,2來(lái)標(biāo)識(shí),如果要為進(jìn)程打開其他的輸入輸出,則需要從整數(shù)3開始標(biāo)識(shí)。默許情況下,標(biāo)準(zhǔn)輸入為鍵盤,標(biāo)準(zhǔn)輸出和毛病輸出為顯示器
I/O重定向
1、標(biāo)準(zhǔn)輸出覆蓋重定向(>)
ls -l > test.txt
注意:如果指定的文件不存在,則命令會(huì)先創(chuàng)建文件
上述命令相當(dāng)于:ls -l 1>test.txt
ls -l /usr/noExist 2> ls_noExist_err.txt
毛病重定向輸出
如果命令的輸出既有標(biāo)準(zhǔn)輸出,又有毛病標(biāo)準(zhǔn)輸出,則可以分別指定不同標(biāo)識(shí)符的內(nèi)容
COMMAND 1> stdout.txt 2> stderr.txt
2、標(biāo)準(zhǔn)輸出追加重定向(>>)
和>的用法1致,只是這個(gè)是追加,不會(huì)清空原文件
3、標(biāo)識(shí)輸出重定向(>&)
標(biāo)準(zhǔn)輸出重定向的作用是將1個(gè)標(biāo)識(shí)的輸出重定向到另外一個(gè)標(biāo)識(shí)的輸入。
例:將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)毛病輸出同時(shí)重定向到1個(gè)文件
COMMAND > test.txt 2>&1
如果不關(guān)心毛病輸出
COMMAND > test.txt 2> /dev/null #/dev/null是1個(gè)特殊裝備,像1個(gè)黑洞
4、標(biāo)準(zhǔn)輸入重定向 <
5、管道(|)
6、exec
exec是shell的內(nèi)建命令,
7、Here Document
用于在命令中按行輸入文本,格式為<<delimiter,其中delimiter是1個(gè)用于標(biāo)注的分割符,該分割符后所有的輸入都被當(dāng)作是輸入的文本,直到出現(xiàn)下1個(gè)分隔符。
這個(gè)的功能的出現(xiàn)主要是由于Ctrl+D輸入完成的信號(hào)在交互環(huán)境下是可以的,但是在腳本中卻沒法使用。
例:
#cat here.txt
line1
line2
line3
line4
#現(xiàn)在想要在here.txt的第3行插入1個(gè)新行
#!/bin/bash
ed here.txt <<END
3
d
i
this is new line3
.
wq
END
#cat here.txt
line1
line2
this is new line3
line4
也就是說(shuō),我們把要在終端輸入的命令全部寫道1個(gè)文件里,這個(gè)文件相當(dāng)于摹擬我們的鍵盤輸入
#對(duì)1串輸入字符排序
#!/bin/bash
sort <<END
sdt
t
dsaj
dsg
fdg
we
gh
avf
END
這樣就能夠在任什么時(shí)候候任什么時(shí)候間對(duì)這些字符串進(jìn)行排序了。
空格:
1、test 測(cè)試比較時(shí),操作符兩側(cè)要有空格
2、if [] ,if 和 [] 之間要有空格
3、[ expression ] expression兩側(cè)要有空格
4、算數(shù)運(yùn)算和賦值沒有空格
5、while與以后的expression有空格 如:while expression
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)