Shell 標(biāo)準(zhǔn)輸入輸出
詳情地址:? https://www.xiaobuteach.com/shell/io/io.html?from=bili
Shell 標(biāo)準(zhǔn)輸入輸出
我們常用的兩條輸入輸出語(yǔ)句
接收輸入
read -p "input name:" name
將用戶(hù)輸入的值賦值到變量。
輸出
echo $name

輸入與輸出分別對(duì)應(yīng)的硬件:輸入通過(guò)鍵盤(pán),輸出到顯示器。
3個(gè)標(biāo)準(zhǔn)設(shè)備
Linux把硬件映射為設(shè)備文件,對(duì)應(yīng)一個(gè)文件描述符。
項(xiàng)目設(shè)備文件文件描述符標(biāo)準(zhǔn)輸入(默認(rèn)鍵盤(pán))/dev/stdin&0標(biāo)準(zhǔn)輸出(默認(rèn)顯示器)/dev/stdout&1標(biāo)準(zhǔn)錯(cuò)誤(默認(rèn)顯示器)/dev/stderr&2
輸出與錯(cuò)誤
命令執(zhí)行正確的提示結(jié)果稱(chēng)為輸出;命令執(zhí)行失敗的提示結(jié)果稱(chēng)為錯(cuò)誤。
例1:1條ll語(yǔ)句同時(shí)存在輸出與錯(cuò)誤。
當(dāng)前文件夾存在文件file1.txt,不存在文件file-error.txt,一條ll命令兩個(gè)文件。
ll file1.txt file-error.txt

第1條提示為錯(cuò)誤,第2條提示為輸出。
注:兩個(gè)不同的流處理,沒(méi)有嚴(yán)格按照順序顯示。
例2:兩條echo
echo xiaobu
echoooo xiaobu

echo xiaobu的結(jié)果稱(chēng)為?輸出;echooooo xiaobu 因?yàn)槊钇磳?xiě)錯(cuò)誤,執(zhí)行失敗的提示結(jié)果稱(chēng)為?錯(cuò)誤。顯然兩者都顯示到顯示器。
輸入輸出的完整寫(xiě)法
輸入
read -p "input name:" name
read命令默認(rèn)從鍵盤(pán)&0輸入。
完整寫(xiě)法:
read -p "input name:" name <&0
<表示輸入動(dòng)作;
&0表示從鍵盤(pán)接收輸入;
中間無(wú)空格。
輸出
echo $name
echo命令默認(rèn)?標(biāo)準(zhǔn)輸出到&1(顯示器)、?標(biāo)準(zhǔn)錯(cuò)誤還是到&2(還是顯示器)。
完整寫(xiě)法:
echo $name 1>&1 2>&2
其中空格很少,加了會(huì)報(bào)錯(cuò)。
>表示輸出動(dòng)作;
1>表示其中的標(biāo)準(zhǔn)輸出的內(nèi)容的處理,&1表示顯示器;
2>表示其中標(biāo)準(zhǔn)錯(cuò)誤的內(nèi)容的處理,&2表示顯示器。
下一節(jié)我們會(huì)把&1,&2替換成不同文件,那么就實(shí)現(xiàn):一個(gè)文件存正常內(nèi)容,一個(gè)文件存錯(cuò)誤內(nèi)容。
完整內(nèi)容如下:
read -p "input name:" name <&0
echo $name 1> &1 2>&2

運(yùn)行效果與不加完全一樣。成功。