Linux之shell脚本篇(三)

一、 for循环使用

  • 基础语法

for var in 数据域(表达式)
do 语句1
done 

  • 代码案例

1.循环3次hello world ,打印循环池内容

#!/bin/bash
for i in www.jd.com www.qq.com www.4399.com
do echo $i hello world.done 

2.ping 网段范围内地址

(1)打印网段地址
for i in 1 2 3
doecho 192.168.101.$i
done(2)ping 网段数据
#!/bin/bash
for i in 1 2 3
do ping -c3 192.168.1.$iif [ $i -eq 0 ];thenecho 192.168.1.$i >> /tmp/ping_ok.txtelseecho 192.168.1.$i >> /tmp/ping_error.txtfi
done

3.局域网IP探活脚本

#!/bin/bash
for i in $(echo {1..100})    #除此之外还可以写成$(seq 1 5)
do ping -c3 192.168.1.$iif [ $i -eq 0 ];thenecho 192.168.1.$i >> /tmp/ping_ok.txtelseecho 192.168.1.$i >> /tmp/ping_error.txtfi
done

4.自动化执行远程机器命令

#### v1 版本远程ssh
#!/bin/bash
for i in $(seq 1 5)
do ssh -l root 127.0.0.$i "df -h"
done#### v2 版本远程ssh免密登录
1.首先执行ssh-keygen命令 ,生成机器公钥
2.然后将公钥信息发给服务端予以免密认证
免密认证的原理是用机器私钥匙去验证解密机器,但前提是确保免密登录的机器上含有公钥信息
/root/.ssh/id_rsa.pubssh-copy-id -i /root/.ssh/id_rsa.pub 127.0.0.1#!/bin/bash
for i in $(seq 1 5)
do echo -e "\033[32m127.0.0.$i exec command:\033[0m"ssh -l root 127.0.0.$i "df -h"sleep 2
done

5.实现nginx文件的远程拷贝和日志备份

### 1. nginx软件包的远程拷贝#!/bin/bash
for i in $(seq 1 5)
doecho -e "\033[32m 127.0.0.0.$i exec command:\033[0m"scp -r nginx.1.26.0.tar.gz 127.0.0.$i:/tmp/ n    ## 此时需要保证tar包和sh脚本是平级的sleep 2
done 
echo "==================================="
echo "检查机器目录存的tar包是否存在?"
for i in $(seq 1 5)
do ssh -l root 127.0.0.$i "ls /tmp/"sleep 2
done ### 2.nginx 日志拷贝#!/bin/bash
for i in $(ls *.log)
dotar -czf ${i}.tar.gz $i## tar -xzf $i     ## 解压tar包rm -rf $i
done

6.打印1-100数字并进行求和

### 方法一:命令方式打印
echo {1..100} | sed 's/ / + /g'|xargs expr ### 方法二:for循环遍历求和
j=0
for i in $(seq 1 100)     ### 也可换成 for ((i=1;i<=100;i++))
doj=`expr $i +$j`
done  
echo $j

7.for循环打印10秒等待提示

for((i=1;i<=10;i++))
doecho -ne "\033[32m-033[0m"    ## -n表示不换行sleep 1
done


二、while 循环使用

while 循环相较于for循环需要满足其特定条件才会退出循环,而不会像for循环存在一个连续的数据域

  • 基础语法

while (表达式)
do语句1
done
  • 代码案例

1.打印good evening

#!/bin/bash## 无限次
while true
do echo good evening!!!sleep 1
done## 限制10次
i=1
while (($i<=10))
doecho good evening!!!sleep 1i=`expr $i + 1`     ## 类似于((i++))
done

2.打印1~100数并进行累加

#!/bin/bash
i=1
j=0
while (($i<=100))
doecho $ij=`expr $i + $j`i=`expr $i + 1`
done
echo $j 

3.远程执行命令

#!/bin/bash
i=1
while (($i<=5))
doecho -e "\033[32m127.0.0.$i exec command:\033[0m"ssh -l root 127.0.0.$i "df -h"sleep 1i=`expr $i + 1`
done

4.远程拷贝命令

#!/bin/bash
i=1
while (($i<=5))
doecho -e "\033[32m127.0.0.$i exec command:\033[0m"scp -r redis-1.2.6.tar.gz  root@127.0.0.$i:/tmpi=`expr $i + 1`sleep 1 
done

5.循环读取文件内容

#!/bin/bash
while read INPUT
doecho $INPUTdone < list.txt

6.一键局域网ip探活

#!/bin/bash
i=1
while(($i<=254))
doping -c3 192.168.1.$i if [ $? -eq 0 ];thenecho 192.168.1.$i >> /tmp/ping_ok.txtelseecho 192.168.1.$i >> /tmp/ping_error.txtfii=`expr $i + 1`
done

7.判断/etc/passwd是否更改

#!/bin/bash
## 若md5的值不相等,则证明被篡改了,
while true
do OLD_MD5=$(md5sum /etc/passwd|cut -d " " -f1)sleep 5 NEW_MD5=$(md5sum /etc/passwd|cut -d " " -f1)if [ $OLD_MD5 != $NEW_MD5 ];thenecho $(date)echo echo "密码文件/etc/passwd被修改了,请检查>>>>>"
done

8.每隔5s监控网站

#!/bin/bash
i=0
while true
docurl -s "https://www.baidu.com"sleep 5
done

三、case多条件使用

  • 基础语法

case $1 inpattern 1)语句1;;pattern 2)语句2;;pattern 3)语句3;;
esac
  • 代码案例

1.实现nginx功能多条件选择

#!/bin/bash
case $1 indownload )wget -c http://nginx.org/download/nginx-1.26.1.tar.gz -P /usr/src;;extract )tar -xzvf nginx-1.26.1.tar.gz;;intall )cd nginx-1.26.1yum -y install gcc make pcre-devel zlib-devel./configure;make;make install;;start )/usr/local/nginx/sbin/nginxsleep 1ps -ef | grep -aiE nginx;;* )echo -e "\033[32m-----------------\033[0m"echo -e "\033[32mUsage:{/bin/sh $0 download|extract|install|start|help}\033[0m"
esac

四、select选择菜单使用

  • 基础语法

select i in (表达式)
do语句
done
  • 代码案例

1.v1  单独使用select命令

#!/bin/bash
### 配合PS3可以做打印提示
PS3="请选择你喜欢的操作系统:"
select i in Centos RedHat Ubuntu Openeuler Quit
doif [ $i == "Quit"];thenexit fiecho "Your select system:" $i
done

2. v2 case结合select使用

#!/bin/bash
PS3="Pleaseinput you selct install menu:"
select i in php http mysql quit
docase $i inhttp)echo Test Httpd.;;php)echo Test php.;;mysql)echo Test mysql.;;quit)echo The system exit.exit;;esac
done

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

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

相关文章

9-大语言模型—Transformer 核心:多头注意力的 10 步拆解与可视化理解

目录 1、Transformer编码器堆叠的每层结构 2、输入嵌入 3、位置编码 4、多头注意力层 4.1、步骤1&#xff1a;表示输入 4.1.1、输入 4.1.2、示意图 ​编辑 4.2、步骤2&#xff1a;初始化权重矩阵 4.2.1、初始化Query权重矩阵&#xff1a; 4.2.2、初始化Key权重矩阵…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现标签条码一维码的检测(C#代码,UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现标签条码一维码的检测&#xff08;C#代码&#xff0c;UI界面版&#xff09;&#xff09;工业相机使用YoloV8模型实现标签条码一维码的检测工业相机通过YoloV8模型实现标签条码的检测的技术背景在相机SDK中获取图像转换…

Python编程:初入Python魔法世界

一、常量表达式在编程中&#xff0c;常量指的是在程序执行期间其值不会改变的数据项。虽然 Python 并没有专门的语法来定义常量&#xff08;不像某些其他语言如 Java 中有 final 关键字&#xff09;&#xff0c;但在实践中&#xff0c;我们通常通过约定俗成的方式来表示一个变量…

使用Python实现单词记忆软件

前言该代码实现了一个基于PyQt5的单词记忆软件&#xff0c;支持高考、四级、六级和考研四个级别的词库。程序提供四种学习模式&#xff1a;拆分模式&#xff08;将单词拆分为片段重组&#xff09;、填空模式&#xff08;选择正确字母填空&#xff09;、输入模式&#xff08;手动…

C++查询mysql数据

文章目录 文章目录 1.前言 2. 代码 &#xff08;1&#xff09;执行查询SQL &#xff08;2&#xff09;获取结果集 &#xff08;3&#xff09;遍历结果集&#xff08;获取字段数、行数&#xff09; &#xff08;4&#xff09;释放资源 3.完整代码 1.前言 我们成功连接数…

机器学习特征工程:特征选择及在医学影像领域的应用

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

【GoLang#3】:数据结构(切片 | map 映射)

一、切片 之前我们在数组那举过一个例子&#xff1a;关于 值类型 和 引用类型的&#xff0c;如下&#xff1a; func main(){// 值类型: 数组var a1 [...]int{1, 2, 3}a2 : a1a1[0] 11fmt.Println(a1) // 11 2 3fmt.Println(a2) // 1 2 3// 引用类型: 切片var b1 []int{1, 2,…

Spring的深入浅出(6)--使用AOP的思想改造转账案例

在Spring中使用AOP&#xff08;基于注解&#xff09;使用AOP的思想改造转账案例业务类改造&#xff1a;移除事务管理代码public class AccountServiceImpl implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.…

【LeetCode刷题指南】--有效的括号

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

【PyTorch】图像多分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 多类图像分类的目标是为一组固定类别中的图像分配标签。 目录 加载和处理数据 搭建模型 定义损失函数 定义优化器 训练和迁移学习 用随机权重进行训…

详谈OSI七层模型和TCP/IP四层模型以及tcp与udp为什么是4层,http与https为什么是7层

一、网络模型&#xff1a;OSI七层 vs TCP/IP四层OSI七层模型 (理论参考模型):目的&#xff1a;提供一个标准化的理论框架&#xff0c;用于理解网络通信过程和各层的功能划分&#xff0c;促进不同厂商设备的互操作性。它是一个理想化的模型。分层 (从下到上):物理层&#xff1a;…

自然语言处理技术应用领域深度解析:从理论到实践的全面探索

1. 引言:自然语言处理的技术革命与应用前景 自然语言处理(Natural Language Processing,NLP)作为人工智能领域的核心分支,正在以前所未有的速度改变着我们的数字化生活。从最初的规则基础系统到如今基于深度学习的大语言模型,NLP技术经历了从理论探索到实际应用的深刻变…