小鳥初學Shell程式設計(五)輸入輸出重定向

2022-01-10 01:09:36 字數 3212 閱讀 4485

乙個程序缺省會開啟標準輸入、標準輸出、錯誤輸出三個檔案描述符。

重定向可以讓我們的程式的標準輸出、錯誤輸出的資訊重定向檔案裡,那麼這裡還可以將檔案的內容代替鍵盤作為一種標準輸入的方式。

01 輸入重定向符號"<"的作用:

會把檔案的內容當做引數輸入到程序,如下例子:

[root@omp120 home]# cat file.txt 

hello

[root@omp120 home]# read a < file.txt

[root@omp120 home]# echo $a

hello

file.txt檔案的內容是hello,上述的例子就是把file.txt的內容重定向到a這個變數,並把a變數列印出來。

01 輸出重定向符號">"的作用:

會把檔案內容清空,在把輸出內容重定向到指定的檔案裡,並且如果檔案不存在則建立,如下例子:

[root@lincoding tmp]# echo 123 > /tmp/test

[root@lincoding tmp]# cat /tmp/test

123[root@lincoding tmp]# echo abc > /tmp/test

[root@lincoding tmp]# cat /tmp/test

abc

02 輸出重定向符號">>"的作用:

會把輸出的內容追加到指定的檔案裡,該檔案不會被清空,並且如果檔案不存在則建立,如下例子:

[root@lincoding tmp]# echo 123 >> /tmp/test

[root@lincoding tmp]# cat /tmp/test

123[root@lincoding tmp]# echo abc >> /tmp/test

[root@lincoding tmp]# cat /tmp/test

123abc

03 輸出重定向符號"2>"的作用:

是把程序錯誤輸出的內容重定向到指定的檔案裡,如下例子:

[root@lincoding home]# abc 

-bash: abc: command not found

[root@lincoding home]# abc > error.txt

-bash: abc: command not found

[root@lincoding home]# cat error.txt

[root@lincoding home]#

[root@lincoding home]# abc 2> error.txt

[root@lincoding home]# cat error.txt

-bash: abc: command not found

以上的演示結果可以得知,abc不是linux的命令,執行了會報錯說abd命令未找到的錯誤資訊輸出,那麼這個錯誤資訊需要用2>重定向符才能把程序錯誤輸出的內容重定向到指定的檔案。

04 輸出重定向符號"&>"的作用:

無論程序輸出的資訊是正確還是錯誤的資訊,都會重定向到指定的檔案裡,如下例子:

[root@lincoding home]# abc &> file.txt

[root@lincoding home]# cat file.txt

-bash: abc: command not found

[root@lincoding home]# free -m &> file.txt

[root@lincoding home]# cat file.txt

total used free shared buffers cached

mem: 980 918 62 0 71 547

-/+ buffers/cache: 299 681

swap: 1983 0 1983

輸入和輸出也是可以組合使用的,那麼這個組合主要應用於在shell指令碼當中產生新的配置檔案的場景,如下shell指令碼例子:

#!/bin/bash

cat > /home/a.sh << eof

echo "hello bash"

eof

cat命令的輸出重定向到/root/a.sh指令碼檔案,並且用輸入重定向把eof為指令碼結尾。那麼通過執行這個指令碼,就會產生乙個內容為echo "hello bash"檔名為a.sh的指令碼檔案。

執行結果:

[root@lincoding home]# ./test.sh 

[root@lincoding home]# ls -l a.sh

-rw-r--r--. 1 root root 18 sep 27 16:41 a.sh

[root@lincoding home]# chmod u+x a.sh

[root@lincoding home]# cat a.sh

echo "hello bash"

[root@lincoding home]# ./a.sh

hello bash

以上的內容就是關於輸入和輸出重定向的用法,那麼大家要注意輸出重定向包括覆蓋和追加模式,無論是覆蓋還是追加模式,盡量不要用於我們的系統配置檔案,那麼在應用之前大家要注意對系統檔案進行備份。

輸入和輸出重定向,還可以組合使用,一般在shell指令碼當中去產生新的配置檔案的時候,會用到它們的組合的方式。

小鳥初學Shell程式設計(六)變數賦值

我們在使用linux命令或指令碼的時候,會有一些輸出,那麼這些輸出的資訊可以用變數臨時儲存,以備我們下一條命令或指令碼使用。變數的定義建議用乙個有意義的英文單詞來代表變數,不要使用簡單的字母a,b這類的變數名定義。因為我們寫好shell指令碼實際上是要給人看的,所以我們定義好的變數,是希望變數有具體...

小鳥初學Shell程式設計(七)變數引用及作用範圍

那麼定義好變數,如何列印變數的值呢?舉例下變數引用的方式。root lincoding string hello shell root lincoding echo hello shell root lincoding echo string hello shell 那麼有花括號括起來的變數和沒有花...

初學高階程式設計 shell程式設計

初學shell程式設計,遇到的一些問題和總結 一 bin sh 為什麼要在shell程式裡要加這一行?首先在shell程式設計裡面,符號確實是乙個注釋符號,但是在這裡絕對不是注釋符號,是給的乙個shell的路徑,相當於是給的乙個環境變數。如果沒有加上這一句話,則程式執行會用預設的shell來解釋執行...