学习目标

掌握case语句的基本语法结构

掌握函数的定义以及调用

掌握常用的正则表达式元字符含义

一、case语句

case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case var in     定义变量;var代表变量名
pattern 1)      模式1;用|分割多个模式,相当于orcommand1      需要执行的语句;;            两个;号代表命令结束
pattern 2)      command2;;
pattern 3)      command3;;*)      default,不满足以上模式,默认执行*)下面的语句command1;;
esac            esac表示case语句结束

二、函数

shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数。给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能。

2.1函数定义

函数名()
{函数体(一堆命令的集合,来实现某个功能)}function  函数名()
{函数体(一堆命令的集合,来实现某个功能)
}function_name()
{commandcommand1...
}函数return说明“
1.return可以结束一个函数,类似于前面讲的循环控制语句break(结束当前循环,执行循环体后面的代码)
2.return默认返回函数中的最后一个命令的退出状态,也可以给定参数值,该参数值的范围是0-256之间
3.如果没有return命令,函数将返回最后一个shell的退出值。

2.2应用案例

需求:写一个脚本让用户输入基本信息,性别,年龄,如不输入一直提示输入,最后根据用户的信息输出相对应的内容

思路:

循环直到输入字符串不为空  (该功能可以定义为一个函数,方便下面脚本调用)

根据用户输入信息做出匹配判断  case语句

#! /bin/bashfun(){
read -p "$1" name
if [ -z $name ];then
fun $1
else
echo $name
fi
}#调用函数并且获取用户的姓名,性别,年龄分别赋值给bane,sex,age
name=$(fun 请输入姓名:)
sex=$(fun 请输入性别:)
age=$(fun 请输入年龄:)
echo $name
echo $sex
echo $age#根据用户输入的性别进行匹配判断
case $sex inman)if [ $age gt 18 -a $age -le 35 ];thenecho "中年大叔"elif [ $age -gt 35 ];thenecho "保温杯带了吗"elseecho "年轻有为"fi;;woman)if...fi;;*)....;;

三、综合案例

任务背景:

现有的跳板机虽然实现了统一入口来访问生产服务器,yunwei用户权限太大可以操作跳板机上的所有目录文件,存在数据被误删的安全隐患,所以希望做一些安全策略来保证跳板机的正常使用。

具体要求:

1.只允许yunwei用户通过跳板机远程链接后台的应用服务器做一些维护操作

2.公司运维人员远程通过yunwei用户连接跳板机时,跳出一下菜单供选择:

欢迎使用Jumper-server,请选择你要操作的主机:
1.DB1-Master
2.DB2-Slave
3.Web1
4.Web2
h.help
q.exit

3.当用户选择相应主机后,直接免密码登录成功
4.如果用户不输入一直提示用户输入,直到用户选择退出

思路:

1.打印菜单-->定义函数  echo cat

2.让用户选择需要操作的机器  case...esac

3.配置免密登录

4.每个菜单提供功能-->case...esac用户选择做的事情

5.循环让用户输入选择

6.每个功能写成函数-->不是必须的

7.脚本放的位置--->yunwei用户的家目录

#! /bin/bash
# jumper-server
#定义函数
#定义菜单打印功能的函数
trap '' 1 2 3 19
menu1()
{
cat <<-EOF
欢迎使用Jumper-server,请选择你要操作的主机:
1.DB1-Master
2.DB2-Slave
3.Web1
4.Web2
h.help
q.exitEOF
}
menu2()
{
cat <<-EOF
欢迎使用web-server,请选择你要操作的内容:
1.清理日志
2.启动apache
3.重启apache
h.help
q.exitEOF
}while true
do
clear
menu1
#用户选择相应的主机
read -p "请选择你需要的主机(h for help):" host
case $host in1)ssh root@10.1.1.1;;2)ssh root@10.1.1.2;;3)clear;menu2read -p "请输入你要操作的内容:" actionscase $actions in1)ssh root@10.1.1.1 echo "日志正在清理中";;2)ssh root@10.1.1.1 service apache start3)ssh root@10.1.1.1 service apache stop;;h)clear;menu2;;*)echo "请选择操作内容";;esac;;h)clear;menu1;;q)exit;;
esac
done

四、正则表达式

1.什么是正则表达式

正则表达式是一种字符模式,用于在查找过程中匹配指定的字符

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。

正则表达式这个概念最初是由unix中的工具软件(例如sed和grep)普及开的。

支持正则表达式的程序如:locate | find | vim | grep | sed | awk

2.第一类正则

名词解释:

元字符:指哪些在正则表达式中具有特殊意义的专用字符,如:点(.)星(*)问号(?)等

前导字符:即位于元字符前面的字符   abc*  aooo.

正则中常用的元字符

(1).   任意单个字符,除了换行符
(2)*   前导字符出现0次或连续多次   ab*能匹配"a","ab"以及"abb",但是不匹配"cb"
(3).*  任意长度的字符  ab.*
(4)^   行的开头
(5)$   行的结尾
(6)^$  空行(7)[]  匹配指定字符组内的任一单个字符  [abc]
(8)[^] 匹配不在指定字符组内的任一字符  [^abc](9)^[] 匹配以指定字符组内的任一字符开头  ^[abc]
(10)^[^]匹配不以指定字符组内的任一字符开头 ^[^abc](11)\<  取单词的头
(12)\>   取单词的尾
(13)\ <\>  精确匹配符号(14)\{n\}  匹配前导字符连续出现n次  go\{2\}  google  gooogle
(15)\{n,\}  匹配前导字符至少出现n次
(16)\{n,m\}  匹配前导字符出现n次与m次之间(17)\(xxx\) 保存被匹配的字符
perl内置正则:
\d  匹配数字  [0-9]
\w  匹配字母数字下划线[a-zA-Z0-9_]
\s  匹配空格、制表符、换页符[\t\r\n]#grep -P '\d' test.txt
#grep -P '\w' test.txt
#grep -P '\s' test.txt

扩展类的正则表达式grep -E或者egrep

扩展正则表达式元字符
+    匹配一个或多个前导字符   bo+  boo bo
?    匹配零个或一个前导字符   bo?  b   bo
a|b  匹配a或b
()   组字符      hello myself  yourself   (my|your)self{n}   前导字符重复n次   \{n\}
{n,}   前导字符至少重复n次    \{n,\}
{n,m}   前导字符重复n到m次   \{n,m\}

3.第二类正则

表达式功能示例
[:alnum:]字母与数字字符[[:alnum:]]+
[:alpha:]字母字符,包括大小写字母[[:alpha:]]{4}
[:blank:]空格与制表符[[:blank:]]*
[:digit:]数字[[:digit:]]?
[:lower:]小写字母[[:lower:]]{4,}
[:upper:]大写字母[[:upper:]]+
[:punct:]标点符号[[:punct:]]
[:space:]包括换行符,回车等在内的所以空白[[:space:]]+

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

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

相关文章

164.在 Vue3 中使用 OpenLayers 加载 Esri 地图(多种形式)

适配&#xff1a;Vue 3 Vite TypeScript&#xff08;也兼容 JS&#xff09; 地图引擎&#xff1a;OpenLayers v10 目标&#xff1a;一次性学会 多种 Esri 底图加载方式、注记叠加、动态切换、令牌&#xff08;Token&#xff09;鉴权、常见坑位排查。一、效果预览二、为什么选…

深入了解Flink核心:Slot资源管理机制

TaskExecutor、Task 和 Slot 简单来说&#xff0c;它们的关系可以比作&#xff1a;TaskExecutor&#xff1a;一个工厂&#xff0c;拥有固定的生产资源。TaskSlot&#xff1a;工厂里的一个工位。每个工位都预先分配了一份独立的资源&#xff08;主要是内存&#xff09;。Task&am…

java web 练习demo。生成简单验证码前端是jsp

目录结构 demo\ ├── WEB-INF\ │ └── weblogic.xml # WebLogic服务器配置文件 ├── demo.iml # IntelliJ IDEA项目配置文件 ├── lib\ # Java EE核心依赖库 │ ├── javax.annotation.jar │ ├── javax.ejb.jar │ ├── javax.…

拥抱智能高效翻译 ——8 款视频翻译工具深度测评

前阵子帮知识博主做跨境视频翻译&#xff0c;踩了不少坑&#xff1a;把 “内卷” 直译成 “involution” 让海外观众困惑&#xff0c;多语种版本赶工 3 天只出 2 种&#xff0c;还得手动核对 “碳中和”“非遗” 这类特色词的译法&#xff1b;用传统工具译完&#xff0c;视频要…

[知识点记录]SQLite 数据库和MySQL 数据库有什么区别?

核心区别&#xff1a;一个“内嵌”&#xff0c;一个“独立”SQLite (你的个人笔记本)本质&#xff1a; 它是“无服务器”的&#xff0c;或者叫“内嵌式”数据库。它不需要一个独立的程序一直在后台运行。你的应用程序&#xff08;比如Strapi&#xff09;直接就能读写它的数据库…

【Spark Core】(二)RDD编程入门

目录1 程序入口&#xff1a;SparkContext对象2 RDD的创建2.1 本地创建2.2 读取文件创建3 RDD算子4 常用Transform算子4.1 map算子4.2 flatMap算子4.3 reduceBykey算子4.4 mapValues算子<实例> WordCount4.5 groupBy算子4.6 filter算子4.7 distinct算子4.8 union算子4.9 j…

java IDEA run/Debug异常:“jdk1.8injava.exe“ CreateProcess error=206, 文件名或扩展名太长

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#,Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开发…

Java 函数编程之【过滤器filter()合并】【predicate(断言)】与【谓词逻辑】

Java函数式编程之【过滤器filter合并】【predicate&#xff08;断言&#xff09;】与【谓词逻辑】一、合并多个过滤器filter &#xff08;Lambda版本&#xff09;二、合并多个过滤器filter &#xff08;谓词逻辑&#xff08;Predicate&#xff09;版本&#xff09;&#xff08;…

CentOS10安装RabbitMQ

1.下载资源 &#xff08;1&#xff09;下载erlang-rpm 注意&#xff1a;按照图片中的下载&#xff0c;用绿色三角形指向的是重点关注的。 网址&#xff1a; erlang-rpmhttps://github.com/rabbitmq/erlang-rpm/releases &#xff08;2&#xff09;下载rabbitmq-server 注…

JVM——八股文

1. JDK, JRE和JVM的关系JDK JRE Java开发工具JRE JVM Java核心类库JDK供Java程序开发人员开发软件&#xff0c;JRE供客户使用&#xff0c;只需要JVM运行环境即可。JVM运行的是class字节码&#xff0c;不仅能运行Java代码&#xff0c;还能运行其他语言&#xff0c;只要语言能…

骑行把带定期换,维乐 Skin Wrap 把带焕新骑行

在公路骑行的装备体系里&#xff0c;把带是最易被忽视却至关重要的“消耗品”。它是骑手手部与车身的直接连接&#xff0c;每一次转向、变速、刹车&#xff0c;都需通过把带传递力量与操控意图&#xff1b;同时&#xff0c;它还承担着吸汗、减震、保护车把的作用。可长期使用后…

LeetCode100-73矩阵置零

本文基于各个大佬的文章 上点关注下点赞&#xff0c;明天一定更灿烂&#xff01; 前言 Python基础好像会了又好像没会&#xff0c;所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考&#xff0c;写给自己看的&#xff0c;也欢迎大家在评论区指…

宁波市第八届网络安全大赛 -- Crypto -- WriteUp

宁波市第八届网络安全大赛 – Crypto – WriteUp Three-prime RSA task import gmpy2 from Crypto.Util.number import *from secret import flagp getPrime(512) q getPrime(512) r getPrime(512) n p * q * r random_num getPrime(28) D ((p q r) * random_num) % n …

大语言模型 (LLM) 与多模态大模型 (MLM)

文章目录概述&#xff1a;从“模型”到“大”模型1、大语言模型 (Large Language Model, LLM)1.1 定义与概述关键特征&#xff1a;1.2 核心技术与架构Transformer架构自注意力机制 (Self-Attention)1.3 训练过程1.4 工作原理2. 多模态大模型 (Multimodal Large Model, MLM)2.1 …

HTML应用指南:利用GET请求获取全国招商银行网点位置信息

招商银行&#xff08;China Merchants Bank, CMB&#xff09;作为中国领先的股份制商业银行&#xff0c;始终坚持“以客户为中心”的服务理念&#xff0c;致力于为个人客户、企业客户及机构客户提供专业、高效、便捷的综合金融服务。依托“轻型银行”战略与“金融科技银行”建设…

JVM性能监控工具的使用

了解JVM性能监控工具并能熟练使用&#xff0c;是Java开发者进阶的必备技能。下面本文将为你介绍一些主流的JVM性能监控工具及其使用方法&#xff0c;并通过一些场景案例来分析如何应用这些工具解决实际问题。 &#x1f6e0;️ JVM性能监控与调优工具指南 ✨ 工具概览 以下是几款…

【工作】一些找工作需要了解避雷的知识

面试前 1.公司的具体情况 公司全称&#xff0c;办公地点&#xff0c;涉及岗位 要求hr做个简单的公司介绍 2.岗位职责/业务方向 工作内容、公司业务 3.薪资待遇&#xff0c;构成&#xff0c;底薪&#xff0c;五险一金 问一下工资范围 底薪 &#xff08;有责&#xff0c;无…

五、练习2:Git分支操作

练习2&#xff1a;Git分支操作 练习目标 掌握Git分支的创建、切换、合并等操作&#xff0c;理解分支在开发中的作用。 练习步骤 步骤1&#xff1a;准备基础仓库 # 创建练习目录 mkdir branch-practice cd branch-practice# 初始化仓库 git init# 创建初始文件 echo "# 分支…

【笔记】算法设计:异或空间线性基

Content1.什么是异或&#xff08;定义和性质&#xff09;2.异或空间线性基的构造方法3.异或空间线性基的应用4.算法设计例举5.小结说明算法设计应用之前&#xff0c;首先明确异或空间线性基&#xff1a;一种数据结构。用于处理异或关系&#xff08;运算&#xff09;下的向量空间…

Filebeat采集数据与日志分析实战

&#x1f31f;Filebeat采集数据的原理 Filebeat默认按行采集数据&#xff0c;如果数据没有换行&#xff0c;则该条数据无法采集到 属于有状态服务&#xff0c;可以记录上一次采集数据的位置点信息 修改配置文件 vim /etc/filebeat/config/03-log-to-console.yaml filebeat.inp…