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

來源:互聯網
上載者:User

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

 

2017-07-17 09:32:07

 

輸入read:

  用途:

    從標準輸入讀取一行,或者從檔案描述符FD(file descriptor)中讀取一行,並且將其分割成欄位。  

用法:

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

  常用選項:  

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

源碼:

#!/bin/bashecho "按照單詞的分割放置到數組中,索引從0開始" read -a variableecho "第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=23num2=34num3=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  檔案描述符在形式上是一個非負整數。實際上,它是一個索引值,指向核心為每一個進程所維護的該進程開啟檔案的記錄表。當程式開啟一個現有檔案或者建立一個新檔案時,核心向進程返回一個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述符展開。但是檔案描述符這一概念往往只適用於UNIX、Linux這樣的作業系統。  習慣上,標準輸入(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     游標移動至行首,但不換行
\\     插入\字元

    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.