15 个 Linux 读取命令示例

2023-10-18

The readLinux 中的命令允许您从标准输入或文件中读取输入。

它允许您接收数据并将其分配给变量。本教程将指导您完成不同的选项read命令。

 

 

读取用户的输入

的基本用途read命令是从用户那里获取输入。这是一个简单的例子:


echo "Please enter your name:"
read name
echo "Welcome, $name!"
  

当您运行上面的脚本时,您将看到:


Please enter your name:
  

然后输入您的名字,例如“John”,输出将变为:


Welcome, John!
  

在这里,回显命令提示输入您的姓名,然后read命令将您的输入存储在变量中name。最后,echo命令会打印一条带有您输入的姓名的欢迎消息。

 

从文件中读取输入

The read命令可用于从文件中逐行读取输入。操作方法如下:


while IFS= read -r line
do
  echo "Line: $line"
done < file.txt
  

If file.txt包含:


First line
Second line
  

输出将是:


Line: First line
Line: Second line
  

在这个例子中,我们使用一个while 循环read命令与-r读取每一行的选项file.txt.

The IFS变量设置为空值以保留前导和尾随空格,并且每一行都会回显到控制台。

 

指定分隔符

The read默认情况下,命令读取输入直到遇到换行符(\n).

但是,在某些情况下您可能想要更改此默认行为,这就是-d选项开始发挥作用。

随着-d选项,您可以指定除换行符之外的分隔符。


echo "Enter Text and to finish, write semicolon"
read -d ';' text
echo "The Text: $text"  

在此示例中,-d ';'选项告诉read命令读取输入直到遇到分号。

 

将值读入数组(多个值)

The -a选项允许您将输入值读取到数组中。这是一个例子:


echo "Please enter four numbers separated by space:"
read -a numbers
echo "You entered: ${numbers[0]}, ${numbers[1]}, ${numbers[2]}, ${numbers[3]}"
  

如果您输入:


10 20 30 40
  

输出将是:


You entered: 10, 20, 30, 40
  

上面的示例读取输入数字并将它们存储在名为的数组中numbers。然后使用数组索引访问数组中的值。

 

发送前导航/编辑输入

The -e选项中的read命令启用 Readline 支持,允许您使用箭头键、删除键等编辑输入行。


echo "Please enter a sentence (use arrow keys to navigate):"
read -e sentence
echo "You entered: $sentence"
  

运行此代码时,您可以使用箭头键浏览文本,编辑文本,当您按 Enter 时,它将显示:


You entered: [Your edited sentence]
  

通过启用 Readline,您可以在收集用户输入时提供增强的编辑体验。

 

编辑预加载文本

随着-i选项,您可以使用用户可以编辑的特定文本预加载输入缓冲区。


echo "Edit the following sentence:"
read -e -i "The quick brown fox jumps over the lazy dog." sentence
echo "You entered: $sentence"
  

当您运行此命令时,输入行将预加载:


The quick brown fox jumps over the lazy dog.
  

您可以编辑这句话,最终输出将反映您的更改:


You entered: [Your edited sentence]
  

The -i选项结合-e启用 Readline 并预加载文本,提供一种强大的方式来提供用于编辑的默认输入。

 

最多读取 NCHARS 个字符

The -n选项允许您指定要读取的字符数,而不是读取整行。


echo "Enter your 5-character username:"
read -n 5 username
echo "You entered: $username"
  

如果您输入:


James
  

输出将是:


You entered: James
  

此示例将输入限制为正好 5 个字符。该命令在输入 5 个字符后返回,无需等待 Enter 键。

 

准确读取 NCHARS 字符

The -N选项精确读取指定数量的字符,与-n选项,如果遇到换行符,则返回更少的字符。


echo "Enter exactly 5 characters:"
read -N 5 exact_chars
echo "You entered: $exact_chars"
  

如果您输入:


Linux
  

输出将是:


You entered: Linux
  

即使在第五个字符之前输入了换行符,上面的示例也恰好读取 5 个字符。这确保了输入的特定长度。

 

读取前输出字符串PROMPT

随着-p选项,您可以在读取输入之前直接输出提示字符串。


read -p "Enter your name: " name
echo "Welcome, $name!"
  

如果您输入:


Alice
  

输出将是:


Welcome, Alice!
  

在这里,-p选项用于直接从read命令,无需单独的echo命令。

 

不要将反斜杠解释为转义字符

默认情况下,输入中的反斜杠被视为转义字符。这-r选项禁用此行为。


echo "Enter a string with backslashes:"
read -r backslashes
echo "You entered: $backslashes"
  

如果您输入:


This is a test with backslashes: \test\example
  

输出将完全相同:


You entered: This is a test with backslashes: \test\example
  

 

静音模式

The -s选项允许您在键入字符时抑制字符的回显。这通常用于输入密码。


read -s -p "Enter your password: " password
echo "Password entered successfully!"
  

当您输入密码时:


[Your password]
  

Output:


Password entered successfully!
  

您的密码不会显示在屏幕上。

 

超时并返回失败

The -t选项允许您设置超时read命令。如果在指定时间内未提供输入,该命令将返回失败。


read -t 5 -p "You have 5 seconds to enter your name: " name
echo "Hello, ${name:-Guest}!"
  

如果您在 5 秒内输入您的姓名,则输出将为:


Hello, [Your Name]!
  

如果您在 5 秒内没有输入任何内容,则输出将为:


Hello, Guest!
  

The -t 5选项设置输入的 5 秒超时。如果未及时输入,则使用默认值“Guest”。

 

从文件描述符读取

The -u选项允许您指定要读取的文件描述符,而不是标准输入。


exec 3< file.txt
read -u 3 line
echo "Read from file descriptor: $line"
exec 3<&-
  

If file.txt包含:


This is a test line.
  

输出将是:


Read from file descriptor: This is a test line.
  

在这里,你打开file.txt在文件描述符 3 上,然后使用read -u 3从该描述符读取的命令。最后,您可以使用以下命令关闭文件描述符exec 3<&-.

 

安全考虑

当使用read命令处理用户输入,安全性必须是优先考虑的。有两个主要方面需要考虑:

防止代码注入:在未经验证的命令中使用输入时要小心,因为如果未经验证,将导致代码注入。


read -p "Enter a command: " cmd
eval "$cmd"  

该代码很危险,因为它允许执行任何命令。您必须在执行之前验证并清理输入。

验证和清理用户输入:始终根据预期模式验证输入,并在必要时对其进行清理。


read -p "Enter a number: " number
if [[ ! "$number" =~ ^[0-9]+$ ]]; then
  echo "Invalid input. Please enter a number."
  exit 1
fi
  

此代码确保输入是数字并拒绝任何其他内容。

通过关注这些方面,您可以最大限度地降低风险并保护系统免受潜在的安全漏洞的影响。

 

现实世界的例子

这是一个关于如何使用的真实示例read创建基本登录脚本的命令:


#!/bin/bash
read -p "Username: " username
read -s -p "Password: " password
echo

# Simulate user validation (Replace with real validation in production)
if [[ "$username" == "admin" &amp;&amp; "$password" == "secret" ]]; then
  echo "Access granted."
else
  echo "Access denied."
fi
  

该脚本提示用户输入用户名和密码,然后将输入的值与预定的凭据进行比较。

  1. The -p选项提示输入用户名。
  2. The -s选项在提示输入密码时隐藏输入。
  3. 一个简单的 if 语句检查输入的凭据是否与预期相符,并提供适当的反馈。

注意:这是一个非常简单的示例,在生产环境中,您应该使用正确的身份验证和安全实践。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

15 个 Linux 读取命令示例 的相关文章

  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp

随机推荐

  • OpenSSL:使用 SSL 证书、私钥和 CSR

    OpenSSL 是一个强大的 功能齐全的开源工具包 它实现了 SSL 和 TLS 协议以及通用加密库 它广泛用于管理各种系统中的 SSL TLS 证书 私钥和证书签名请求 CSR 在本文中 我们将探讨如何使用 OpenSSL 来处理 SSL
  • 如何通过 PPA 在 Ubuntu 18.04 和 16.04 上安装 Libreoffice 6.2

    LibreOffice 6 2 已发布并可在官方向后移植 PPA用于 Ubuntu 系统上的安装 它是一款免费的办公套件应用程序 与以前的版本相比有许多增强功能 它包含了许多有用的功能 使办公室管理变得非常容易 它是专门针对 Linux 桌
  • 使用 Python 函数

    在编程时 我们经常重复执行相同的任务 例如执行数字加法或使用不同的输入打印相同的语句 这些是一般示例 但对于这些示例 您愿意编写相同的代码 10 次还是只编写一次 这就是函数的目的 它们是仅针对特定任务定义一次的代码片段 并具有可重用的功能
  • 在 HDFS 中创建目录并复制文件 (Hadoop)

    HDFS is the Hadoop分布式文件系统 它是一个用于大型数据集的分布式存储系统 支持容错 高吞吐量和可扩展性 它的工作原理是将数据划分为在集群中的多台机器上复制的块 这些块可以并行写入或读取 从而提高吞吐量和容错能力 HDFS
  • 如何在 Debian 11/10/9 上安装 Gulp.js

    Gulp是一个工具包 可帮助开发人员在开发过程中实现痛苦工作流程的自动化 本教程将帮助您在 Debian 11 Debian 10 和 Debian 9 操作系统上安装 Gulp 第 1 步 安装 Node js 首先 你需要安装node
  • 如何在 Linux 中递归更改文件的权限

    如果您使用 Linux 作为主要操作系统或管理 Linux 服务器 您会遇到尝试创建或编辑文件并收到 权限拒绝 错误的情况 通常 与权限不足相关的错误可以通过设置正确的文件权限或所有权 Linux 是一个多用户系统 对文件的访问是通过文件权
  • 如何显示 MySQL 中所有数据库的列表

    给药时MySQL对于数据库服务器 您要做的最常见的任务之一就是熟悉环境 这涉及诸如列出驻留在服务器上的数据库等任务 显示表格特定数据库的信息或获取有关用户帐户及其权限的信息 本教程介绍如何通过命令行显示 MySQL 或 MariaDB 服务
  • 如何创建 Tar Gz 文件

    tar 存档是一个存储其他文件集合的文件 包括有关这些文件的信息 例如所有权 权限和时间戳 在 Linux 操作系统中 您可以使用tar创建 tar 档案的命令 该命令还可以使用各种压缩程序来压缩档案 其中 gzip 是最流行的算法 按照约
  • 如何在 Ubuntu 20.04 上安装 GCC (build-essential)

    GNU 编译器集合 GCC 是 C C Objective C Fortran Ada Go D 编程语言 很多开源项目 包括Linux内核和GNU工具 都是使用GCC编译的 本文介绍如何在 Ubuntu 20 04 上安装 GCC 在 U
  • 如何在 Debian 9 上安装和使用 FFmpeg

    FFmpeg 是一个免费的开源命令行工具 用于对多媒体文件进行转码 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率以
  • 如何在 Ubuntu 18.04 上安装 Python 3.7

    Python 是世界上最流行的编程语言之一 凭借其简单易学的语法 Python 是初学者和经验丰富的开发人员的绝佳选择 Python 是一种非常通用的编程语言 它可以用作脚本语言来构建游戏 开发网站 创建机器学习算法和分析数据 Python
  • 如何在 CentOS 7 上安装 VLC 媒体播放器

    VLC 是一种流行的开源多媒体播放器和流媒体服务器 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本教程介绍如何在 CentOS 7 上安装 VLC 媒体播放器 先决条件 您需要以以下身份登录具有 s
  • 如何在 Ubuntu 20.04 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • Linux 睡眠命令(暂停 Bash 脚本)

    sleep是一个命令行实用程序 允许您将调用进程挂起指定的时间 换句话说 sleep命令将下一个命令的执行暂停给定的秒数 The sleep该命令在 bash shell 脚本中使用时非常有用 例如 在重试失败的操作或在循环内时 在本教程中
  • 如何在 Ubuntu 18.04 上安装 CouchDB

    CouchDB 是由 Apache 软件基金会维护的免费开源容错 NoSQL 数据库 CouchDB 服务器将其数据存储在命名数据库中 其中包含以下文档JSON结构 每个文档由许多字段和附件组成 字段可以包括文本 数字 列表 布尔值等 它包
  • 如何在 Debian 10 上安装 Xrdp 服务器(远程桌面)

    Xrdp 是 Microsoft 远程桌面协议 RDP 的开源实现 允许您以图形方式控制远程系统 使用 RDP 您可以登录到远程计算机并创建真实的桌面会话 就像登录到本地计算机一样 本教程介绍如何在 Debian 10 Linux 上安装和
  • 如何使用SFTP命令传输文件

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输访问 管理和传输文件 与传统的相比FTPSFTP 提供 FTP 的所有功能 但更安全且更易于配置 Unlike SCPSFTP 仅支持文件传输 但允许您对远程文
  • 15+ yum update 命令示例

    Yum 是 Red Hat CentOS 和其他操作系统上使用的包管理器Linux 发行版使用 RPM 包管理器 Yum 用于安装 更新 删除或以其他方式操作这些 Linux 系统上安装的软件包 在本教程中 我们将介绍 yum update
  • Seaborn barplot 教程(以条形图可视化您的数据)

    数据可视化已成为与分析数据进行交流的重要阶段 通过数据可视化 数据科学家和业务分析师可以轻松地从大量数据中提取见解 Seaborn 是一种 Python 中的统计图形绘图和可视化库 允许数据分析师和数据科学专业人员呈现可视化 在本文中 我们
  • 15 个 Linux 读取命令示例

    The readLinux 中的命令允许您从标准输入或文件中读取输入 它允许您接收数据并将其分配给变量 本教程将指导您完成不同的选项read命令 目录 hide 1 读取用户的输入 2 从文件中读取输入 3 指定分隔符