网络运维Day11

文章目录

  • 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兼容正则

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

软件自动化测试平台

软件测试分类黑盒、白盒、功能、API、接口、压力测试和性能测试&#xff0c; 自动化测试平台是一种用于自动化执行软件测试过程的工具。 一、自动化测试平台-功能性 1. 接口自动化&#xff1a;对接软件的接口进行测试&#xff0c;验证接口的功能和性能。 2. Web 自动化&…

了解项目管理软件的功能和用途

数字化办公、无纸化办公的概念越来越火&#xff0c;项目管理软件也一跃成为了热门话题。项目管理软件到底什么&#xff1f;项目管理软件是不是项目团队才用得到&#xff1f;项目管理软件都能干什么&#xff1f;今天一篇文章让你对项目管理软件不再迷茫。 什么是项目管理软件&a…

优化编辑距离以测量文本相似度

一、说明 编辑距离是一种文本相似度度量&#xff0c;用于测量 2 个单词之间的距离。它有许多方面应用&#xff0c;如文本自动完成和自动更正。 对于这两种用例中的任何一种&#xff0c;系统都会将用户输入的单词与字典中的单词进行比较&#xff0c;以找到最接近的匹配项&#x…

Seata之TCC模式解读

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

《网络协议》05. 网络通信安全 · 密码技术

title: 《网络协议》05. 网络通信安全 密码技术 date: 2022-09-10 15:16:15 updated: 2023-11-12 07:03:52 categories: 学习记录&#xff1a;网络协议 excerpt: 网络通信安全&#xff08;ARP 欺骗&#xff0c;DoS & DDoS&#xff0c;SYN 洪水攻击&#xff0c;LAND 攻击&a…

2个器件,做1个恒流源

在项目中经常要用到恒流源&#xff0c;查找资料可以使用电压源芯片LM317构造一个电流源芯片。本文将电压源加上一个电阻改为电流源&#xff0c;这种设计思路可以扩展到其他类型的电源芯片上&#xff0c;如开关电源及其他类型的线性电源&#xff0c;关键点在于基准电压VREF的使用…

数据库 关系数据理论

问题 数据冗余更新异常插入异常删除异常 一个好的模式应当不会发生插入异常、删除异常和更新异常&#xff0c;数据冗余应尽可能少 数据依赖 定义&#xff1a;一个关系内部属性与属性之间的一种约束关系&#xff08;该约束关系是通过属性间值的相等与否体现出来数据间相关联…

git02->gui图形化界面使用,ssh协议,idea集成GIT

gui图形化界面使用ssh协议idea集成GIT 1.gui图形化界面使用 2.ssh协议 git/github生成密钥并通过 操作分为本地电脑配置和github网站配置 第一步&#xff1a;本地电脑配置 右键空白处&#xff0c;选择Git Bash Here打开相关命令窗口 1.配置用户名和邮箱&#xff08;如果已经配…

Go 14岁了

今天我们庆祝Go开源十四周年&#xff01;Go度过了美好的一年&#xff0c;发布了两个功能齐全的版本和其他重要的里程碑。 我们在2月份发布了Go 1.20&#xff0c;在8月份发布了Go 1.21&#xff0c;更多地关注实现改进而不是新的语言更改。 在Go 1.20中&#xff0c;我们预览了配置…

基于多尺度分形残差注意力网络的超分辨率重建算法

1.引言 深度神经网络可以显著提高超分辨率的质量&#xff0c;但现有方法难以充分利用低分辨率尺度特征和通道信息&#xff0c;从而阻碍了卷积神经网络的表达能力。针对此类问题&#xff0c;本章提出了一种多尺度分形残差注意力网络&#xff08;Multi-scale Fractal Residual A…

优秀智慧园区案例 - 深圳特区建发创智云城智慧园区,万字长文解析先进智慧园区建设方案经验

一、项目背景 1、项目背景 创智云城项目位于大湾区核心城市之一的深圳&#xff0c;且地处GDP第一的科技创新核心区——南山区&#xff0c;136万㎡新兴产业智慧之城矗立于湾区核心创新高地。项目所处西丽湖国际科教城&#xff0c;最具发展潜力&#xff0c;规划全域面积约57平方…

JavaWeb Day09 Mybatis-基础操作02-XML映射文件动态SQL

目录 Mybatis动态SQL介绍​编辑 一、案例 ①Mapper层 ②测试类 ③EmpMapper.xml ④结果​ 二、标签 &#xff08;一&#xff09;if where标签 ​①EmpMapper.xml ②案例 ③总结 &#xff08;二&#xff09;foreach标签 ①SQL语句 ②Mapper层 ③EmpMapper.xml ④…

N-133基于springboot,vue小说网站

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plus 本项…

141.环形链表(LeetCode)

想法一 快慢指针&#xff0c;设置slow和fast指针&#xff0c;slow一次走一步&#xff0c;fast一次走两步&#xff0c;如果链表有环&#xff0c;它们最终会相遇&#xff0c;相遇时返回true&#xff1b;如果链表无环&#xff0c;它们最终走到空&#xff0c;跳出循环&#xff0c;…

企业邮箱本地私有化部署解决方案

随着互联网化进程不断深入&#xff0c;加快推进企业信息化系统建设&#xff0c;已经成为提高企业核心竞争力的重要途径。企业对企业邮箱系统的需求越来越大&#xff0c;企业邮箱系统作为企业级通讯工具中的利器&#xff0c;在协同办公和内外业务交流上发挥着无可替代的巨大作用…

国际阿里云:Windows系统ECS实例中CPU使用率较高问题的排查及解决方案!!

问题现象 Windows系统ECS实例中CPU使用率较高&#xff0c;即CPU使用率≥80%。 问题原因 CPU使用率较高可能有以下原因。 ECS实例遭到病毒木马入侵。 ECS实例中第三方杀毒软件运行。 ECS实例中应用程序异常、驱动异常、高I/O使用率或高中断处理的应用程序。 解决方案 步骤…

[工业自动化-13]:西门子S7-15xxx编程 - 分布式从站 - 硬件配置

目录 前言&#xff1a; 一、通过博图软件完成对ET200 SP分布式从站的硬件配置 二、从站组态配置的常见问题与解决 三、分布式从站与CPU的profiNet连接 3.1 概述 3.2 配置主站与从站的profinet连接 四、Profinet和普通以太网区别 4.1 概述 4.2 协议栈 五、主站与从站连…

将复数中的虚部取反 即对复数求共轭 numpy.conjugate()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将复数中的虚部取反 即对复数求共轭 numpy.conjugate() [太阳]选择题 请问以下代码中执行语句输出结果是&#xff1f; import numpy as np a np.array([1 2j, 3 - 4j]) print("【显示…

图论13-最小生成树-Kruskal算法+Prim算法

文章目录 1 最小生成树2 最小生成树Kruskal算法的实现2.1 算法思想2.2 算法实现2.2.1 如果图不联通&#xff0c;直接返回空&#xff0c;该图没有mst2.2.2 获得图中的所有边&#xff0c;并且进行排序2.2.2.1 Edge类要实现Comparable接口&#xff0c;并重写compareTo方法 2.2.3 取…