基礎命令(二十)

2021-10-06 06:41:54 字數 3176 閱讀 5002

read命令用於從標準輸入讀取數值。

read 內部命令被用來從標準輸入讀取單行資料。這個命令可以用來讀取鍵盤輸入,當使用重定向的時候,可以讀取檔案中的一行資料。

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name …]

引數說明:

-a 後跟乙個變數,該變數會被認為是個陣列,然後給其賦值,預設是以空格為分割符。

-d 後面跟乙個標誌符,其實只有其後的第乙個字元有用,作為結束的標誌。

-p 後面跟提示資訊,即在輸入前列印提示資訊。

-e 在輸入的時候可以使用命令補全功能。

-n 後跟乙個數字,定義輸入文字的長度,很實用。

-r 遮蔽\,如果沒有該選項,則\作為乙個轉義字元,有的話 \就是個正常的字元了。

-s 安靜模式,在輸入字元時不再螢幕上顯示,例如login時輸入密碼。

-t 後面跟秒數,定義輸入字元的等待時間。

-u 後面跟fd,從檔案描述符中讀入,該檔案描述符可以是exec新開啟的。

簡單讀取

#!/bin/bash

#這裡缺省會換行

echo "輸入**名: "

#讀取從鍵盤的輸入

read website

echo "你輸入的**名是 $website"

exit 0

#退出

測試結果為:

輸入**名: 

www.runoob.com

你輸入的**名是 www.runoob.com

-p 引數,允許在 read 命令列中直接指定乙個提示。

#!/bin/bash

read -p "輸入**名:" website

echo "你輸入的**名是 $website"

exit 0

測試結果為:

輸入**名:www.runoob.com

你輸入的**名是 www.runoob.com

-t 引數指定 read 命令等待輸入的秒數,當計時滿時,read命令返回乙個非零退出狀態。

#!/bin/bash

if read -t 5

-p "輸入**名:" website

then

echo "你輸入的**名是 $website"

else

echo "\n抱歉,你輸入超時了。"

fiexit 0

執行程式不輸入,等待 5 秒後:

輸入**名:

抱歉,你輸入超時了

除了輸入時間計時,還可以使用 -n 引數設定 read 命令計數輸入的字元。當輸入的字元數目達到預定數目時,自動退出,並將輸入的資料賦值給變數。

#!/bin/bash

read -n1 -p "do you want to continue [y/n]?" answer

case $answer in

y | y)

echo "fine ,continue";;

n | n)

echo "ok,good bye";;

*)echo "error choice";;

esac

exit 0

該例子使用了-n 選項,後接數值 1,指示 read 命令只要接受到乙個字元就退出。只要按下乙個字元進行回答,read 命令立即接受輸入並將其傳給變數,無需按回車鍵。

只接收 2 個輸入就退出:

#!/bin/bash

read -n2 -p "請隨便輸入兩個字元: "

anyecho "\n您輸入的兩個字元是:$any"

exit 0

執行程式輸入兩個字元:

請隨便輸入兩個字元:

12您輸入的兩個字元是:

12

-s 選項能夠使 read 命令中輸入的資料不顯示在命令終端上(實際上,資料是顯示的,只是 read 命令將文字顏色設定成與背景相同的顏色)。輸入密碼常用這個選項。

#!/bin/bash

read -s -p "請輸入您的密碼:"

pass

echo "\n您輸入的密碼是 $pass"

exit 0

執行程式輸入密碼後是不顯示的:

請輸入您的密碼:

您輸入的密碼是 runoob

讀取檔案

每次呼叫 read 命令都會讀取檔案中的 「一行」 文字。當檔案沒有可讀的行時,read 命令將以非零狀態退出。

通過什麼樣的方法將檔案中的資料傳給 read 呢?使用 cat 命令並通過管道將結果直接傳送給包含 read 命令的 while 命令。

測試檔案 test.txt 內容如下:

123

456runoob

測試**:

#!/bin/bash

count=

1# 賦值語句,不加空格

cat test.txt |

while read line # cat 命令的輸出作為read命令的輸入,read讀到》的值放在line中

do echo "line $count:$line"

count=$[ $count +1]

# 注意中括號中的空格。

done

echo "finish"

exit 0

執行結果為:

line 1

:123

line 2

:456

line 3

:runoob

finish

$ read -e -p "輸入檔名:"

str

輸入檔名:a

a.out a.py a.pyc abc.txt

輸入檔名:a

命令二十 chmod

檔案或目錄的許可權包括唯讀,可寫和可執行3種,唯讀表示只能讀取檔案的內容,可寫表示檔案內容可以被修改,可執行表示檔案內容是可以執行的。一般來說,檔案建立時建立者自動擁有這三種許可權。linux系統中有3中使用者型別 檔案所有者,同使用者組使用者,其他使用者。現使用ls l檢視檔案的使用者許可權 ro...

Linuxc基礎 二十三

位運算子 1 位操作需要用巨集定義好後在使用。2 如果位操作符 和 3 位運算不能用於基本型別是有符號的運算元上。4 一元減運算子不能用在基本型別無符號的表示式上,除非在使用之前對兩個運算元進行大小判斷,且被減數必須大於減數。左移和右移是雙目運算子。和 作為字首是先自加或自減然後再做別的運算。和 作...

Linux基礎(二十三)

進入linux字元介面方式有字元介面 圖形介面下的終端以及虛擬控制台等方式。在字元介面下,虛擬控制台的選擇可以通過按下 alt 鍵和1個功能鍵來實現,功能鍵通常為f1 f6鍵。比如使用者登入後,按下 alt f2 鍵,使用者可以看 login 提示符,說明使用者進入了第2個虛擬控制台。然後只需利用按...