Shell脚本5 -- 脚本与用户交互read

声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。


read 是 Shell 中用于从标准输入(通常是用户输入)中读取数据的命令。它常用于交互式脚本,让用户输入内容,并将输入值存储到变量中以供后续使用。


1 read 的基本语法

read [选项] [变量...]
  • 变量:指定接收输入的变量。如果不指定变量,默认将输入存储到环境变量 REPLY 中。
  • 选项read 提供了多个选项来控制行为。

2 基本用法

读取单个输入:

echo "Enter your name:"
read name
echo "Hello, $name!"
  • 用户输入会存储在变量 name 中。
  • 如果用户输入为 Alice,脚本将输出:Hello, Alice!

3 read 的常用选项

选项含义示例
-p显示提示信息,在读取输入前打印提示文字read -p "Enter your name: " name
-t设置超时时间(秒),超过时间未输入则返回非零值并退出read -t 5 -p "Enter your name: " name
-s静默模式,隐藏输入内容(常用于密码输入)read -s -p "Enter password: " password
-n限制输入字符数,当输入达到指定字符数时自动结束read -n 1 -p "Press any key to continue"
-d指定输入结束符,默认是换行符read -d ':' var
-r禁用反斜杠转义,防止用户输入的反斜杠被解释为转义字符read -r line

4 读取多个变量

如果提供多个变量,read 会根据空白分隔符拆分输入,将每一部分存储到相应的变量中。

示例:

echo "Enter your first name and last name:"
read first_name last_name
echo "Hello, $first_name $last_name!"
  • 用户输入 Alice Johnson
    • first_name 存储 Alice
    • last_name 存储 Johnson

多余的输入处理:

  • 如果用户输入超过变量数目,最后一个变量将包含剩余的所有内容。

5 read 默认行为

如果没有指定变量,read 会将输入存储到默认变量 REPLY 中。

示例:

echo "Enter something:"
read
echo "You entered: $REPLY"

6 进阶用法

要使用bash才可使用-p等参数,kali默认的shell是zsh,所以在命令行输入bash

6.1 静默输入密码

read -s -p "Enter your password: " password
  • 用户输入的内容不会显示在屏幕上。

6.2 限制输入字符数

read -n 1 -p "Press any key to continue"
  • 限制输入一个字符,输入后立即结束。

6.3 设置超时时间

if read -t 5 -p "Enter your name (5 seconds to respond): " name; thenecho "Hello, $name!"
elseecho "Timeout, no input received."
fi
  • 用户有 5 秒时间输入,超时后会提示 Timeout

6.4 自定义结束符

read -d ':' -p "Enter a colon-separated string: " var
echo "You entered: $var"
  • 输入以冒号 : 结束,而不是默认的换行符。

6.5 从文件读取输入

read 可以从文件中逐行读取数据。

示例:

while read line; doecho "Read line: $line"
done < input.txt
  • 文件 input.txt 的每一行会被依次读取并存储到 line 变量中。

7 错误处理与返回值

  • 成功read 成功读取输入时返回值为 0
  • 失败:如超时或到达文件末尾时返回非零值。

示例:

if read -t 3 -p "Enter your name: " name; thenecho "You entered: $name"
elseecho "No input received (timeout)."
fi

8 实际应用案例

8.1 创建交互式菜单

while true; doecho "Choose an option:"echo "1. Show date"echo "2. Show current directory"echo "3. Exit"read -p "Enter your choice: " choicecase $choice in1) date ;;2) pwd ;;3) echo "Goodbye!"; exit ;;*) echo "Invalid choice";;esac
done

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8.2 自动化用户输入确认

read -n 1 -p "Do you want to continue? (y/n): " answer
echo
if [[ $answer == "y" || $answer == "Y" ]]; thenecho "Continuing..."
elseecho "Exiting..."exit 1
fi

Pasted image 20241118202537

8.3 批量处理数据

# 假设 input.txt 包含多行用户数据
while read username email; doecho "Username: $username, Email: $email"
done < users.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19404.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

mysql5.7主从问题记录

项目运行一段时间后突然打印如下异常信息。 由于现场环境和数据库是客户提供&#xff0c;看异常提示一直以为是代码问题&#xff0c;导致锁表。 通过逐步排查之后发现&#xff0c;是binlog把磁盘占满了&#xff0c;让客户的DBA设置了一下就恢复。 当设置了主从同步之后&…

使用卷积自编码器进行图像重构

1. 自编码器简介 自编码器&#xff08;Autoencoder&#xff09;是一种无监督学习的神经网络模型&#xff0c;旨在学习数据的有效表示。自编码器的主要组成部分包括编码器和解码器&#xff0c;二者共同工作以实现数据的压缩和重构。以下是自编码器的详细介绍&#xff1a; 1.1 …

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战&#xff0c;学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目&#xff0c;编写首页代码&#xff0c;实现按钮跳转至第二个页面并…

恶意代码分析入门--静态分析(chapter1_Lab01-01)

恶意代码分析-工具收集 - 17bdw - 博客园 (cnblogs.com) 实验环境&#xff1a;Lab 1-1 这个实验使用Lab01-01.exe和Lab01-01.dll文件&#xff0c;使用本章描述的工具和技术来获取 关于这些文件的信息。 操作环境 操作场景&#xff1a; windows xp sp3 实验工具&#xff1a; PEi…

【操作系统不挂科】<信号量(9)>选择题(带答案与解析)

前言 大家好吖&#xff0c;欢迎来到 YY 滴操作系统不挂科 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的操作系统题目&#xff0c;供yy应对期中考试复习。大家可以参考 本章为选择题题库&#xff0c;试卷…

服务器数据恢复—raid5阵列故障导致上层系统分区无法识别的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌DL380服务器&#xff0c;服务器中三块SAS硬盘组建了一组raid5阵列。服务器安装Windows Server操作系统&#xff0c;划分了3个分区&#xff0c;D分区存放数据库&#xff0c;E分区存放数据库备份。 服务器故障&#xff1a; RAID5阵列中有一…

【ARM】MDK在debug模式下的Registers窗口包含哪些内容

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决客户对于Debug模式下&#xff0c;对于Registers窗口包含的内容了解。 2、 问题场景 Registers窗口是在进入到debug模式下后&#xff0c;就会出现一个窗口。窗口中包含了很多寄存器信息。但是对于具体内容不了解…

【后端】版本控制

版本控制 1. 什么是版本控制&#xff1f; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理…

高项 - 项目进度管理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-12 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 项目进度管理进度管理ITO规划监控 管理基础项目进度计划的定义和总要求管理新实践用户故事&#xff08;补…

【数据结构】【线性表】【练习】反转链表

申明 该题源自力扣题库19&#xff0c;文章内容&#xff08;代码&#xff0c;图表等&#xff09;均原创&#xff0c;侵删&#xff01; 题目 给你单链表的头指针head以及两个整数left和right&#xff0c;其中left<right&#xff0c;请你反转从位置left到right的链表节点&…

鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)

元服务是什么&#xff1f;和App的关系&#xff1f; 元服务是是一种HarmonyOS轻量应用形态&#xff0c;用户无需安装即可使用&#xff0c;具备随处可及、服务直达、自由流转的特征。 元服务是可以独立部署和运行的程序实体&#xff0c;独立于应用&#xff0c;不依赖应用可独立…

Redis中的String数据类型及相关命令

[经典面试题] redis虽然是单线程模型&#xff0c;为什么效率还这么高&#xff1f;速度这么快呢&#xff1f; 原因&#xff1a;1、redis主要访问内存&#xff0c;数据库则是主要访问硬盘。 2、redis的核心功能&#xff0c;比数据库的核心功能更简单。数据库对于数据的CRUD&…

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…

本地部署 Chat Nio

本地部署 Chat Nio 0. 引言1. 本地部署2. 访问 Chat Nio3. 渠道设置4. 聊天 0. 引言 Chat Nio 的功能&#xff1a; &#x1f916;️ 丰富模型支持: 多模型服务商支持 (OpenAI / Anthropic / Gemini / Midjourney 等十余种格式兼容 & 私有化 LLM 支持)&#x1f92f; 美观 …

C# OpenCV 通过高度图去筛选轮廓

//输入图像 threshCropMap.ImWrite("D:\\test\\threshCropMap_BeforeFilterByBlob.bmp"); //设定我们要筛选的高度 var ResultHeight 60; //创建对应高度的图像&#xff0c;由于是高度信息图&#xff0c;所有要使用32位来存放数据 Mat mat new Mat(filter.Rows, fi…

23.UE5删除存档

2-25 删除存档制作_哔哩哔哩_bilibili 按照自己的风格制作删除按钮 这样该行的存档就被从存档列表中删除了&#xff0c;并且实际存档&#xff08;我的存档蓝图&#xff09;中也被删除了 但是存在一个问题&#xff0c;如果存档数据中存在索引为: 0 1 2 3的存档&#xff0c;当索…

【graphics】图形绘制 C++

众所周知&#xff0c;周知所众&#xff0c;图形绘制对于竞赛学僧毫无用处&#xff0c;所以这个文章&#xff0c;专门对相关人员教学&#xff08;成长中的码农、高中僧、大学僧&#xff09;。 他人经验教学参考https://blog.csdn.net/qq_46107892/article/details/133386358?o…

kafka基础

文章目录 一、Kafka入门1.1、JMS1.2、生产者-消费者模式1.3、ZooKeeper 二、kafka基础架构2.1、producer2.2、kafka cluster2.2.1、broker2.2.2、Controller2.2.3、Topic2.2.4、Partition2.2.5、Replication2.2.6、Leader & Follower 2.3、consumer 一、Kafka入门 Kafka是一…

PMP–一、二、三模、冲刺–分类--5.范围管理--技巧--需求跟踪矩阵

文章目录 技巧一模反例不选“需求跟踪矩阵”4.整合管理86、 [单选] 项目经理加入一个项目&#xff0c;但项目经理在该项目所涉及的行业经验有限&#xff0c;在该项目的整个生命周期中&#xff0c;项目经理精心记录每个差距、问题和不一致性。但是&#xff0c;无论项目经理如何记…

掌握Golang中的数据竞争检测:runtime/race包全面教程

掌握Golang中的数据竞争检测&#xff1a;runtime/race包全面教程 引言数据竞争问题概述数据竞争的定义数据竞争对程序的影响常见数据竞争场景 Golang runtime/race包概述runtime/race包简介启用数据竞争检测使用 go run使用 go build使用 go test 基本用法与示例单元测试中的使…