网络运维Day11

news2025/1/12 1:39:13

文章目录

  • if语句
    • if单分支
      • 应用案例
    • if双分支
      • 应用案例
  • if多分支
      • 应用案例
  • for循环
  • while循环
    • 案例
  • 正则表达式
    • 基本正则
    • Perl兼容的正则
  • 综合练习
  • 总结

if语句

if单分支

if单分支的语法组成:

if  条件测试;then  
	命令序列
fi
if  条件测试
	then 命令序列
fi

应用案例

判断用户名与密码是否为空

[root@som ~]# cd /root/shell/day01

[root@som day01]# vim user_v1.sh
#!/bin/bash
read -p "请输入用户名:" user
read -s -p "请输入密码:" pass
if [ ! -z "$user" ];then
	 useradd "$user"
fi
if [ ! -z "$pass" ];then
     echo "$pass" | passwd --stdin "$user"
fi
echo

测试,输入用户名和密码

[root@som day01]# chmod  +x user_v1.sh 
[root@som day01]# ./user_v1.sh 
请输入用户名:testuser       						#输入用户名
请输入密码:更改用户 testuser 的密码 。
passwd:所有的身份验证令牌已经成功更新。

测试,直接回车

[root@som day01]# ./user_v1.sh 
请输入用户名:            							#直接回车
请输入密码:                 						 #直接回车

优化脚本,使用更简单的语句书写脚本,合并if语句

[root@som day01]# vim user_v2.sh
#!/bin/bash
read -p "请输入用户名:" user
read -s -p "请输入密码:" pass
if [ ! -z "$user" ] && [ ! -z "$pass" ];then
    useradd "$user"
    echo "$pass" | passwd --stdin "$user"
fi
[root@som day01]# chmod +x user_v2.sh 
[root@som day01]# ./user_v2.sh 
请输入用户名:testuser2
请输入密码:更改用户 testuser2 的密码 。
passwd:所有的身份验证令牌已经成功更新。

if双分支

  • if双分支的语法组成:既可以执行成功的命令,也可以执行失败的命令
if  条件测试;then
	命令序列1
else  
	命令序列2
fi

应用案例

测试主机是否能ping通,需要用户输入一个参数,比如一个IP或者域名

[root@som day01]# vim if_ping.sh
#!/bin/bash
if [ -z "$1" ];then
      echo -n "用法:脚本"
      echo -e "\033[32m域名或IP\033[0m"
      exit
fi
ping -c2 -i0.1 -W1 "$1" &> /dev/null

if [ $? -eq 0 ];then
		echo "$1 is up"
else
	    echo "$1 is down"
fi
[root@som day01]# chmod +x if_ping.sh 
[root@som day01]# ./if_ping.sh 
用法:脚本域名或IP
[root@som day01]# ./if_ping.sh  192.168.4.7
192.168.4.7 is up
[root@som day01]# ./if_ping.sh  192.168.10.1
192.168.10.1 is down

if多分支

  • if多分支:针对多个条件分别执行不同的操作
if    条件测试1 ;then  
		命令序列1
elif  条件测试2 ;then  
		命令序列2
else
		命令序列n
fi

应用案例

[root@som day01]# echo $RANDOM             #系统随机生成的数字
[root@som day01]# vim guess_num.sh
#!/bin/bash
clear
num=$[RANDOM%10+1]
read -p "请输入1-10之间的整数:" guess
if [ $guess -eq $num ];then
      echo "恭喜你,才猜对了,就是$num"
elif [ $guess -lt $num ];then
      echo "Oops,猜小了"
else
      echo "Oops,猜大了"
fi
[root@som day01]# chmod +x guess_num.sh
[root@som day01]# ./guess_num.sh
请输入1-10之间的整数:6
Oops,猜大了

for循环

  • 根据变量的不同取值,重复执行命令序列(for循环使用场合,在知道循环次数的时候使用)

for循环的语法结构:第一种格式

for  变量名  in  值列表
do
	命令序列
done

for循环范例,循环输出数字和字符

[root@som ~]# cd /root/shell/day01/
[root@som day01]# vim for_demo1.sh
#!/bin/bash
for i in 1 8 ab 99 qq
do
       echo "I am $i"
done

for循环的语法结构:第二种格式

for  ((初值;条件;步长))
do
   命令序列
done

案例:

[root@som day01]# vim for_demo2.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
      echo "I am $i"
done
[root@som day01]# chmod +x for_demo2.sh 
[root@som day01]# ./for_demo2.sh

循环创建10个系统账户(有规律的创建)

[root@som day01]# vim for_user.sh
#!/bin/bash
for i in {1..10}
do
       useradd test$i
      echo 123456 | passwd --stdin test$i
done
[root@som day01]# chmod +x for_user.sh 
[root@som day01]# ./for_user.sh

批量创建系统账户(无规律的创建,既可以读取用户名列表文件创建系统账户)

[root@som day01]# vim user.txt             #创建系统用户的文件
ocean
book
page
[root@som day01]# vim user.sh
#!/bin/bash
for i in $(cat user.txt)
do
       useradd $i
       echo 123456 | passwd --stdin $i
done
[root@som day01]# chmod  +x user.sh 
[root@som day01]# ./user.sh

while循环

  • 反复测试条件,只要成立就执行命令序列(死循环或者条件循环时使用【不知道循环次数时】)

while循环的语法结构:

while  条件测试
do
   命令序列
done

死循环语法结构

while :
do
  命令序列
done

练习while循环基本用法

定义i=1判断$i是否小于等于5,条件成立则执行循环语句

[root@som day01]# vim while_1.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
       echo $i
done

定义i=1判断 i 是否小于等于 5 ,条件成立则显示 i是否小于等于5,条件成立则显示 i是否小于等于5,条件成立则显示i,并执行let i++,如果条件失败,则循环结束

[root@som day01]# vim while_2.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
     echo $i
      let i++
done
[root@som day01]# chmod +x while_1.sh
[root@som day01]# chmod +x while_2.sh
[root@som day01]# ./while_1.sh          			 #ctrl+C结束循环
[root@som day01]# ./while_2.sh

死循环脚本,输出hello word 和 nihao

[root@som day01]# vim while_3.sh
#!/bin/bash
while :
do
       echo hello world
       echo nihao
done
[root@som day01]# chmod +x while_3.sh
[root@som day01]# ./while_3.sh

案例

  • 使用while循环批量创建有规律的用户,定义两个变量PREFIX和i,使用while循环,判断i小于等于5,条件满足会执行创建用户的命令,否则则退出脚本
[root@som day01]# vim uaddwhile.sh
#!/bin/bash
PREFIX="tuser"
i=1
while [ $i -le 5 ]
do
       useradd ${PREFIX}$i
       echo 123456 | passwd --stdin ${PREFIX}$i &> /dev/null
       let i++
done
[root@som day01]# chmod +x uaddwhile.sh 
[root@som day01]# ./uaddwhile.sh
  • 改编随机猜数脚本,可以无限次猜数,直到猜对才退出
[root@som day01]# vim guess_num2.sh
#!/bin/bash
num=$[RANDOM%10+1]
while :
do
      read -p "请输入1-10之间的整数:" guess
      if [ $guess -eq $num ];then
             echo "恭喜,猜对了,就是$num."
             exit    
      elif [ $guess -lt $num ];then
             echo "Oops,猜小了."
      else 
             echo "Oops,猜大了."
fi
done
[root@som day01]# chmod +x guess_num2.sh 
[root@som day01]# ./guess_num2.sh

正则表达式

  • 正则表达式是一种基于字符模式匹配的文本处理工具

基本正则

在这里插入图片描述

[root@som ~]# grep root /etc/passwd                    #查找包含root的行
[root@som ~]# grep ^root /etc/passwd                  	#查找以root开头的行
[root@som ~]# grep bash$ /etc/passwd                 	#查找以bash结尾的行
[root@som ~]# grep "[abc]" /etc/passwd               	#查找包含a或者b或者c的行
[root@som ~]# grep "[^abc]" /etc/passwd             	#查找不包含a或者b或者c的其他内容
[root@som ~]# grep . /etc/passwd                       #查找任意单个字符
[root@som ~]# grep r.*t /etc/passwd                    #查找以r开头以t结尾的
[root@som ~]# grep "[0-9]*"  /etc/passwd          		#查找包含数字的,*代表任意次
[root@som ~]# grep "[0-9]\{3,4\}" /etc/passwd    		#查找包含数字3-4次的
[root@som ~]# grep "[0-9]\{3\}" /etc/passwd       		#查找包含3位数的

在这里插入图片描述

扩展正则的使用

[root@som ~]# grep -E "0{2,3}" /etc/passwd         #查找0出现2-3次
[root@som ~]# grep -E "[a-z]+"  /etc/passwd        #查找a-z等字母至少出现一次
[root@som ~]# grep -E "s?bin"  /etc/passwd         #查找sbin或者bin(?匹配前面的s字符0-1次)
[root@som ~]# grep -E "(root|daemon)" /etc/passwd  #查找root或者daemon
[root@som ~]# echo "ababab" | grep ab              #查找ab
ababab
[root@som ~]# echo "ababab" | grep -E "(ab)"       #查找ab
[root@som ~]# echo "ababab" | grep -E "(ab){2}"    #将ab组合,匹配两次

Perl兼容的正则

在这里插入图片描述

[root@som ~]# grep -P "bin" /etc/passwd      #匹配包含bin的行,只要包含bin字符的都出现
[root@som ~]# grep -P "\bbin\b" /etc/passwd  
									# \b单词边界,b前面不能有内容,n后面也不能有内容,只匹配bin
[root@som ~]# grep -P "\w"  /etc/passwd      #查找字母数字下划线
[root@som ~]# grep -P "\W"  /etc/passwd      #查找不是字母数字下划线部分
[root@som ~]# grep -P "\s"  /etc/passwd      #查找空白,空格,tab键都算
[root@som ~]# grep -P "\d"  /etc/passwd      #查找数字
[root@som ~]# grep -P "\D"  /etc/passwd      #查找非数字

综合练习

准备素材文件

[root@som ~]# python -c "import this" > /opt/python.txt		#生成素材文件

过滤/opt/python.txt文件中包含the的行

[root@day01 ~]# grep "the"  /opt/python.txt

过滤包含bet或者better的行

[root@day01 ~]# grep -E  "(bet|better)" /opt/python.txt

过滤包含1-2个字母o的行

[root@day01 ~]# grep -E  "o{1,2}" /opt/python.txt

过滤所有标点符号

[root@day01 ~]# grep -P "\W"  /opt/python.txt

过滤/opt/python.txt文件中以.结尾的行

[root@day01 ~]# grep "\.$" /opt/python.txt

过滤包含2个o的行

[root@day01 ~]# grep -E "o{2}" /opt/python.txt

过滤大写字母开头的行

[root@day01 ~]# grep  "^[A-Z]"  /opt/python.txt

总结

  • 掌握SHELL中的if判断语句
    • 单分支、双分支、多分支
  • 掌握for循环使用格式
  • 掌握while循环使用格式
  • 掌握正则表达式
    • 基本正则、扩展正则、Perl兼容正则

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

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

相关文章

要找事做,我真怕被闲死

要找事做&#xff0c;我真怕被闲死 | 昨晚睡足了5个多小时&#xff0c;元气开始恢复&#xff0c;今晨6点钟醒来&#xff0c;如厕后无睡意&#xff0c;便窝在被子里闭目养神&#xff0c;同时想心事。 7点钟翻身起床穿衣洗刷后&#xff0c;烧瓶开水泡杯浓茶&#xff0c;打开电脑…

使用米联客FPGA开发板进行光口开发时遇到的问题总结

使用的开发板型号&#xff1a;米联客MA703FA&#xff0c; 实物图如下 FPGA型号为a35t 米联客提供的开发板资料中的FPGA型号为a100&#xff0c;所以要想使用开发板例程必须进行FPGA的重新选择。如下图 通过对开发板原理图的分析&#xff0c;例程代码不用做任何修改就可使用&am…

网络运维Day10

文章目录 SHELL基础查看有哪些解释器使用usermod修改用户解释器BASH基本特性 shell脚本的设计与运行编写问世脚本脚本格式规范执行shell脚本方法一方法二实验 变量自定义变量环境变量位置变量案例 预定义变量 变量的扩展运用多种引号的区别双引号的应用单引号的应用反撇号或$()…

【星海随笔】SDN neutron (三) Service-plugin

Neutron L3 L3的实现只负责路由的功能&#xff0c;传统路由器中的其他功能&#xff08;如Firewalls、LB、VPN&#xff09;都被独立出来实现了&#xff0c;因此ML3的实际需求比较少。 neutron-server 接到请求 –> 将请求发送到MQ –> neotron-plugins 得到请求 –> 发…

Azure 机器学习 - 机器学习中的企业安全和治理

目录 限制对资源和操作的访问网络安全性和隔离数据加密数据渗透防护漏洞扫描审核和管理合规性 在本文中&#xff0c;你将了解可用于 Azure 机器学习的安全和治理功能。 如果管理员、DevOps 和 MLOps 想要创建符合公司策略的安全配置&#xff0c;那么这些功能对其十分有用。 通过…

傅里叶分析(1)

1 概述 傅里叶分析是信号分析中常用方法之一。傅里叶分析可将信号在时域和频域之间进行转换&#xff0c;从而分析信号在频域上的特点。 傅里叶分析&#xff08;Fourier analysis&#xff09;根据信号的时域数据特征&#xff0c;分为 4 个类别&#xff1a; 傅里叶级数&#x…

Azure 机器学习 - 使用受保护工作区时的网络流量流

目录 环境准备入站和出站要求方案&#xff1a;从工作室访问工作区方案&#xff1a;从工作室使用 AutoML、设计器、数据集和数据存储方案&#xff1a;使用计算实例和计算群集方案&#xff1a;使用联机终结点入站通信出站通信 方案&#xff1a;使用 Azure Kubernetes 服务方案&am…

《红蓝攻防对抗实战》十二.内网穿透之利用ICMP协议进行隧道穿透

内网穿透之利用ICMP协议进行隧道穿透 一.前言二.前文推荐三.利用ICMP协议进行隧道穿透1.ICMPsh获取反弹shell2.PingTunnel 搭建隧道 四.本篇总结 一.前言 本文介绍了利用ICMP协议进行隧道穿透的方法。ICMP协议不需要开放端口&#xff0c;可以将TCP/UDP数据封装到ICMP的Ping数据…

算法通关村第八关-青铜挑战二叉树的经典题目

大家好我是苏麟 , 今天来说二叉树的经典题目 二叉树的双指针 所谓的双指针就是定义了两个变量&#xff0c;在二叉树中有时候也需要至少定义两个变量才能解决问题&#xff0c;这两个指针可能针对一棵树&#xff0c;也可能针对两棵树&#xff0c;我们姑且也称之为“双指针”吧。…

【中国知名企业高管团队】系列65:方太FOTILE

今天华研荟为您介绍另一个行业的知名企业和高管团队信息——厨房电器这个细分领域&#xff0c;也产生了许多大的公司&#xff0c;而且这些头部公司都集中在一起&#xff0c;是当地重要的一个产业集群。 首先介绍细分领域的、号称做高端的方太厨电FOTILE。 一、关于方太集团FO…

使用 Azure 机器学习实现图像分类

图像分类是计算机视觉领域中一个重要的任务。随着深度学习的发展&#xff0c;利用深度神经网络对图像进行分类已经成为一种主流方法。而Azure机器学习平台提供了丰富的工具和功能&#xff0c;使我们能够轻松地搭建和训练图像分类模型&#xff0c;并将其部署到实际应用中。本文将…

Pinme POS无代码开发集成营销系统,实现广告推广自动化

无代码开发平台的优势 无代码开发平台如集简云是一款超级软件连接器&#xff0c;无需开发&#xff0c;无需代码知识就可以轻松打通千款软件之间的数据连接&#xff0c;构建自动化与智能化的业务流程。这种方式无需花费数周甚至数个月的时间做软件集成开发&#xff0c;最快20分…

Linux学习教程(第二章 Linux系统安装)2

第二章 Linux系统安装 四、使用U盘安装Linux系统 前面章节介绍了如何通过虚拟机 VMware 安装 Linux 系统&#xff0c;而实际开发中&#xff0c;我们更多的是要将 Linux 系统直接安装到电脑上。 直接在电脑上安装 Linux 系统的常用方法有 2 种&#xff0c;分别是用光盘安装和用…

Linux常用命令——bzless命令

在线Linux命令查询工具 bzless 增强.bz2压缩包查看器 补充说明 bzless命令是增强“.bz2”压缩包查看器&#xff0c;bzless比bzmore命令功能更加强大。 语法 bzless(参数)参数 文件&#xff1a;指定要分屏显示的.bz2压缩包。 在线Linux命令查询工具

Xmind常用快捷键

Xmind 是什么&#xff1f; Xmind 是一款全功能的思维导图和头脑风暴软件。像大脑的瑞士军刀一般&#xff0c;助你理清思路&#xff0c;捕捉创意。 全功能&#xff1a;提供9种专业的的思维导图结构&#xff0c;丰富的模板和配色&#xff0c;精美的贴纸和插画&#xff0c;还有演…

国企业务变革-管理变革-IT支撑

&#xff08;1&#xff09;业务变革 国家-国资委-央国企这条链&#xff0c;有一主一副两个战略嘱托&#xff1a; 一个是&#xff1a;做大&#xff0c;并且做强-自主可控产业链供应链。 一个是&#xff1a;支撑国家一带一路战略落地 一、做大&#xff0c;做强-自主可控产业链供应…

HTML跳转锚点

跳转锚点适用于本页面和其他页面的任意标签的跳转以及JavaScript的运行 使用方法即给标签加上独一无二的id属性&#xff0c;再使用a标签跳转 如果是其他页面的标签只需加上其他页面的路径&#xff0c;eg.href"其他页面的路径#zp1" id属性的最好不要使用数字开头 <…

Seata之TCC模式解读

目录 基本介绍 起源 概述 案例流程分析 TCC注意事项 空回滚 幂等 悬挂 具体使用 LocalTCC TwoPhaseBusinessAction 小结 基本介绍 起源 关于TCC的概念&#xff0c;最早是由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apost…

DL Homework 7

目录 一、用自己的语言解释以下概念 局部感知、权值共享 池化&#xff08;子采样、降采样、汇聚&#xff09;。会带来那些好处和坏处&#xff1f; 全卷积网络 低级特征、中级特征、高级特征 多通道。N输入&#xff0c;M输出是如何实现的&#xff1f; 11的卷积核有什么作用 二、…

跨域:利用CORS实现跨域访问

跨域知识点&#xff1a;跨域知识点 iframe实现跨域的四种方式&#xff1a;iframe实现跨域 JSONP和WebSocket实现跨域&#xff1a;jsonp和websocket实现跨域 目录 cors介绍 简介 两种请求 简单请求 基本流程 withCredentials 属性 非简单请求 预检请求 预检请求的回应 …