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脚本中实现复杂的逻辑控制。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言:对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

树莓派4B Qt+FFMPEG 多线程录制USB相机mjpeg数据流“h264_omx“硬件编码的MP4文件

文章目录 1 前言2 一些问题说明2.0 树莓派4b系统版本2.1 Qt2.2 FFMPEG2.3 图像格式 3 核心代码3.0 代码逻辑3.1 pro文件3.2 avframequeue.cpp3.3 decodethread.cpp 4 资源下载 1 前言 本项目为在树莓派4B开发板上,通过QtFFMPEG以多线程分别解码、编码USB摄像头视频数…

Cartographer激光雷达slam -20241116

Cartographer Cartographer代码结构 cartographer:负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建,是cartographer理论的底层实现cartographer_ros:基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义…

Scratch 014生日贺卡(上)

知识回顾: 1、“面向鼠标指针”积木块 2、“重复执行直到”积木块 本次分享制作生日贺卡引入广播模块 案列效果: 生日贺卡上案例效果-CSDN直播 步骤拆解: 1、添加背景和角色 2、编辑贺卡造型添加名字 3、流程图的组成和画法 4、…

外网访问 WebDav 服务

从外部网络环境(比如异地和家中网络)来访问公司内网的 WebDav 服务(基于 IIS )并映射成本地虚拟磁盘。 步骤如下 第一步 在公司内网的电脑上设置 webDav。 1,找到【控制面板】,双击进入。 2&#xff0c…

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流

11月14日,渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人,莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院(庚贤堂中医药…

WP网站如何增加文章/页面的自定义模板

通过Wordpress我们后台在发布文章或者页面的时候其实可以看到有些主题 他有选择使用的页面模板,可以自定义模板,但是有些主题却没有选择主题这个功能,那这个自定义模板的功能是如何实现的呢?以下分两种情况:Page页面和…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,

也就是将摄像头采集到的YUV 的数据换成 AVFrame,然后再次转成 AVPacket,那么这AVPakcet数据要怎么办呢?分为三种情况: 一种是将AVPacket存储成h264文件,由于h264编码器在将avframe变成avpacket的时候就是按照h264的格…

SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录 背景 一、LIKE - 模糊查询 1. 通配符 % 2. 占位符 _ 3. 指定集合 [] 3.1 表示否定 ^ 3.2 表示范围 - 4. 否定 NOT 二、DISTINCT - 去重查询 三、HAVING - 过滤查询 四、小的查询设置 1. ASC|DESC - 排序 2. TOP - 限制 3. 子查询 4. not in - 取补集&…

动态规划-完全背包问题——322.零钱兑换

1.题目解析 题目来源 322.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 这里需要寻找硬币使总面值等于一个值求出所需硬币的最小个数,所以不妨设置一个二维dp表,即dp[i][j]:在[1,i]个硬币中选择的硬币总面值完全等于j时所需要的最小硬…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历,分享给大家 作者是如何在没有 iOS 开发经验的情况下,借助 AI(如 Claude 3 模型)成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月,ChatGPT 诞生并迅速引发全球关注。…

【Linux庖丁解牛】—Linux基本指令(下)!

目录 1、grep指令 2、zip/unzip指令 3、sz/rz指令 4、tar指令 ​编辑 5、scp指令 6、bc指令 7、uname –r指令 8、重要的几个热键 9、关机 10、完结撒花 1、grep指令 grep是文本过滤器,其作用是在指定的文件中过滤出包含你指定字符串的内容,…

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签,也就没有 DOM 和 BOM,CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写,WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构,小程序中标签称为组件…

VMD + CEEMDAN 二次分解,CNN-LSTM预测模型

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享! EMD变体分解效果最好算法——CEEMDAN(五)-CSDN博客 拒绝信息泄露!VMD滚动分…

《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人

课程 《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客 我们希望你创建一个定制的服务机器人。 您可以想出任何您希望机器人执行的任务,例如,一个可以解决简单的数学问题的机器人0 一个机器人&#xff0c…

SOLIDWORKS Toolbox:一键自动化,让紧固件与零部件管理更高效

紧固件广泛应用于从手机到火箭的各种产品中。在SOLIDWORKS设计时,通过使用实际的CAD模型来包含和跟踪紧固件是最简便和全面的方法,这有助于理解设计的整体,并自动管理零件数据和设计文档,如工程图和物料清单(BOM)。 在SOLIDWORKS…

串口DMA接收不定长数据

STM32F767—>串口通信接收不定长数据的处理方法_stm32串口超时中断-CSDN博客 STM32-HAL库串口DMA空闲中断的正确使用方式解析SBUS信号_stm32 hal usart2 dma-CSDN博客 #define USART1_RxBuffSize 100 extern DMA_HandleTypeDef hdma_usart1_rx; //此处声明的变量在…

git简介和本地仓库创建,并提交修改。git config init status add commit

一、Git简介和本地仓库组成 1.1 git简介 视频教程在这 git简介,版本控制系统,工作区,暂存区,本地仓库_哔哩哔哩_bilibili 如下图,比如我们写毕业论文,要经常修改和完善,得靠自己保存&#x…

鸿蒙学习生态应用开发能力全景图-赋能套件(1)

文章目录 赋能套件鸿蒙生态应用开发能力全景图 赋能套件 鸿蒙生态白皮书: 全面阐释了鸿蒙生态下应用开发核心理念、关键能力以及创新体验,旨在帮助开发者快速、准确、全面的了解鸿蒙开发套件给开发者提供的能力全景和未来的愿景。 视频课程: 基于真实的开发场景,提供向导式…

vue+svg圆形进度条组件

vuesvg圆形进度条组件 一、实现思路二、ProgressCircle.vue三、父组件使用四、实现效果 一、实现思路 使用svg的circle元素画两个圆形&#xff0c;一个圆形控制进度&#xff0c;一个绘制底色 二、ProgressCircle.vue 代码示例&#xff1a; <template><!-- 圆形进度…