简单shell脚本的编写
文章目录
- 简单使用
- shell脚本参数判断
- 整数的比较运算符
- 字符串的比较运算
- shell脚本流程控制
- shell脚本循环
- for循环
- 批量添加用户
- 批量ping IP地址
- 检测同一局域网,多台主机存活情况
- 检测同一局域网,多台主机存活情况
- 多线程检测主机存活情况
- while循环
- case选择语句
shell脚本就是将命令写入文本中,文本可以被执行。
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell 既是应用程序,又是一种脚本语言(应用程序 解析 脚本语言)。
简单使用
$0 表示当前脚本的名称
$* 表示脚本的所有参数
$# 表示脚本的参数的个数
$? 程序执行完后的结果,返回值0表示执行成功$n 表示脚本的第n个参数,n=1,2,3,4,5…9
#!bin/bash
echo "当前脚本的名称为$O"
双引号会解释变量
单引号会把变量当成字符串表示
没有给这个脚本赋予可执行权限就用bash来执行该脚本

#!bin/bash
echo "当前脚本的名称为$O"
echo "总共有$#个参数,分别是$*"

#!bin/bash
echo "当前脚本的名称为$O"
echo "总共有$#个参数,分别是$*"
echo "第一个参数是$1,第三个参数是$3"

shell脚本参数判断
- 1、文件测试语句
-d测试文件是否是目录类型- 是目录返回0,不是目录返回非0
-e测试文件是否存在-f判断是否为一般文件-r判断当前用户对该文件是否有==读取==权限-w判断当前用户对该文件是否有==写入==权限-x判断当前用户对该文件是否有==执行==权限
- 2、逻辑测试语句
- 3、整数值测试语句
- 4、字符串比较语句
判断/etc/passwd是否为目录
┌──(kali💋kali)-[~/Desktop]
└─$ [ -d /etc/passwd ]┌──(kali💋kali)-[~/Desktop]
└─$ echo $? 1 ⨯
1
# $?表示上一步的结果,用echo 输出
返回值为1,表示/etc/passwd不是目录
┌──(kali💋kali)-[~/Desktop]
└─$ ls
demo.sh zs┌──(kali💋kali)-[~/Desktop]
└─$ [ -d zs ] ┌──(kali💋kali)-[~/Desktop]
└─$ echo $?
0

┌──(kali💋kali)-[~/Desktop]
└─$ [ -d demo.sh ]┌──(kali💋kali)-[~/Desktop]
└─$ echo $? 1 ⨯
1

一条命令完成上述命令 &&
&& 必须保证两边都为真,条件才会成立,有一边为假条件都不会成立
┌──(kali💋kali)-[~/Desktop]
└─$ [ -f /etc/passwd ] && echo "该/etc/passwd是文件"
该/etc/passwd是文件 # [ -f /etc/passwd ] 为真,确实是文件,
# 则执行后面的echo语句

┌──(kali💋kali)-[~/Desktop]
└─$ [ $USER=kali ] && echo "该用户是kali用户"
该用户是kali用户

|| 两边有一个为真就为真,两边都为真也为真
┌──(kali💋kali)-[~/Desktop]
└─$ [ $USER=kali ] || echo "该用户是kali用户"
! 表示取反
┌──(kali💋kali)-[~/Desktop]
└─$ [ ! $USER=kali ] || echo "该用户是kali用户"
该用户是kali用户
要求普通用户输出user,管理员用户输出superuser
[ ! $USER = kali ] && echo "superuser" || echo "user"

整数的比较运算符
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 等于或小于
-ge 等于或大于
┌──(kali💋kali)-[~/Desktop]
└─$ [ 9 -gt 9 ] ┌──(kali💋kali)-[~/Desktop]
└─$ echo $?
1

字符串的比较运算
= 比较字符串内容是否相同
!= 比较字符串内容是否为空
-z 判断字符串内容是否为空


┌──(kali💋kali)-[~/Desktop]
└─$ [ $LANG = "en_US.UTF-8" ] && echo "支持英文" || echo "支持中文"
支持英文

shell脚本流程控制
if 条件
then 命令
else 命令
fi
if…
#!/bin/bash
DIR="/home/kali/Desktop/demo"
if [ ! -e $DIR]
then mkdir -p $DIR
fi
if…else…
#!/bin/bash
ping -c 3 -i 0.2 -w 3 &1 $>/dev/nullif [ $? -eq 0 ]
then echo "该$1是正常的"
elseecho "该$1是不正常的"
fi

if…else…嵌套
ping -c -i 0.2 -w 3 $1 &>/dev/nullif [ $? -eq 0 ]then echo "该$1是正常的"elseecho "该$1是不正常的"fi
if…else…多级嵌套
#!/bin/ash
if [ -z $1 ]
then echo "作者:zs"echo "该命令是检测服务器IP是否正常"echo "直接在命令后面加参数IP就可以执行"
elseping -c 3 -i 0.2 -w 3 $1 &>/dev/nullif [ $? -eq 0 ]then echo "该$1是正常的"elseecho "该$1是不正常的"fifi
if…elif…else
read -p "请输入分数 [1--100]:" score
if [ $score -ge 85 ] && [ $score -le 100 ] ;thenecho "优秀"
elif [ $score -ge 70 ] && [ $score -le 84 ] ;thenecho "合格"
elseecho "不合格"
fi

shell脚本循环
for循环
for 变量名 in 取值列表
do命令序列
done
批量添加用户

#!/bin/bash
#循环语句
read -p "请输入密码:" PASSWORDfor USERNAME in `cat user.txt`
doid $USERNAME &>/dev/nullif [ $? -eq 0 ]then echo "该用户$USERNAME 已经存在"elseuseradd $USERNAME &>/dev/nullecho "$PASSWORD"| passwd --stdin $USERNAME &>/dev/nullecho "该用户$USERNAME添加成功"fi
done
批量ping IP地址

#!/bin/bash
#批量pingIP地址
HOSTLIST=$(cat /home/kali/Desktop/iplist.txt)
for IP in $HOSTLIST
do ping -c 3 -i 0.2 -w 3 $IP &>/dev/nullif [ $? -eq 0 ]thenecho "该IP:$IP是正常的"elseecho "该IP: $IP是ping不通的"fi
done

检测同一局域网,多台主机存活情况
#!/bin/bash
read -p "请输入网络位:" NETWORKfor ip in $(seq 100 254) #seq用于生成数字100~254
doping -c 3 -i 0.2 -w 3 $NETWORK.$ip &>/dev/null && result=0 || result=1if [ $result -eq 0 ];thenecho "IP地址: $NETWORK.$ip is up !!"echo $NETWORK.$ip >> /tmp/up.txtelseecho "IP地址: $NETWORK.$ip is down !!"echo $NETWORK.$ip >> /tmp/down.txtfi
done
检测同一局域网,多台主机存活情况
#!/bin/bash
read -p "请输入网络位:" NETWORKfor ip in $(seq 100 254) #seq用于生成数字100~254
doping -c 3 -i 0.2 -w 3 $NETWORK.$ip &>/dev/null && result=0 || result=1if [ $result -eq 0 ];thenecho "IP地址: $NETWORK.$ip is up !!"echo $NETWORK.$ip >> /tmp/up.txtelseecho "IP地址: $NETWORK.$ip is down !!"echo $NETWORK.$ip >> /tmp/down.txtfi
done

多线程检测主机存活情况
echo输入带颜色的内容相关博客
#!/bin/bash
read -p "请输入IP网络位:" ip
for i in $(seq 1 254) #seq用于生成数字1~254do{ ping $ip.$i -c1 -s1 2>&1 1>/dev/null && echo -e ping $ip.$i 是 "\033[32m通的!\033[0m" || echo -e ping $ip.$i 是 "\033[31m不通的!\033[0m" } & #注意在shell中不支持多线程的.这里&是采用多进程执行方式,{}里执行了,不管结束没结束继续执行下一条.done
wait #{}执行完,执行下一条,相当于高级语言多线程同步作用.
echo "扫描检测已结束。"

while循环
while 条件
do命令序列
done
$RANDOM是linux中的内置变量,可以随机生成0-32767之间的整数数字

#!/bin/bash
TIMES=0
echo "该商品的价格为0--999之间,来猜一猜!"
PRICE=$(expr $RANDOM % 1000 )
while true
doread -p "请输入价格:" INTlet TIMES++ #自增if [ $INT -eq $PRICE ];thenecho "恭喜你猜对了,价格为$PRICE"echo "猜了$TIMES次"exitelif [ $INT -gt $PRICE ];thenecho "猜高了"elseecho "太低了"fi
done

case选择语句
case 变量值 in
模式1命令序列1
模式2 命令序列2
....默认命令序列
esac
#!/bin/bash
read -p "请输入一个字符:" KEY
case "$KEY" in[a-z]|[A-Z])echo "这是字母";;[0-9])echo "这是数字";;*)echo "这是特殊符号"
esac

相关文章:
简单shell脚本的编写
文章目录 简单使用shell脚本参数判断整数的比较运算符字符串的比较运算shell脚本流程控制shell脚本循环for循环批量添加用户批量ping IP地址检测同一局域网,多台主机存活情况检测同一局域网,多台主机存活情况多线程检测主机存活情况 while循环case选择语…...
汽车售后接待vr虚拟仿真实操演练作为岗位培训的重要工具和手段
汽车虚拟仿真教学软件是一种基于虚拟现实技术的教学辅助工具。它能够模拟真实的汽车环境和操作场景,让学生能够通过虚拟仿真来学习和实践汽车相关知识和技能。与传统的教学方式相比,汽车虚拟仿真教学软件具有更高的视觉沉浸感和互动性,能够更…...
登录校验-Filter-登录校验过滤器
目录 思路 登录校验Filter-流程 步骤 流程图 登录校验Filter-代码 过滤器类 工具类 测试登录 登录接口功能请求 其他接口功能请求 前后端联调 思路 前端访问登录接口,登陆成功后,服务端会生成一个JWT令牌,并返回给前端࿰…...
Vue3列表竖向滚动(包含使用swiper的翻页效果)
一、使用element-plus表格进行滚动: 可以满足的需求:表格一行一行竖向滚动,类似走马灯。 不能满足的需求:表格分页竖向滚动,有翻页的效果。 代码: <template><el-table:data"tableData"…...
OS 死锁处理
如果P先申请mutex 则mutex从1置零,假设申请到的empty 0则empty变成-1阻塞态 同理C中mutex从0变为-1,那么如果想离开阻塞态,那么就需要执行V(empty)但是如果执行V(empty)就需要P(mu…...
Java实现根据按图搜索商品数据,按图搜索获取1688商品详情数据,1688拍立淘接口,1688API接口封装方法
要通过按图搜索1688的API获取商品详情跨境属性数据,您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过1688开放平台API获取商品详情属性数据接口: 首先,确保您已注册成为1688开放平台…...
如何避免重复消费消息
博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
【若依框架RuoYi-Vue-Plus 图片回显不显示问题,OSS文件上传或者本地上传】
一、问题 1.设计表 product(商品表) 有 id (id) name(商品名)icon(图标) 2.使用若依代码生成功能,导入product表,代码生成。 3.将生成的代码导入到项目中得到…...
docker搭建rocketmq环境
准备局域网 nameserver和broker在同一网段才能够互相访问,我们先创建一个局域网。 创建rocketmq-network,让nameserver、broker在同一个网段: docker network create --driverbridge \ --subnet192.168.2.10/24 rocketmq-network安装names…...
uwsgi部署多进程django apscheduler与问题排查
💖 作者简介:大家好,我是Zeeland,开源建设者与全栈领域优质创作者。📝 CSDN主页:Zeeland🔥📣 我的博客:Zeeland📚 Github主页: Undertone0809 (Zeeland)&…...
git difftool对比差异,避免推送不相关内容
问题 在利用git进行版本管理的时候,经常会由于对其他不相关的代码,做了一些小改动,例如删除了一个空行,多了一个缩进等。 为避免将这些不相关的改动也提交到远程,对PR造成不必要的影响,可以利用git diff命…...
Java设计模式:一、六大设计原则-05:接口隔离原则
文章目录 一、定义:接口隔离原则二、模拟场景:接口隔离原则三、违背方案:接口隔离原则3.1 工程结构3.2 英雄技能调用3.2.1 英雄技能接口3.2.2 英雄:后裔3.2.3 英雄:廉颇 3.3 单元测试 四、改善代码:接口隔离…...
第63步 深度学习图像识别:多分类建模误判病例分析(Tensorflow)
基于WIN10的64位系统演示 一、写在前面 上两期我们基于TensorFlow和Pytorch环境做了图像识别的多分类任务建模。这一期我们做误判病例分析,分两节介绍,分别基于TensorFlow和Pytorch环境的建模和分析。 本期以健康组、肺结核组、COVID-19组、细菌性&am…...
OpenCv读/写视频色差 方案
OpenCv read / write video color differenceOpenCv读/写视频色差 感谢博主: OpenCv读/写视频色差答案 - 爱码网 有没有办法让 OpenCV 使用正确的转换?? 是的,使用 GStreamer 后端而不是 FFmpeg 后端,颜色看起来很完…...
【传输层】网络基础 -- UDP协议 | TCP协议
再谈端口号端口号范围划分netstatpidof UDPUDP的特点面向数据报UDP的缓冲区 基于UDP的应用层协议 TCP认识TCP协议的报头理解封装解包理解可靠性TCP工作模式16位窗口大小6位标志位URGACKPSHRSTSYNFIN 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序 在TCP/I…...
Android开发之性能测试工具Profiler
前言 性能优化问题,在我们开发时都会遇到,但是在小厂和对自己要求不严格的情况下,我都很少去做性能优化; 在性能优化上,基本大家都是通过自己的开发经验和性能分析工具来发现问题,今天给大家分享一下小编最…...
SpringBoot初级开发--多环境配置的集成(9)
在Springboot的开发中,我们经常要切换各种各样的环境配置,比如现在是开发环境,然后又切换到生产环境,这个时候用多环境配置就是一个明智的选择。接下来我们沿用上一章的工程来配置多环境配置工程。 1.准备多环境配置文件 这里我…...
(数学) 剑指 Offer 39. 数组中出现次数超过一半的数字 ——【Leetcode每日一题】
❓ 剑指 Offer 39. 数组中出现次数超过一半的数字 难度:简单 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输…...
如何用PS把roughness贴图转换成Smoothness,并放入Metallic贴图的a通道。
1:用PS打开Roughness贴图 2:选择反相,装换成Smoothness贴图 3:新建一个大小相等的psd文件,或者打开Metallic贴图 4:如果没有金属度贴图,就把新建的图画成纯黑色 5:选择图层蒙版->…...
了解XSS攻击与CSRF攻击
什么是XSS攻击 XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的网络安全漏洞,它允许攻击者在受害者的浏览器上执行恶意脚本。这种攻击通常发生在 web 应用程序中,攻击者通过注入恶意脚本来利用用户对网站的信任&…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
