Linux中read命令示例

时间:2020-03-05 15:29:14  来源:igfitidea点击:

Linux中的read命令是什么?

Linux中的read命令是用户与键盘所采取的输入交互的方式,我们可能会看到称为STDIN(标准输入)或者其他类似说明。

换句话说,如果我们希望Bash脚本从用户输入输入,则必须使用读命令。

read命令示例

read命令可能会令人困惑地开始使用,特别是对于那些新的shell脚本的人。

使用几乎每个程序或者脚本,我们希望从用户(输入)中获取信息,并告诉计算机如何处理该信息(输出)。

使用读取时,我们将传送到要捕获用户输入的BASH终端。
默认情况下,命令将创建一个变量以保存该输入。

read [options] variable_name

现在让我们看看read命令的一些示例,以了解如何在不同情况下使用它。

1.不带选项的read命令

在没有任何其他选项的情况下键入读取时,我们需要按Enter开始捕获。
系统将捕获输入,直到再次点击输入。

默认情况下,此信息将存储在名为"$Reply"的变量中。

要使事情更容易遵循第一个示例,我将使用""符号显示在按下ENTER键时显示。

read 
hello world 
echo $REPLY 
hello world

正如我之前提到的那样,"$REPLY"变量建立在"读取"中,因此我们不必声明它。

如果我们只有一个应用程序,那可能没问题,但可能很可能我们想要使用自己的变量。
当我们使用读取声明变量时,我们无需键入键入变量的名称以外的任何操作。

当我们想调用变量时,我们将在名称前使用$
这是我创建变量linux_tut的一个例子,并将其分配输入的值。

我们可以使用echo命令验证读取命令是否有效:

read linux_tut 
for easy to follow Linux tutorials.
echo $linux_tut 
for easy to follow Linux tutorials.

2.提示选项-p

如果我们正在编写脚本并且我们想要捕获用户输入,则存在一个读取的选项来创建可以简化代码的提示。
编码是关于效率的,对吧?

我们可以简单地使用"-P"选项标志,而不是使用其他行和echo命令。
我们输入引号的文本将按预期显示,用户不需要点击以开始捕获输入。

因此,而不是写这样的代码:

echo "What is your desired username? "
read username

我们可以使用如下所示的读命令使用-p选项:

read -p "What is your desired username? " username

输入将保存到变量$username。

3."秘密"/沉默选项"-s"

我写了一个simpe 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中的读命令来创建自己的数组。
这意味着我们可以将输入的块分配给数组中的元素。
默认情况下,空格密钥将分隔元素。

Hyman@theitroad:~$read -a array
abc def 123 x y z
Hyman@theitroad:~$echo  ${array[@]}
abc def 123 x y z
Hyman@theitroad:~$echo  ${array[@]:0:3}
abc def 123
Hyman@theitroad:~$echo  ${array[0]}
abc
Hyman@theitroad:~$echo  ${array[5]}
z

如果你是阵阵的新手,或者看到第一次抨击时,我会分解发生的事情。

  • 输入所需的元素,用空格分隔。
  • 如果我们只放了@变量,它将迭代并打印整个循环。
  • @符号表示元素编号和冒号之后,我们可以告诉迭代从索引0到索引3(如这里所写)。
  • 在索引0上打印元素。
  • 与上述类似,但表明这些元素被空间分开了

添加超时功能

我们还可以添加超时到我们的阅读。
如果在规定的时间内没有捕获输入,则程序将继续或者结束。

Hyman@theitroad:~$read -t 3
Hyman@theitroad:~$

看起来可能并不明显看输出,但终端在定时并结束读取程序之前等了三秒钟。