所謂程式碼塊,就是由多條語句組成的一個整體;for、while、until 迴圈,或者 if...else、case...in 選擇結構,或者由
{ }
包圍的命令都可以稱為程式碼塊。
請轉到《Shell組命令》了解更多關於{}
的細節。
將重定向命令放在程式碼塊的結尾處,就可以對程式碼塊中的所有命令實施重定向。
【範例1】使用 while 迴圈不斷讀取 nums.txt 中的數位,計算它們的總和。
#!/bin/bash
sum=0
while read n; do
((sum += n))
done <nums.txt #輸入重定向
echo "sum=$sum"
將程式碼儲存到 test.sh 並執行:
[c.biancheng.net]$ cat nums.txt
80
33
129
71
100
222
8
[c.biancheng.net]$ . ./test.sh
sum=643
對上面的程式碼進行改進,記錄 while 的讀取過程,並將輸出結果重定向到 log.txt 檔案:
#!/bin/bash
sum=0
while read n; do
((sum += n))
echo "this number: $n"
done <nums.txt >log.txt #同時使用輸入輸出重定向
echo "sum=$sum"
將程式碼儲存到 test.sh 並執行:
[c.biancheng.net]$ . ./test.sh
sum=643
[c.biancheng.net]$ cat log.txt
this number: 80
this number: 33
this number: 129
this number: 71
this number: 100
this number: 222
this number: 8
【範例2】對
{}
包圍的程式碼使用重定向。
#!/bin/bash
{
echo "C語言中文網";
echo "http://c.biancheng.net";
echo "7"
} >log.txt #輸出重定向
{
read name;
read url;
read age
} <log.txt #輸入重定向
echo "$name已經$age歲了,它的網址是 $url"
將程式碼儲存到 test.sh 並執行:
[c.biancheng.net]$ . ./test.sh
C語言中文網已經7歲了,它的網址是 http://c.biancheng.net
[c.biancheng.net]$ cat log.txt
C語言中文網
http://c.biancheng.net
7