shell指令碼不使用exec,同時讀取兩個檔案

2021-10-14 13:19:05 字數 1823 閱讀 8259

還是需要用到檔案重定向(翻譯成白話就是告訴機器使用哪個檔案進行輸入輸出)

網上大多讀取兩個檔案的操作是使用exec實現檔案重定向,但是這樣exec後,檔案重定向操作會永久生效

但是一般只希望在當前命令中有效,之後就沒用了。

比如:意思是從 3 號 fd (file descriptor,檔案描述符) 中讀一行資料到 i 變數中

意思是從 4 號 fd (file descriptor,檔案描述符) 中讀一行資料到 j 變數中

0,1,2 被系統佔了

一般情況下,每個 unix/linux 命令執行時都會開啟三個檔案:

所以得從3開始

比如:

[root@vm10-0-0-63 chbenchmark]# head -n 1 /data/chbenchmark/settings

# ******************** 連線設定 ********************

[root@vm10-0-0-63 chbenchmark]# read -u3 i 3<"/data/chbenchmark/settings";echo $i

# ******************** 連線設定 ********************

第乙個命令是輸出檔案第一行,第二個命令是重定向檔案後,讀取第一行

可以看到結果是相同的

比如:

[root@vm10-0-0-63 chbenchmark]# for ((i=0;i<5;i++));

> do

> read -u3 line

> echo $line

> done 3<"/data/chbenchmark/settings"

# ******************** 連線設定 ********************

host=("10.0.0.63" "10.0.0.144" "10.0.0.136")

port=(9000 9000 9000)

user=default

password=""

[root@vm10-0-0-63 chbenchmark]# head -n 5 /data/chbenchmark/settings

# ******************** 連線設定 ********************

host=("10.0.0.63" "10.0.0.144" "10.0.0.136")

port=(9000 9000 9000)

user=default

password=""

第乙個命令是重定向檔案後,讀取前5行

第二個命令是輸出檔案前5行

可以看到結果是相同的

比如:

[root@vm10-0-0-63 chbenchmark]# head -n 5 a b

==> a <==12

345==> b <==ab

cde[root@vm10-0-0-63 chbenchmark]# for ((i=0;i<5;i++));

> do

> read -u3 linea

> read -u4 lineb

> echo $linea

> echo $lineb

> done 3<"/data/chbenchmark/a" 4<"/data/chbenchmark/b"1a

2b3c

4d5e

何時讀取下一行,讀取什麼檔案之類的都可以使用if來設定

這樣就可以根據需求自由設定了。

使用exec函式組呼叫執行shell指令碼

linux下的exec函式不是單一的函式,而是乙個函式組,分別為 cpp view plain copy intexecl const char path,const char arg,intexeclp const char file,const char arg,intexecle const ...

shell指令碼exec和tailf的筆記

exec 不會建立子程序,在當前shell執行命令,執行完後,就退出了 tailf 可以持續追加檔案內容 cat tmp tmp.log test1 test23445 hello world nihao exec while read line do echo line done執行結果如下 7 ...

shell指令碼不換行重新整理資料

bin bash while 1 do a ifconfig eth0 grep rx pac awk awk f echo ne a r 不換行重新整理資料 doneecho 參 數 n 不要在最後自動換行 e 若字串中出現以下字元,則特別加以處理,而不會將它當成一般文字輸出 a 發出警告聲 b ...