当前位置: 首页 > java >正文

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.xdnf.cn/news/16503.html

相关文章:

  • 3D碰撞检测系统 基于SAT算法+Burst优化(Unity)
  • rust- 定义模块以控制作用域和隐私
  • 任务提醒工具怎么选?对比16款热门软件
  • 2025年Agent创业实战指南:从0到1打造高增长AI智能体项目
  • 撤销连续三年不使用注册商标一次下受理书!
  • Spring之【Bean的生命周期】
  • Android MQTT 长连接最佳实践技术分享
  • Amazon Relational Database Service (Amazon RDS)入门课
  • C++ 构造函数中阻止资源泄漏的实践探索
  • Linux驱动20 --- FFMPEG视频API
  • 【 Python 】Collections库权威指南
  • 【多模态】天池AFAC赛道四-智能体赋能的金融多模态报告自动化生成part1-数据获取
  • 卫星图像数据集在农业领域的应用
  • Leetcode力扣解题记录--第136题(查找单数)
  • Redis C++客户端——命令使用
  • Vue 框架 学习笔记
  • 9-大语言模型—Transformer 核心:多头注意力的 10 步拆解与可视化理解
  • 【在Unity游戏开发中Dictionary、List介绍】
  • MongoDB索引及其原理
  • 2025 DevOps开源工具全景指南:构建面向未来的智能交付体系
  • 代码随想录训练因第三十天| 39.组合总和 40.组合总和ll 131.分割回文串
  • PyTorch武侠演义 第一卷:初入江湖 第7章:矿洞中的计算禁制
  • 链表算法综合——重排链表
  • 望言OCR视频字幕提取2025终极评测:免费版VS专业版提全方位对比(含免费下载)
  • 重生之我在暑假学习微服务第二天《MybatisPlus-下篇》
  • 主要分布于内侧内嗅皮层的层Ⅲ的边界向量细胞(BVCs)对NLP中的深层语义分析的积极影响和启示
  • @RefreshScope 核心原理深度解析:Spring Boot 的动态魔法
  • Node.js特训专栏-配置与环境部署:20.PM2进程守护与负载均衡
  • Rust Web 全栈开发(十一):WebAssembly 尝鲜
  • 数学建模——模糊综合评价