Linux read 命令指南

linuxoperating systemopen source更新于 2026/2/7 7:52:17

简介

在使用 Linux 命令行时,我们经常需要与用户或文件的输入进行交互。这时,"read"命令就派上用场了。它是一个简单而强大的命令,可以在 Linux 中以多种方式处理输入。通过学习如何以各种方式使用 read 命令,我们可以更熟练地使用此命令,并更高效地自动执行任务。

让我们介绍 Linux read 命令的所有方法和格式。我们将从基础知识开始,包括如何读取用户输入以及如何自定义输入分隔符。然后,我们将讨论更高级的主题,例如从文件和其他命令读取输入。

使用 read 命令的基本方法

read 命令最基本的用法是读取用户输入。为此,只需输入"read"后跟一个变量名即可。例如 -

$ read name
Somdeb
$ echo "Hello $name"

运行此代码时,系统会提示用户输入其姓名。输入姓名后,值将存储在变量"name"中,脚本将输出"Hello"后跟姓名。

Hello Somdeb

使用 read 命令的高级方法

Linux 中的 read 命令具有高级选项,可以更灵活地控制输入的处理方式。让我们来探索这些高级方法 -

  • -d delim - 此选项允许我们指定输入行的分隔符,而不是使用默认的换行符。

  • -u fd − 默认情况下,read 命令从标准输入 (stdin) 读取输入,但使用此选项,我们可以从特定的文件描述符读取输入。

  • -r − 通常,read 命令将反斜杠字符 () 视为转义字符,但使用此选项时,反斜杠将被视为常规字符。

  • -t timeout − 此选项设置读取输入的超时时间,尝试在给定的秒数内读取输入。如果在收到输入之前达到超时,read 命令将终止。

  • –p prompt − 在请求输入之前显示提示文本,以增强用户体验。

Read 命令有几种高级方法可用于自定义其行为。其中一种方法是使用"-t"选项,它允许我们为读取命令设置超时时间。当我们想要读取用户的输入,但又不想无限期地等待他们输入时,这个选项非常有用。

$ if read -t 10 -p "Enter your name: " name; then
   echo "Hello $name"
else
   echo "Timed out!!"
fi

在此代码中,使用"-t"选项将读取命令的超时设置为 10 秒。如果用户在 10 秒内输入其姓名,则该姓名将存储在变量"name"中,并且脚本将输出"Hello"后跟用户名。如果用户在 10 秒内未输入其姓名,则脚本将输出"Timed out!!"。

输入您的姓名:Somdeb Nath
Hello Somdeb Nath

另一种高级方法是将多个值读入多个变量。为此,只需在"read"命令后列出变量名称,并用空格分隔即可。

$ read firstname middlename lastname
Sk. Adil Hussain
$ echo "Hello [$firstname] [$middlename] [$lastname]"

此代码提示用户输入名字、中间名和姓氏。输入后,这些值分别存储在变量"firstname"、"middlename"和"lastname"中。脚本将返回以下输出 -

Hello [Sk.] [Adil] [Hussain]

使用 read 命令从文件读取输入

当我们想要获取特定字段的数据时,从文件读取输入非常有用。例如,假设有一个包含自行车数据的文件 (file.txt) -

bike,model,year,vin
Honda,CRF450R,2022,JH2PE1030NK200013
Kawasaki,Z400,2021,JKAZR2A10MA042809
Yamaha,YZF-R6,2020,JYARJ28E8LA000081

为了读取此文件,我们可以使用循环读取文件的每一行并进行处理。

$ while read line; do
   echo $line
done < file.txt

在此代码中,"while"循环读取文件"file.txt"的每一行并将其存储在变量"line"中。然后,"echo"命令输出"line"的值。此循环将持续进行,直到读取文件中的所有行。

使用 read 命令读取文件输入

使用 read 命令时,我们还可以读取其他命令的输入,这对于处理大量数据非常有用。一个常见的用例是将命令的输出重定向到 read 命令的输入。

以下示例展示了如何重定向 ls 命令的输出并从根文件夹提取文件名及其访问权限 -

$ ls -l / | while read -r line; do
   filename=$(echo $line | awk '{print $9}')
   rights=$(echo $line | awk '{print $1}')
   echo "File: $filename, Access Rights: $rights"
done

我们使用 ls -l / 命令列出根文件夹中的所有文件及其访问权限。输出通过管道传输到 while 循环,该循环使用 read 命令读取每一行。awk 命令从每一行中提取文件名和访问权限,并使用 echo 命令将其打印出来。

File: , Access Rights: total
File: bin, Access Rights: lrwxrwxrwx
File: boot, Access Rights: drwxr-xr-x
File: cdrom, Access Rights: drwxrwxr-x
File: dev, Access Rights: drwxr-xr-x
File: etc, Access Rights: drwxr-xr-x

结论

read 命令是与 Linux 终端交互的强大工具。它可以用来读取用户或文件的输入,并且它有几个高级选项允许我们自定义其行为。掌握 read 命令,我们可以成为更高效、更高效的 Linux 用户。


相关文章


有用资源