在线观看不卡亚洲电影_亚洲妓女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 文件測試符例子
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)生的輸出返回??到您的終端。一個命令通常從一個地方叫標(biāo)準(zhǔn)輸入,默認(rèn)情況下,這恰好是你的終端讀取輸入。同樣,一個命令通常寫入其輸出到標(biāo)準(zhǔn)輸出,這也是默認(rèn)情況下,從你的終端。

輸出重定向:

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

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

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

$ who > users

請注意,沒有輸出出現(xiàn)在終端中。這是因為輸出已被重定向到指定的文件從默認(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
$

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

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

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

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

輸入重定向:

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

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

$ wc -l users
2 users
$

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

$ wc -l < users
2
$

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

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

Here 文檔:

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

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

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

command << delimiter
document
delimiter

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

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

以下是輸入命令wc -1 進(jìn)行計數(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)行一個會話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)行這個腳本,用vim作為vi,那么很可能會看到類似以下的輸出:

$ 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
$

丟棄輸出:

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

$ command > /dev/null

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

同時要放棄一個命令的輸出和錯誤輸出,使用標(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)錯誤輸出(STDERR)。