在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ Shell 輸入/輸出重定向
Shell 輸入/輸出重定向
Shell 循環(huán)類型
Shell是什么?
Shell 特殊變量
Shell 算術(shù)運(yùn)算符示例
Shell 關(guān)系運(yùn)算符示例
Shell 替代
Shell 函數(shù)
Shell 條件語句
Shell 聯(lián)機(jī)幫助
Shell 數(shù)組/Arrays
Shell 布爾運(yùn)算符范例
Shell
Shell if...elif...fi 語句
Shell case...esac 語句
Shell 使用Shell變量
Shell 文件測(cè)試符例子
Shell 基本運(yùn)算符
Korn Shell 運(yùn)算符
Shell 字符串運(yùn)算范例
Shell while 循環(huán)
Shell 引用機(jī)制
Shell if...else...fi 語句
Shell select 循環(huán)
C Shell運(yùn)算符
Shell 循環(huán)控制break/continue
Shell for循環(huán)
Shell until 循環(huán)
Shell if...fi語句

Shell 輸入/輸出重定向

大多數(shù) Unix 系統(tǒng)命令從終端的輸入和發(fā)送所產(chǎn)生的輸出返回??到您的終端。一個(gè)命令通常從一個(gè)地方叫標(biāo)準(zhǔn)輸入,默認(rèn)情況下,這恰好是你的終端讀取輸入。同樣,一個(gè)命令通常寫入其輸出到標(biāo)準(zhǔn)輸出,這也是默認(rèn)情況下,從你的終端。

輸出重定向:

通常用于標(biāo)準(zhǔn)輸出命令的輸出可以很容易地轉(zhuǎn)移到一個(gè)文件中代替。這種能力被稱為輸出重定向:

如果記號(hào)> file附加任何命令,通常寫入其輸出到標(biāo)準(zhǔn)輸出,該命令的輸出將被寫入文件,而不是你的終端:

檢查使用 who 命令,將完整的輸出重定向命令在用戶文件。

$ who > users

請(qǐng)注意,沒有輸出出現(xiàn)在終端中。這是因?yàn)檩敵鲆驯恢囟ㄏ虻街付ǖ奈募哪J(rèn)的標(biāo)準(zhǔn)輸出設(shè)備(終端)。如果想檢查用戶的文件,然后將完整的內(nèi)容:

$ cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
steve       tty25   Sep 12 13:03
$

如果命令輸出重定向到一個(gè)文件,該文件已經(jīng)包含了一些數(shù)據(jù),這些數(shù)據(jù)將會(huì)丟失??紤]這個(gè)例子:

$ echo line 1 > users
$ cat users
line 1
$

您可以使用>>運(yùn)算符將輸出附加在現(xiàn)有的文件如下:

$ echo line 2 >> users
$ cat users
line 1
line 2
$

輸入重定向:

正如一個(gè)命令的輸出可以被重定向到一個(gè)文件中,所以可以輸入一個(gè)命令從文件重定向。作為不是字符>用于輸出重定向,小于字符<用于重定向一個(gè)命令的輸入。

通常需要的命令,他們從標(biāo)準(zhǔn)輸入的輸入可以有自己的這種方式從文件輸入重定向。例如,上面生成的文件中的用戶的數(shù)量來計(jì)算的行,可以執(zhí)行如下命令:

$ wc -l users
2 users
$

在這里,它產(chǎn)生的輸出2行??梢灾竿奈募械男袛?shù) wc 命令的標(biāo)準(zhǔn)輸入重定向用戶從文件:

$ wc -l < users
2
$

請(qǐng)注意,在由兩種形式的wc命令產(chǎn)生的輸出是有區(qū)別的。在第一種情況下,該文件的用戶的名稱列出的行數(shù),在第二種情況下,它不是。

在第一種情況下,wc 知道,它是用戶從文件讀取輸入。在第二種情況下,只知道它是從標(biāo)準(zhǔn)輸入讀取輸入,所以它不顯示文件名。

Here 文檔:

 here document 是用來輸入重定向到一個(gè)交互式shell腳本或程序。

在一個(gè)shell腳本中,我們可以運(yùn)行一個(gè)交互式程序,無需用戶操作,通過提供互動(dòng)程序或交互式shell腳本所需的輸入。

這里的文件的一般形式是:

command << delimiter
document
delimiter

這里的 shell 解釋<<操作指令讀取輸入,直到它找到含有指定分隔符線。所有輸入行的行分隔符,然后送入標(biāo)準(zhǔn)輸入的命令。

分界符告訴shell 這里文件已完成。沒有它,shell 不斷的讀取輸入。分隔符必須是一個(gè)字不包含空格或制表符。

以下是輸入命令wc -1 進(jìn)行計(jì)數(shù)的行的總數(shù):

$wc -l << EOF
	This is a simple lookup program 
	for good (and bad) restaurants
	in Cape Town.
EOF
3
$

可以在here document 打印多行,使用你的腳本如下:

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF	

這將產(chǎn)生以下結(jié)果:

This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

下面的腳本運(yùn)行一個(gè)會(huì)話vi文本編輯器中的輸入和保存文件test.txt。

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

如果運(yùn)行這個(gè)腳本,用vim作為vi,那么很可能會(huì)看到類似以下的輸出:

$ sh test.sh
Vim: Warning: Input is not from a terminal
$

運(yùn)行該腳本后,你應(yīng)該看到以下內(nèi)容添加到文件test.txt:

$ cat test.txt
This file was created automatically from
a shell script
$

丟棄輸出:

有時(shí)會(huì)需要執(zhí)行命令,但不想顯示在屏幕上的輸出。在這種情況下,可以丟棄的輸出重定向到文件 /dev/null:

$ command > /dev/null

這里 command 是要執(zhí)行的命令的名字。文件/dev/null 是一個(gè)特殊的文件自動(dòng)放棄其所有的輸入。

同時(shí)要放棄一個(gè)命令的輸出和錯(cuò)誤輸出,使用標(biāo)準(zhǔn)的重定向到STDOUT 到 STDERR重定向:

$ command > /dev/null 2>&1

在這里,2代表stderr和1代表STDOUT。可以上顯示一條消息到STDERR 到 STDERR重定向標(biāo)準(zhǔn)輸入到如下:

$ echo message 1>&2

重定向命令:

以下是命令,可以使用重定向的完整列表:

命令 描述
pgm > file Output of pgm is redirected to file
pgm < file Program pgm reads its input from file.
pgm >> file Output of pgm is appended to file.
n > file Output from stream with descriptor n redirected to file.
n >> file Output from stream with descriptor n appended to file.
n >& m Merge output from stream n with stream m.
n <& m Merge input from stream n with stream m.
<< tag Standard input comes from here through next tag at start of line.
| Takes output from one program, or process, and sends it to another.

需要注意的是文件描述符0是正常標(biāo)準(zhǔn)輸入(STDIN),1是標(biāo)準(zhǔn)輸出(STDOUT),標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)。