English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux read 명령어

Linux 명령어大全

Linux read 명령어는 표준 입력에서 숫자를 읽습니다.

read 내부 명령어는 표준 입력에서 단一行 데이터를 읽는 데 사용됩니다. 이 명령어는 키보드 입력을 읽거나, 리디렉션을 사용할 때 파일의 한 행을 읽을 수 있습니다.

문법

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [이름 ...]

파라미터 설명:

  • -a 뒤에 변수를 따르며, 이 변수가 배열로 간주되고, 그에 값을 할당합니다. 기본적으로 공백으로 구분됩니다.
  • -d 뒤에 식별자를 따르며, 실제로는 그 뒤의 첫 번째 문자만 유용합니다. 종료 표시자로 사용됩니다.
  • -p 뒤에 표시 정보를 따르며, 입력 전에 표시 정보를 출력합니다.
  • -e 입력 중에 명령어 자동 완성 기능을 사용할 수 있습니다.
  • -n 뒤에 숫자를 따르며, 입력 텍스트의 길이를 정의합니다. 매우 실용적입니다.
  • -r 블록화된 문자, 이 옵션이 없다면, 기본적으로 이스케이프 문자로 사용됩니다. 있으면 일반 문자로 사용됩니다.
  • -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
  • -t 后面跟秒数,定义输入字符的等待时间。
  • -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

在线示例

1、简单读取

#!/bin/bash
#这里默认会换行  
echo "输入网站名: "  
#读取从键盘的输入  
read website  
echo "你输入的网站名是 $website"  
exit 0  #退出

测试结果为:

输入网站名: 
ko.oldtoolbag.com
你输入的网站名是 ko.oldtoolbag.com

2,-p 参数,允许在 read 命令行中直接指定一个提示。

#!/bin/bash
read -p "输入网站名:" website
echo "你输入的网站名是 $website" 
exit 0

测试结果为:

输入网站名:ko.oldtoolbag.com
你输入的网站名是 ko.oldtoolbag.com

3,-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。

#!/bin/bash
if read -t 5 -p "输入网站名:" website
then
    echo "你输入的网站名是 $website"
else
    echo "\n抱歉,你输入超时了。"
fi
exit 0

执行程序不输入,等待 5 秒后:

输入网站名:
抱歉,你输入超时了

4、除了输入时间计时,还可以使用 -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 "请随便输入两个字符: " any
echo "\n您输入的两个字符是:$any"
exit 0

执行程序输入两个字符:

请随便输入两个字符: 12
您输入的两个字符是:12

5,-s 옵션은 read 명령어에 입력된 데이터는 명령终端에 표시되지 않습니다.(실제로는 표시되지만, read 명령어는 텍스트의 색상을 배경과 동일한 색상으로 설정합니다). 비밀번호 입력 시 일반적으로 이 옵션을 사용합니다.

#!/bin/bash
read  -s  -p "\u00ec\u00b2\u00b4\u00b9\u00ec\u00b9\u00b4\u00b1\u00b9\u00ec\u00b8\u00b9\u00b4\u00b1\u00ec\u00b9\u00b4\u00b1\u00b9\u00ec\u00b8\u00b9\u00b4\u00b1:\" pass
echo "\n\u00ec\u00b2\u00b4\u00b9\u00ec\u00b9\u00b4\u00b1\u00b9\u00ec\u00b8\u00b9\u00b4\u00b1 $pass"
exit 0

프로그램을 실행하고 비밀번호를 입력하면 표시되지 않습니다:

당신의 비밀번호를 입력하세요:
입력하신 비밀번호는 w입니다3codebox

6. 파일 읽기

read 명령어가 호출될 때마다 파일의 "한 행" 텍스트를 읽습니다. 파일에 더 이상 읽을 수 있는 행이 없을 때, read 명령어는 μη zero 상태로 종료됩니다.

파일 내의 데이터를 read 명령어에 어떻게 전달할 수 있습니까? cat 명령어를 사용하여 파이프를 통해 결과를 read 명령어가 포함된 while 명령어에 직접 전달합니다.

테스트 파일 test.txt 내용은 다음과 같습니다:

123
456
w3codebox

테스트 코드:

#!/bin/bash
count=1    # 할당 문장, 공백 없이
cat test.txt | while read line      # cat 명령어의 출력을 read 명령어의 입력으로 사용, read는 '>'의 값을 line에 넣습니다
do
   echo "라인 $count:$line"
   count=$[ $count + 1 ]          # 중괄호 내의 공백을 주의하세요。
done
echo "finish"
exit 0

실행 결과는 다음과 같습니다:

라인 1:123
라인 2:456
라인 3:w3codebox
finish

사용 -e 파라미터를 사용하여 다음 예제 입력 문자 a 다음에 누르세요 Tab 키가 입력되면 관련 파일 이름이 출력됩니다(이 디렉토리에 존재하는 경우):

$ read -e -p "파일 이름 입력:" str 
파일 이름 입력: a
a.out    a.py     a.pyc    abc.txt  
파일 이름 입력: a

Linux 명령어大全