Linux 中 Read 命令的 5 个实用示例
Linux 中的 read 命令是什么?
Linux 中的 read 命令是用户与键盘输入进行交互的一种方式,您可能会看到它被称为stdin(标准输入)或其他类似的描述。
换句话说,如果您希望 bash 脚本接受用户的输入,则必须使用 read 命令。
我将编写一些简单的 bash 脚本来向您展示 read 命令的实际用法。
阅读命令示例
read 命令一开始可能会让人困惑,特别是对于那些刚接触 shell 脚本的人来说。我将在这里使用的脚本非常容易理解,并且应该很容易遵循,特别是如果你跟着教程练习的话。
基本编程概念
对于几乎每个程序或脚本,您都希望从用户那里获取信息(输入)并告诉计算机如何处理该信息(输出)。
当您使用 read 时,您正在向 bash 终端传达您想要捕获来自用户的输入的信息。默认情况下,该命令将创建一个变量来保存该输入。
read [options] variable_name
现在让我们看一些读取命令的例子,以了解如何在不同情况下使用它。
1. 不带选项的读取命令
当您输入 read 而不输入任何附加选项时,您需要按 Enter 键来开始捕获。系统将捕获输入,直到您再次按 Enter 键。
默认情况下,此信息将存储在名为的变量中$REPLY
。
为了使第一个例子更容易理解,我将使用↵
按下回车键时显示的符号。
read ↵
hello world ↵
echo $REPLY ↵
hello world
关于变量的更多信息
正如我之前提到的,$REPLY
变量是内置的read
,因此您不必声明它。
如果您只想开发一个应用程序,那么这可能没问题,但您更可能想要使用自己的变量。使用 read 声明变量时,除了输入变量名称外,您无需执行任何其他操作。
当您想要调用变量时,您将$
在名称前面使用。下面是一个示例,我创建了变量Linux_Handbook
并为其分配了输入的值。
您可以使用echo 命令来验证 read 命令是否发挥了作用:
read Linux_Handbook ↵
for easy to follow Linux tutorials.
echo $Linux_Handbook ↵
for easy to follow Linux tutorials.
提醒:变量名区分大小写。
2. 提示选项-p
如果您正在编写脚本并且想要捕获用户输入,则可以使用读取选项来创建提示,从而简化您的代码。编码的关键在于效率,对吧?
您无需使用额外的行和 echo 命令,只需使用-p
选项标志即可。您在引号中输入的文本将按预期显示,用户无需按 Enter 即可开始捕获输入。
因此,您不需要编写如下两行代码:
echo "What is your desired username? "
read username
您可以将-p
选项与读取命令一起使用,如下所示:
read -p "What is your desired username? " username
输入将被保存到变量 $username 中。
3.“秘密”/静默选项-s
我写了一个简单的 bash 脚本来演示下一个标志。首先看一下输出。
bash secret.sh
What is your desired username? tuxy_boy
Your username will be tuxy_boy.
Please enter the password you would like to use:
You entered Pass123 for your password.
Masking what's entered does not obscure the data in anyway.
secret.sh
如果您想重新创建它,这是内容。
#!/bin/bash
read -p "What is your desired username? " username
echo "Your username will be" $username"."
read -s -p "Please enter the password you would like to use: " password
echo
echo "You entered" $password "for your password."
echo "Masking what's entered does not obscure the data in anyway."
如您所见,该-s
选项在输入密码时屏蔽了输入。然而,这只是一种表面技术,并不能提供真正的安全性。
4. 使用字符限制和阅读选项-n
您可以为输入添加约束并将其长度限制为 n 个字符。
让我们使用之前的相同脚本,但对其进行修改,以便输入限制为 5 个字符。
read -n 5 -p "What is your desired username? " username
只需添加-n N
您选择的数字 N 即可。
我对我们的密码做了同样的事情。
bash secret.sh
What is your desired username? tuxy_Your username will be tuxy_.
Please enter the password you would like to use:
You entered boy for your password.
如您所见,程序在输入用户名 5 个字符后停止收集输入。
然而,只要我输入↵
后点击,我仍然可以写少于 5 个字符。
如果您想限制这一点,您可以使用-N
(而不是 -n)这种修改使得需要正好 5 个字符,不多也不少。
5. 将信息存储在数组中-a
您还可以使用 Linux 中的 read 命令来创建自己的数组。这意味着我们可以将输入块分配给数组中的元素。默认情况下,空格键将分隔元素。
christopher@pop-os:~$ read -a array
abc def 123 x y z
christopher@pop-os:~$ echo ${array[@]}
abc def 123 x y z
christopher@pop-os:~$ echo ${array[@]:0:3}
abc def 123
christopher@pop-os:~$ echo ${array[0]}
abc
christopher@pop-os:~$ echo ${array[5]}
z
如果您不熟悉数组,或者是第一次看到它们在 bash 中的用法,我会分解发生的情况。
- 输入所需元素,以空格分隔。
- 如果我们只放置@变量,它将迭代并打印整个循环。
- @ 符号代表元素编号,加上后面的冒号,我们可以知道从索引 0 到索引 3 进行迭代(如此处所写)。
- 打印索引 0 处的元素。
- 与上面类似,但表明元素之间由空格分隔
额外提示:添加超时功能
您还可以为我们的读取添加超时。如果在规定的时间内未捕获任何输入,程序将继续或结束。
christopher@pop-os:~$ read -t 3
christopher@pop-os:~$
从输出来看可能不太明显,但终端等待了三秒钟才超时并结束读取程序。
结论
我希望本教程能帮助您开始使用 Linux 中的 read 命令。与往常一样,我们很乐意听取读者对他们感兴趣的内容的意见。请在下方发表评论并与我们分享您的想法!