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

简单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来执行该脚本

image-20230826130448301

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

image-20230826131058992

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

image-20230826131207513

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 $?                                                             11
#  $?表示上一步的结果,用echo 输出  

返回值为1,表示/etc/passwd不是目录

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

image-20230826132641472

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

image-20230826132602446

一条命令完成上述命令 &&

&& 必须保证两边都为真,条件才会成立,有一边为假条件都不会成立

┌──(kali💋kali)-[~/Desktop]
└─$ [ -f  /etc/passwd ] && echo "该/etc/passwd是文件"                  
该/etc/passwd是文件      # [ -f  /etc/passwd ]  为真,确实是文件,
# 则执行后面的echo语句

image-20230826133443273

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

image-20230826140216263

|| 两边有一个为真就为真,两边都为真也为真

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

! 表示取反

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

要求普通用户输出user,管理员用户输出superuser

[ ! $USER = kali ] &&  echo "superuser" || echo "user"

image-20230826140635012

整数的比较运算符

-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 等于或小于
-ge 等于或大于
┌──(kali💋kali)-[~/Desktop]
└─$ [ 9 -gt 9 ]                                           ┌──(kali💋kali)-[~/Desktop]
└─$ echo $?                                                
1

image-20230826142855907

字符串的比较运算

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

image-20230826143230975

image-20230826143328453

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

image-20230826143722490

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

image-20230826150236438

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

image-20230826153620595

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地址

image-20230826160950004

#!/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

image-20230826161631043

检测同一局域网,多台主机存活情况
#!/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

image-20230826163244384

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

image-20230826164122016

相关文章:

简单shell脚本的编写

文章目录 简单使用shell脚本参数判断整数的比较运算符字符串的比较运算shell脚本流程控制shell脚本循环for循环批量添加用户批量ping IP地址检测同一局域网,多台主机存活情况检测同一局域网,多台主机存活情况多线程检测主机存活情况 while循环case选择语…...

汽车售后接待vr虚拟仿真实操演练作为岗位培训的重要工具和手段

汽车虚拟仿真教学软件是一种基于虚拟现实技术的教学辅助工具。它能够模拟真实的汽车环境和操作场景,让学生能够通过虚拟仿真来学习和实践汽车相关知识和技能。与传统的教学方式相比,汽车虚拟仿真教学软件具有更高的视觉沉浸感和互动性,能够更…...

登录校验-Filter-登录校验过滤器

目录 思路 登录校验Filter-流程 步骤 流程图 登录校验Filter-代码 过滤器类 工具类 测试登录 登录接口功能请求 其他接口功能请求 前后端联调 思路 前端访问登录接口,登陆成功后,服务端会生成一个JWT令牌,并返回给前端&#xff0…...

Vue3列表竖向滚动(包含使用swiper的翻页效果)

一、使用element-plus表格进行滚动&#xff1a; 可以满足的需求&#xff1a;表格一行一行竖向滚动&#xff0c;类似走马灯。 不能满足的需求&#xff1a;表格分页竖向滚动&#xff0c;有翻页的效果。 代码&#xff1a; <template><el-table:data"tableData"…...

OS 死锁处理

如果P先申请mutex 则mutex从1置零&#xff0c;假设申请到的empty 0则empty变成-1阻塞态 同理C中mutex从0变为-1&#xff0c;那么如果想离开阻塞态&#xff0c;那么就需要执行V&#xff08;empty&#xff09;但是如果执行V&#xff08;empty&#xff09;就需要P&#xff08;mu…...

Java实现根据按图搜索商品数据,按图搜索获取1688商品详情数据,1688拍立淘接口,1688API接口封装方法

要通过按图搜索1688的API获取商品详情跨境属性数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台…...

如何避免重复消费消息

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

【若依框架RuoYi-Vue-Plus 图片回显不显示问题,OSS文件上传或者本地上传】

一、问题 1.设计表 product&#xff08;商品表&#xff09; 有 id &#xff08;id&#xff09; name&#xff08;商品名&#xff09;icon&#xff08;图标&#xff09; 2.使用若依代码生成功能&#xff0c;导入product表&#xff0c;代码生成。 3.将生成的代码导入到项目中得到…...

docker搭建rocketmq环境

准备局域网 nameserver和broker在同一网段才能够互相访问&#xff0c;我们先创建一个局域网。 创建rocketmq-network&#xff0c;让nameserver、broker在同一个网段&#xff1a; docker network create --driverbridge \ --subnet192.168.2.10/24 rocketmq-network安装names…...

uwsgi部署多进程django apscheduler与问题排查

&#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;开源建设者与全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#xff1a;Zeeland&#x1f4da; Github主页: Undertone0809 (Zeeland)&…...

git difftool对比差异,避免推送不相关内容

问题 在利用git进行版本管理的时候&#xff0c;经常会由于对其他不相关的代码&#xff0c;做了一些小改动&#xff0c;例如删除了一个空行&#xff0c;多了一个缩进等。 为避免将这些不相关的改动也提交到远程&#xff0c;对PR造成不必要的影响&#xff0c;可以利用git diff命…...

Java设计模式:一、六大设计原则-05:接口隔离原则

文章目录 一、定义&#xff1a;接口隔离原则二、模拟场景&#xff1a;接口隔离原则三、违背方案&#xff1a;接口隔离原则3.1 工程结构3.2 英雄技能调用3.2.1 英雄技能接口3.2.2 英雄&#xff1a;后裔3.2.3 英雄&#xff1a;廉颇 3.3 单元测试 四、改善代码&#xff1a;接口隔离…...

第63步 深度学习图像识别:多分类建模误判病例分析(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 上两期我们基于TensorFlow和Pytorch环境做了图像识别的多分类任务建模。这一期我们做误判病例分析&#xff0c;分两节介绍&#xff0c;分别基于TensorFlow和Pytorch环境的建模和分析。 本期以健康组、肺结核组、COVID-19组、细菌性&am…...

OpenCv读/写视频色差 方案

OpenCv read / write video color differenceOpenCv读/写视频色差 感谢博主&#xff1a; OpenCv读/写视频色差答案 - 爱码网 有没有办法让 OpenCV 使用正确的转换&#xff1f;&#xff1f; 是的&#xff0c;使用 GStreamer 后端而不是 FFmpeg 后端&#xff0c;颜色看起来很完…...

【传输层】网络基础 -- UDP协议 | TCP协议

再谈端口号端口号范围划分netstatpidof UDPUDP的特点面向数据报UDP的缓冲区 基于UDP的应用层协议 TCP认识TCP协议的报头理解封装解包理解可靠性TCP工作模式16位窗口大小6位标志位URGACKPSHRSTSYNFIN 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序 在TCP/I…...

Android开发之性能测试工具Profiler

前言 性能优化问题&#xff0c;在我们开发时都会遇到&#xff0c;但是在小厂和对自己要求不严格的情况下&#xff0c;我都很少去做性能优化&#xff1b; 在性能优化上&#xff0c;基本大家都是通过自己的开发经验和性能分析工具来发现问题&#xff0c;今天给大家分享一下小编最…...

SpringBoot初级开发--多环境配置的集成(9)

在Springboot的开发中&#xff0c;我们经常要切换各种各样的环境配置&#xff0c;比如现在是开发环境&#xff0c;然后又切换到生产环境&#xff0c;这个时候用多环境配置就是一个明智的选择。接下来我们沿用上一章的工程来配置多环境配置工程。 1.准备多环境配置文件 这里我…...

(数学) 剑指 Offer 39. 数组中出现次数超过一半的数字 ——【Leetcode每日一题】

❓ 剑指 Offer 39. 数组中出现次数超过一半的数字 难度&#xff1a;简单 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输…...

如何用PS把roughness贴图转换成Smoothness,并放入Metallic贴图的a通道。

1&#xff1a;用PS打开Roughness贴图 2&#xff1a;选择反相&#xff0c;装换成Smoothness贴图 3&#xff1a;新建一个大小相等的psd文件&#xff0c;或者打开Metallic贴图 4&#xff1a;如果没有金属度贴图&#xff0c;就把新建的图画成纯黑色 5&#xff1a;选择图层蒙版->…...

了解XSS攻击与CSRF攻击

什么是XSS攻击 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的网络安全漏洞&#xff0c;它允许攻击者在受害者的浏览器上执行恶意脚本。这种攻击通常发生在 web 应用程序中&#xff0c;攻击者通过注入恶意脚本来利用用户对网站的信任&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...