shell編程學習筆記之標准輸入輸出(read&echo)


 

2017-07-17 09:32:07


 

輸入read:

  用途:

    從標准輸入讀取一行,或者從文件描述符FD(file descriptor)中讀取一行,並且將其分割成字段。  

用法:

  read [-ers] [-a 數組] [-d 分隔符] [-i 緩沖區文字] [-n 讀取字符數] [-N 讀取字符數] [-p 提示符] [-t 超時] [-u 文件描述符] [名稱 ...]

  常用選項:  

-a:(arrary) 將讀取得的字符划分成單詞,按照數組存儲(從0開始)


源碼:

#!/bin/bash echo "按照單詞的分割放置到數組中,索引從0開始" read -a variable echo "第1個:" echo ${variable[0]} echo "第2個:" echo ${variable[1]} echo "第3個:" echo ${variable[2]} echo "第4個:" echo ${variable[3]}

運行效果:

按照單詞的分割放置到數組中,索引從0開始
34 ew qr34 3qr wer er qw
第1個:
34
第2個:
ew
第3個:
qr34
第4個:
3qr

 

-n:接收指定個數的字符,當達到接收的個術后,立即退出輸入狀態


源碼:
#-n read接收10個字符 
echo "-n read接收10個字符"
read
-n 10 num
echo
echo "接收的10個字符是:"${num}

運行效果:

-n read接受10個字符
sgfgsngfdf
接收的10個字符是:sgfgsngfdf


-p : 允許在read命令后直接指定一個提示,並且可以為多個變量賦值


源碼:
echo "使用-p參數完成多個變量賦值:" 
read
-p "請輸入三個數字或字符:(用空格隔開)" num1 num2 num3

echo "num1="$num1
echo "num2="$num2
echo "num3="$num3

運行效果:
使用-p參數完成多個變量賦值:
請輸入三個數字或字符:(用空格隔開)23 34 345 num1=23 num2=34 num3=345
 


-r:不允許反斜線轉義任何字符


-s:不將read輸入的數據顯示在屏幕上


源碼:
#-s read的輸入不顯示在屏幕上 

echo "-s read的輸入不顯示在屏幕上:"
read
-p "password:" -s password

echo
echo "password is "${password}

運行效果:

-s read的輸入不顯示在屏幕上:
password:
password is 3432 rq erewr w


-t :read命令等待輸入的秒數。當計時滿時,回返回一個非0的狀態,並且退出等待輸入。


源碼:
#-t read的輸入的等待時間 
echo "將會等等待兩秒的輸入,超時后,會退出等待;返回非0數值"
read
-t 2 num
echo ${num}

運行效果:

將會等等待兩秒的輸入,超時后,會退出等待;返回非0數值

 


-u:從文件描述符FD(file descriptor)讀取。

 

   補充內容文件描述符FD
  文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向 內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於 UNIXLinux這樣的操作系統。
  習慣上,標准輸入(standard input)的文件描述符是 0,標准輸出(standard output)是 1,標准錯誤(standard error)是 2。盡管這種習慣並非 Unix內核的特性,但是因為一些 shell 和很多應用程序都使用這種習慣,因此,如果內核不遵循這種習慣的話,很多應用程序將不能使用。

 從文件讀取的例子:

 
         
源碼:
# read接受文本作為輸入
echo " read接受文本作為輸入"
cat test.sh | while read line  #cat 命令的輸出作為read命令的輸入,read讀到的值放在line中
do
    echo 
    echo "接收的文本字符是:"${line}
done


運行效果:
read接受文本作為輸入

接收的文本字符是:#------------------------------------------

接收的文本字符是:#------------------------------------------

接收的文本字符是:# read接受文本作為輸入

接收的文本字符是:echo " read接受文本作為輸入"

接收的文本字符是:cat test.sh | while read line

接收的文本字符是:do

接收的文本字符是:echo

接收的文本字符是:echo "接收的文本字符是:"${line}

接收的文本字符是:done

 


2017-07-18  09:24:25


 

輸出(echo):

  用途 :在標准輸出上輸出傳遞過來的內容。

  用法:    

    echo [SHORT-OPTION]... [STRING]...

  常用選項:

    -n : 輸出內容不換行

 
         
源碼:
#-n 輸出文字不換行
echo -n "this is a test echo "

運行效果:
this is a test echo hello 

 

    -e:輸出特殊字符的含義,也就是輸出字符轉義后的意義。

 
         
源碼:
#-e 輸出特殊字符
echo  "hello ,\n my name \tis ***"
echo -e "hello ,\n my name \tis ***"
 
         
運行效果:

hello ,\n my name \tis ***
hello ,
my name is ***

    特殊字符及其作用:

字符 作用
\t     插入tab
\n     換行並且光標移動至行首
\f      換行但光標停留在原來的位置
\b     刪除前一個字符
\r     光標移動至行首,但不換行
\\     插入\字符

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM