Linux read 命令指南


介绍

当我们在使用 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”选项,它允许我们为 read 命令设置超时。当我们想要读取用户的输入,但又不想无限期地等待他们输入时,这很有用。

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

在此代码中,“-t”选项用于为 read 命令设置 10 秒的超时。如果用户在 10 秒内输入了他们的姓名,则它将存储在变量“name”中,并且脚本将输出“Hello”,后跟用户的姓名。如果用户在 10 秒内未输入姓名,则脚本将输出“Timed out!!”。

Enter your name: 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 用户。

更新于: 2023年3月29日

4K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告