当前位置: 首页 > news >正文

Linux从0——1之shell编程4

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)

1,使用read命令获取用户输入

read命令是Shell脚本中用于从标准输入(通常是键盘)读取数据的一个内置命令。它能够将用户输入的数据赋值给一个或多个变量,从而实现与用户的交互。此外,read命令还支持多种选项来定制输入行为,例如设置提示信息、限制输入字符数、隐藏输入内容等。

read命令的基本形式如下:

read [选项] [变量1] [变量2] …

选项

描述

-a arrayname

将输入的字段存储到指定的数组中

-d delim

使用指定的字符作为行的结束标志

-e

启用输入补全功能

-i text

在输入编辑缓冲区中预置文本

-n nchars

定义输入文本的长度,而不是读取整行

-N nchars

定义输入文本的长度,不考虑行分隔符

-p prompt

在输入前打印提示信息

-r

屏蔽反斜杠\,将其作为普通字符处理

-s

静默模式,不在屏幕上显示输入的字符

-t timeout

指定等待输入的秒数

read命令的高级用法

除了基本的输入读取外,read命令还支持一些高级用法,例如:

  • 读取多行输入:可以通过循环来读取多行输入。
  • 读取文件内容:结合cat命令和管道,可以读取文件内容。
  • 定时输入:使用-t选项可以设置一个超时时间,如果在这个时间内没有输入,则自动退出。

实例一,获取用户输入并打印

实例二,read命令结合循环来连续获取用户输入

#!/bin/bash
echo "输入 'exit' 来结束程序"
while true; do
    read input
    if [ "$input" == "exit" ]; then
        break
    else
        echo "你输入的是: $input"
    fi
done
echo "程序已结束"

2. 使用select命令创建菜单

select 是 shell 编程中的一个命令,用于创建一个简单的菜单系统。它允许用户从一组选项中选择一个项目,并返回所选项目的索引或值。select 命令通常与 case 语句结合使用,以根据用户的选择执行不同的操作。

select 命令的基本语法如下:

select 变量 in 选项列表
do
    命令块
done

  • 变量:用于存储用户选择的值。
  • 选项列表:一个由空格分隔的字符串列表,表示菜单中的选项。
  • 命令块:用户选择后执行的命令块。

实例一,使用 select 命令创建简单菜单

#!/bin/bash
echo "请选择一个选项:"
select choice in "1" "2" "3"
do
  case $choice in
    "1")
      echo "你选择了选项1"
      break
      ;;
    "2")
      echo "你选择了选项2"
      break
      ;;
    "3")
      echo "你选择了选项3"
      break
      ;;
    *)
      echo "无效的选择"
      ;;
  esac
done

  1. PS3 是一个特殊的 shell 变量,用于定义 select 命令的提示符。
  2. select choice in "选项1" "选项2" "选项3" "退出":创建一个包含四个选项的菜单。
  3. case $choice in:根据用户的选择执行相应的命令块。
  4. break:当用户选择“退出”时,退出 select 循环。

3. 使用dialog工具创建图形化对话框

dialog 是一个可以在Linux终端中创建图形化对话框的工具。它可以与shell脚本结合使用,以创建更友好的用户界面。以下是如何使用 dialog 工具创建各种类型的对话框。

安装dialog

apt-get install dialog

创建对话框

1. 消息框 (Msgbox)

消息框用于显示一条消息,并要求用户点击“OK”按钮确认。

dialog --title "消息框" --msgbox "这是一个消息框示例" 10 30

2. 输入框 (Inputbox)

输入框允许用户输入文本。

dialog --title "输入框" --inputbox "请输入你的名字:" 10 30 2> /tmp/input.txt 

用户输入的内容会被重定向到 /tmp/input.txt 文件中。

3. 确认框 (Yes/No Box)

确认框用于显示一个带有“YES”和“NO”按钮的对话框。

dialog --title "确认框" --yesno "这是一个确认框示例" 10 30

4. 菜单 (Menu)

菜单允许用户从一组选项中选择一个项目。

dialog --title "菜单" --menu "请选择一个选项" 15 30 10 \
    1 "选项1" \
    2 "选项2" \
    3 "选项3" \
    4 "退出" 2> /tmp/menu.txt 

用户选择的选项会被写入 /tmp/menu.txt 文件中。

5. 复选框 (Checklist)

复选框允许用户选择多个选项。

dialog --title "复选框" --checklist "请选择你喜欢的水果" 15 40 5 \
    1 "苹果" on \
    2 "香蕉" off \
    3 "橙子" on \
    4 "葡萄" off 2> /tmp/checklist.txt 

用户选择的选项会被写入 /tmp/checklist.txt 文件中。

6. 单选框 (Radiolist)

单选框允许用户选择一个选项。

dialog --title "单选框" --radiolist "请选择一个选项" 15 40 5 \
    1 "选项1" on \
    2 "选项2" off \
    3 "选项3" off 2> /tmp/radiolist.txt 

用户选择的选项会被写入 /tmp/radiolist.txt 文件中。

实例一:创建一个消息框

#!/bin/bash
dialog --title "消息框" --msgbox "这是一个消息框。" 10 30
dialog --title "输入框" --inputbox "请输入你的名字:" 10 30 2> name.txt 
name=$(cat name.txt) 
dialog --title "你好" --msgbox "你好,$name!" 10 30

4,条件判断前言:关系运算符

在Shell编程中,关系运算符主要用于比较数值或字符串,以便在条件语句中进行决策。这些运算符在编写条件逻辑时非常有用,例如在if语句或while循环中。

关系运算符概述

以下是常用的关系运算符及其功能说明:

运算符

描述

-eq

检测两个数是否相等

-ne

检测两个数是否不相等

-gt

检测左边的数是否大于右边的

-lt

检测左边的数是否小于右边的

-ge

检测左边的数是否大于等于右边的

-le

检测左边的数是否小于等于右边的

这些运算符通常用于整数比较。对于字符串比较,有其他专门的运算符。

示例代码

以下是一些使用关系运算符的示例代码:

#!/bin/bash
 # 定义两个变量
a=5
b=10
# 使用if语句进行比较
if [ $a -eq $b ]; then
    echo "$a 等于 $b"
else
    echo "$a 不等于 $b"
fi
 
if [ $a -gt $b ]; then
    echo "$a 大于 $b"
else
    echo "$a 不大于 $b"
fi
 
if [ $a -lt $b ]; then
    echo "$a 小于 $b"
else
    echo "$a 不小于 $b"
fi
 
if [ $a -ge $b ]; then
    echo "$a 大于等于 $b"
else
    echo "$a 不大于等于 $b"
fi
 
if [ $a -le $b ]; then
    echo "$a 小于等于 $b"
else
    echo "$a 不小于等于 $b"
fi

注意事项

  1. 运算符仅适用于数字:关系运算符只能用于数字比较。如果尝试比较非数字字符串,可能会导致错误。
  2. 空格:在使用关系运算符时,必须在运算符和操作数之间留有空格。例如,[ $a -eq $b ] 是正确的,而 [ $a-$b ] 则会导致语法错误。
  3. 引号:在某些情况下,特别是当操作数可能是空字符串时,建议使用双引号来保护变量。例如,[ "$a" -eq "$b" ]。

5,条件判断

条件判断的基本语法

在Shell编程中,条件判断通常使用if语句来实现。if语句的基本语法如下:

if [ condition ]; then
    # 如果条件为真,执行这里的代码
else
    # 如果条件为假,执行这里的代码
fi

常用的条件判断

Shell中常用的条件判断包括文件判断、字符串判断和数值判断。

文件判断

  • -e file: 判断文件是否存在。
  • -f file: 判断文件是否存在且为普通文件。
  • -d dir: 判断目录是否存在。
  • -r file: 判断文件是否可读。
  • -w file: 判断文件是否可写。
  • -x file: 判断文件是否可执行。

字符串判断

  • -z string: 判断字符串是否为空。
  • -n string: 判断字符串是否非空。
  • string1 = string2: 判断两个字符串是否相等。
  • string1 != string2: 判断两个字符串是否不相等。

数值判断

  • num1 -eq num2: 判断两个数值是否相等。
  • num1 -ne num2: 判断两个数值是否不相等。
  • num1 -gt num2: 判断num1是否大于num2。
  • num1 -lt num2: 判断num1是否小于num2。
  • num1 -ge num2: 判断num1是否大于或等于num2。
  • num1 -le num2: 判断num1是否小于或等于num2。

多条件判断

在Shell中,可以使用elif来进行多条件判断。语法如下:

if [ condition1 ]; then
    # 如果condition1为真,执行这里的代码
elif [ condition2 ]; then
    # 如果condition1为假且condition2为真,执行这里的代码
else
    # 如果所有条件都为假,执行这里的代码
fi

实例一,条件判断语句使用

#!/bin/bash
FILE="example.txt" 
if [ -e "$FILE" ]; then
    echo "File exists."
else
    echo "File does not exist."
fi
 
STRING1="Hello"
STRING2="World"
if [ "$STRING1" = "$STRING2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi
 
NUM1=10
NUM2=20
if [ "$NUM1" -lt "$NUM2" ]; then
    echo "NUM1 is less than NUM2."
else
    echo "NUM1 is not less than NUM2."
fi

通过这些基本的条件判断,你可以在Shell脚本中实现复杂的逻辑控制。

相关文章:

Linux从0——1之shell编程4

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

pycharm快速更换虚拟环境

目录 1. 选择Conda 虚拟环境2. 创建环境3. 直接选择现有虚拟环境 1. 选择Conda 虚拟环境 2. 创建环境 3. 直接选择现有虚拟环境...

MVVM框架

MVVM由以下三个内容构成: Model:数据模型View:界面ViewModel:作为桥梁负责沟通View和Model 在JQuery时期,如果需要刷新UI,需要先取到对应的 DOM 再更新 UI,这样数据和业务的逻辑就和⻚⾯有强耦合。 在 MVVM 中,UI 是…...

数据仓库在大数据处理中的作用

数据仓库(Data Warehouse,简称DW或DWH)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。以下是对数据仓库及其在大数据处理中作用的详细解释: 一、数据仓库的定义 面向主题&#x…...

前端Javascript、Vue、CSS等场景面试题目(二)

前端面试场景题目(一)-CSDN博客 针对您提供的前端场景面试题目,以下是详细的回答: 1. 如何通过 CSS 实现美观的自定义复选框和单选按钮? 方法:使用 CSS 伪元素 ::before 和 ::after,以及隐藏…...

鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)

鸿蒙相关平台作用:  开发者社区:开发者技术交流平台,帮助开发者探索开发实践、交流心得经验、获悉业界动态、答疑解惑。  开发者学堂:聚合官方鸿蒙生态课程,课程有慕课、微课、直播课、训练营等多种形式&#xff…...

计算机网络各层设备总结归纳(更新ing)

计算机网络按照OSI(开放式系统互联)模型分为七层,每一层都有其特定的功能和对应的网络设备。以下是各层对应的设备: 1. 物理层(Physical Layer) 设备:中继器(Repeater)、集线器…...

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用) 文章目录 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)前言1. Spring Cloud Eureka 的概述1.1 服务治理概述1.2 服务注册与发现 2. 实践:创建单机 Eureka Server 注册中心2.1 需求说明 图解…...

品牌如何利用大数据工具,进行消费者洞察分析?

存量竞争的时代, 消费者聆听是品牌持续增长的关键,借助大数据的消费者数据洞察,可以帮助品牌分析消费者的所思所想及行为特征,获取消费者对产品的需求痛点、使用感受,对品牌的评价口碑等,从而帮助品牌更好地…...

鸿蒙实现 web 传值

前言:安卓和 IOS 加载 H5 的时候,都有传值给到 H5 或者接收 H5 值,鸿蒙也可传值和接收 H5 的内容,以下是鸿蒙传值给 H5 端的具体操作 一: 定义好 H5 和鸿蒙传值的方法名,两端必须保持方法名一致 // xxx.ets import …...

uniapp vuex的使用

实现组件全局(数据)管理的一种机制,可以方便的实现组件之间共享数据,不同于上述三种传递值的方式。 可以把vuex当成一个store仓库,可以集中管理共享的数据,并且存储在vuex中的数据都是响应式的&#xff0c…...

RabbitMQ实战启程:从原理到部署的全方位探索(上)

文章目录 一、RabbitMQ简介1.1、概述1.2、特性 二、RabbitMQ原理架构三、RabbitMQ应用场景3.1 简单模式3.2 工作模式3.3 发布订阅3.4 路由模式3.5 主题订阅模式 四、同类中间件对比五、RabbitMQ部署5.1 单机部署5.1.1 安装erlang5.1.2 安装rabbitmq 5.2 集群部署(镜…...

【论文复现】轻松利用自适应特征融合实现去雾

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 智慧医疗 介绍创新点网络结构特征提取阶段自适应融合阶段图像重建阶段上下文增强模块CEM特征融合模块AFM 结果分析 提示 论文题目&#xff1…...

【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用

1. hbase-phoenix的应用 1.1 概述: 上面我们学会了hbase的操作和原理,以及外部集成的mr的计算方式,但是我们在使用hbase的时候,有的时候我们要直接操作hbase做部分数据的查询和插入,这种原生的方式操作在工作过程中还…...

高级java每日一道面试题-2024年11月09日-缓存中间件篇-Redis和Memecache有什么区别?

如果有遗漏,评论区告诉我进行补充 面试官: Redis和Memecache有什么区别? 我回答: 一、基础特性 数据类型支持 Redis: 支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合…...

vscode 关闭绑定元素 隐式具有“any”类型这类错误

在vue的项目里面,经常看到any类型的报错,真的很烦的 在tsconfig.json中配置以下参数 “noImplicitAny”: false 就可以了 出现类型“never”上不存在属性“userName”。ts-plugin(2339) 配置该参数 modeuleResolution : node "compilerOptions&qu…...

手机ip地址异常怎么解决

在现代社会中,手机已成为我们日常生活中不可或缺的一部分,无论是工作、学习还是娱乐,都离不开网络的支持。然而,有时我们会遇到手机IP地址异常的问题,这不仅会影响我们的网络体验,还可能带来安全隐患。本文…...

【售前方案】工业园区整体解决方案,智慧园区方案,智慧城市方案,智慧各类信息化方案(ppt原件)

基于云计算、物联网、移动通信计算的智慧园区集中运营管理平台是一个高度集成化、智能化的管理系统,它利用先进的技术手段对园区进行全方位的监控和管理。 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审…...

37.超级简易的计算器 C语言

超级简单&#xff0c;简单到甚至这个计算器输入都比较反人类 但是足够简单 有输入功能有Switch语句支持四种运算还能检查除数是不是0还能打印出完整的式子 #define _CRT_SECURE_NO_WARNINGS// 禁用安全警告 #include <stdio.h>int main() {double num1, num2;// 声明两…...

防火墙----iptables

防火墙是位于内部网和外部网之间的屏障&#xff0c;他按照系统管理员预先定义好的规则来控制数据包的进出 一、iptables简介 防火墙会从以上至下的顺序来读取配置的策略规则&#xff0c;在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为&#xff08;即放行或阻止&…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...