当前位置: 首页 > 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;即放行或阻止&…...

若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理

黄小宁 关键词&#xff1a;“更无理”复数 复平面z各点z的对应点z1的全体是z1面。z面平移变为z1面就使x轴⊂z面沿本身平移变为ux1轴。R可几何化为R轴&#xff0c;R轴可沿本身平移变为R′轴&#xff0c;R′轴可沿本身平移变为R″轴&#xff0c;...。直线公理和平面公理使几百年…...

网络安全之WINDOWS端口及病毒编写

目录 一、常见端口和服务 二、Windows病毒编写 声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判…...

Flink 开发工程应加载哪些依赖

在我们要开发Flink程序时,就会涉及到应该加载哪些Flink jar的问题。本章内容就是向你展示如何配置你的项目,添加必要的依赖。 每个应用程序都会依赖一些 Flink libraries,比如至少依赖 Flink APIs库,如果使用了connector,则还需要依赖connector相关的库,比如kafka、jdbc…...

wordpress建外贸独立站常用的多语言插件

WordPress是一个功能强大的内容管理系统&#xff0c;对于外贸独立站来说&#xff0c;多语言支持是非常重要的功能。以下是一些常用的WordPress多语言插件&#xff1a; 1. WPML (WordPress Multilingual) 这是最流行且功能最全面的多语言插件之一。它支持翻译整个网站&#xf…...

[SpB]如何开始使用 Spring Boot?

如何开始使用 Spring Boot&#xff1f; Spring Boot 简化了 Java 项目开发&#xff0c;你只需要专注于业务逻辑&#xff0c;底层的很多配置和功能由 Spring Boot 自动帮你处理。下面是你如何快速上手 Spring Boot 的步骤&#xff0c;以及如何通过 IDEA 了解 Spring Boot 的功能…...

蓝桥杯模拟

【问题描述】 如果一个数 p 是个质数&#xff0c;同时又是整数 a 的约数&#xff0c;则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个整数&#xff0c;在提交答案时只…...

数字化转型企业架构设计手册(交付版),企业数字化转型建设思路、本质、数字化架构、数字化规划蓝图(PPT原件获取)

1、企业架构现状分析 2、企业架构内容框架 3、企业架构设计方法 3.1 、业务架构设计方法 3.2 、数据架构设计方法 3.3 、应用架构设计方法 3.4 、技术架构设计方法 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&…...

2. langgraph中的react agent使用 (在react agent添加历史消息)

1. 导入必要的库 首先&#xff0c;我们需要导入所需的库。这里我们使用 langchain_openai 来与 智谱AI 模型进行交互&#xff0c;并使用 langchain_core.tools 来定义自定义工具。 from langchain_openai import ChatOpenAI from typing import Literal from langchain_core.…...

MySQL社区版的启动与连接

1.启动&#xff1a; 注意&#xff1a;MySQL是默认开机自启的 方式一&#xff1a; 1.WinR 的命令行中直接输入services.msc 2.在服务中找到数据库名称&#xff0c;然后鼠标右键点击启动 方式二&#xff1a; 1.在开始选项中搜索“cmd”命令提示符&#xff0c;使用管理员身份运行 …...

【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing

tips&#xff1a; 本文为个人阅读论文的笔记&#xff0c;仅作为学习记录所用。本文参考另一篇论文阅读笔记 Title&#xff1a; Content-Aware Scalable Deep Compressed Sensing Journal&#xff1a; TIP 2022 代码链接&#xff1a; https://github.com/Guaishou74851/CASNet…...