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 用户。