在s h e l l腳本中,可以用幾種不同的方式讀入數據:可以使用標準輸入—預設為鍵盤,或者指定一個文件作為輸入。對於輸出也是一樣:如果不指定某個文件作為輸出,標準輸出總是和終端屏幕相關聯。如果所使用命令出現了什麼錯誤,它也會預設輸出到屏幕上,如果不想把這些信息輸出到屏幕上,也可以把這些信息指定到一個文件中。
5.1 echo
使用e c h o命令可以顯示文本行或變量,或者把字符串輸入到文件。它的一般形式為:
echo string
e c h o命令有很多功能,其中最常用的是下面幾個:
c 不換行。
進紙。
跳格。
換行。
如果希望提示符出現在輸出的字符串之後,可以用
上面的命令將會有如下的顯示:
其中「□」是光標。
如果想在輸出字符之後,讓光標移到下一行,可以用:
$ echo "The red pen ran out of ink"
還可以用e c h o命令輸出轉義符以及變量。在下面的例子中,你可以讓終端鈴響一聲,顯示出$ H O M E目錄,並且可以讓系統執行 t t y命令(注意,該命令用鍵盤左上角的符號,法語中的抑音符引起來,不是單引號, )。
如果是LINUX系統,那麼......必須使用- n選項來禁止echo命令輸出後換行:
還可以在e c h o語句中使用跳格符,記住別忘了加反斜槓 :
如果想把一個字符串輸出到文件中,使用重定向符號 >。在下面的例子中一個字符串被重定向到一個名為m y f i l e的文件中:
$ echo "The log files have all been done"> myfile
或者可以追加到一個文件的末尾,這意味著不覆蓋原有的內容:
$ echo "$LOGNAME carried them out at `date`">>myfile
現在讓我們看一下m y f i l e文件中的內容:
初涉s h e l l的用戶常常會遇到的一個問題就是如何把雙引號包含到 e c h o命令的字符串中。
引號是一個特殊字符,所以必須要使用反斜槓 來使s h e l l忽略它的特殊含義。假設你希望使用e c h o命令輸出這樣的字符串: 「/ d e v / r m t 0」,那麼我們只要在引號前面加上反斜槓 即可:
$ echo ""/dev/rmt0""
" / d e v / r m t 0 "
5.2 read
可以使用r e a d語句從鍵盤或文件的某一行文本中讀入信息,並將其賦給一個變量。如果只指定了一個變量,那麼 r e a d將會把所有的輸入賦給該變量,直至遇到第一個文件結束符或回車。
它的一般形式為:
read varible1 varible2 ...
在下面的例子中,只指定了一個變量,它將被賦予直至回車之前的所有內容:
在下面的例子中,我們給出了兩個變量,它們分別被賦予名字和姓氏。 s h e l l將用空格作為變量之間的分隔符:
如果輸入文本域過長, Shell 將所有的超長部分賦予最後一個變量。下面的例子,假定要讀取變量名字和姓,但這次輸入三個名字;結果如下;
在上面的例子中,如果我們輸入字符串 John Lemon Doe,那麼第一個單詞將被賦給第一個變量,而由於變量數少於單詞數,字符串後面的部分將被全部賦給第二個變量。
在編寫s h e l l腳本的時候,如果擔心用戶會對此感到迷惑,可以採用每一個 r e a d語句只給一個變量賦值的辦法:
用戶在運行上面這個腳本的時候,就能夠知道哪些信息賦給了哪個變量。