Shell 脚本介绍及应用案例

目录

Shell传递参数

$特殊符号含义

示例:

Shell运算符

关系运算符

文件运算符

示例:

Shell 流程控制

if判断

格式:

示例:

结果:      

for循环

格式:

示例:

结果:

while循环

格式:

示例:

结果:

function函数

函数中调用

外部调用

Shell应用示例

从1到用户输入的数字之间所有整数的和

代码

结果

99乘法表

代码

 结果


一、Shell传递参数

$特殊符号含义

示例:

#!/bin/bash


echo "第一个参数是 $1"
echo "第二个参数是 $2"
echo "当前脚本返回状态是 $?"
echo "当前脚本名字是 $0"
echo "当前脚本共传递的参数是 $#个"

二、Shell运算符

关系运算符

-gt

是否大于

-ge

是否大于等于

-eq

是否等于

-ne

是否不等于

-lt

是否小于

-le

是否小于等于 

文件运算符

-e或-a

文件存在性测试,存在为真,否则为假

-f

是否存在且为普通文件

-d

否存在且为目录文件

-b

是否存在且为块设备文件

-c

是否存在且为字符设备文件

-s

是否存在且为套接字文件

-p

是否存在且为命名管道文件

-h/-l

是否存在且为符号链接文件

示例:

#!/bin/bash
DIR="/opt/idss/data"
if [ -d $DIR ];then
    echo "目录存在"
else
    echo "目录不存在"
    mkdir -p $DIR
    if [ -d $DIR ];then
        echo "创建'$DIR'完成"
    fi
fi
FILENAME="/opt/idss/data/1.txt"
if [ -f $FILENAME ];then
    echo "文件存在"
else
    echo "文件不存在"
    touch $FILENAME
    if [ -f $FILENAME ];then
        echo "创建'$FILENAME'完成"
    fi
fi

三、Shell 流程控制

if判断

格式:
if [ 条件判断式 ]; then
    # 当条件为真时执行的命令
else
    # 当条件为假时执行的命令
fi
示例:
#!/bin/bash

a=1
b=2

if [ $a -ge  $b ];then
        echo "no"
else
        echo "yes"
fi
结果:      

for循环

格式:
for item in list; do
    # 在每次迭代中执行的命令
done
示例:
#!/bin/bash

list=(a b c d)

for i in ${list[@]};do
        echo $i
done
结果:

while循环

格式:
while [ 条件判断式 ]
do
  # 循环体,执行相关操作
done
示例:
#!/bin/bash

count=0
while [ $count -lt 5 ]
do
  echo "这是一个简单的while循环,当前计数:$count"
  count=$((count+1))
done
#!/bin/bash

count=0

while true
do
  echo "这是第 $count 次循环"
  count=$((count+1))

  if [ $count -gt 5 ]
  then
    break
  fi
done

echo "循环结束"
结果:

四、function函数

函数中调用

function check(){
 
        echo ""
 
        echo ""
 
        ...
 
}
 
check


执行check_server.sh脚本:

外部调用

函数的作用在其模块化,方便下次使用的时候,直接调用使用。所以在我们每次写脚本时,可以直接调用之前写好的函数,只需在使用前进行声明即可。

#!/bin/sh
FILEPATH=`pwd`
source $FILEPATH/check_server.sh
check


  执行调用脚本调用check_server.sh的check函数:

五、Shell应用示例

1、从1到用户输入的数字之间所有整数的和

代码
#!/bin/bash
read -p "Please input your number: " num
s=0
for ((i=1; i<=$num; i++))
do
    s=$(($s+$i))
done
echo "The sum from 1 to $num is: $s"

结果

输入数字4  == 1+2+3=4

 输入数字100 == 1+2+3=4+...100

2、99乘法表

代码
#!/bin/bash

for ((i=1; i<=9; i++))
do
    for ((j=1; j<=i; j++))
    do
        let "result=i*j"
        echo -n "$i * $j = $result  "
    done
    echo ""  # 换行
done

 结果

 3、配置免密

服务器列表文件:

[root@ph ~]# cat serverlist.txt

172.16.0.15

172.16.0.16

代码
#!/bin/bash
current=/root
serverlist=`cat $current/serverlist.txt`
mkdir -p /root/.ssh
ssh-keygen -t rsa -P ''
for ip in $serverlist
do
    echo "$ip Need to configure password free."
    scp  /root/.ssh/id_rsa.pub root@$ip:/root/.ssh/authorized_keys
done

4、监控示例

监控内存发送邮件通知
#!/bin/bash
LOCAL_IP="192.168.159.128"
QQ_MAIL="963268595@qq.com"
#查询本机的剩余内存
FREE=$(free -h | grep -i "Mem" |awk '{print $4}')
if [[ $? -eq 0 ]];then
        echo -e "开始发送邮件"
        echo "$LOCAL_IP FREE IS $FREE" | mail -s "内存监控" $QQ_MAIL
        if [[ $? -eq 0 ]];then
                echo -e "Success send $QQ_MAIL "
        fi
fi
监控CPU
#!/bin/bash

# 设置阈值,当CPU占用超过该阈值时进行输出提示
threshold=80

while true
do
    # 使用top命令获取CPU占用信息,并使用grep和awk筛选和解析输出结果
    cpu_usage=$(top -bn 1 | grep "%Cpu(s)" | awk '{print $2}')

    # 将浮点数转换为整数,以便进行比较
    cpu_usage=${cpu_usage%.*}

    echo "Current CPU Usage: ${cpu_usage}%"

    # 检查CPU占用是否超过阈值
    if [ $cpu_usage -gt $threshold ]
    then
        echo "CPU Usage Exceeded Threshold!"
        # 在此处添加其他操作或通知机制
    fi

    # 定义间隔时间,以控制检查频率
    sleep 5
done
监控硬盘
#如果磁盘使用情况大于等于40% 则报警

#!/bin/bash

d=$(df -h | grep "/$" | awk '{print $5}' | awk -F% '{print $1}')

if [ $d -ge 40 ]

then

echo "需清理"

fi

没写完,实时更新

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

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

相关文章

Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?

说说webpack中常见的Plugin&#xff1f;解决了什么问题&#xff1f;- 题目详情 - 前端面试题宝典 1、plugin 的作用 Plugin 是一种计算机应用程序&#xff0c;它和主应用程序互相交互&#xff0c;以提供特定的功能。 是一种遵循一定规范的应用程序接口编写出来的程序&#…

如何上传自己的Jar到Maven中央仓库

在项目开发过程中&#xff0c;我们常常会使用 Maven 从仓库拉取开源的第三方 Jar 包。本文将带领大家将自己写好的代码或开源项目发布到 Maven中央仓库中&#xff0c;让其他人可以直接依赖你的 Jar 包&#xff0c;而不需要先下载你的代码后 install 到本地。 注册帐号 点击以…

【MySQL篇】数据库角色

前言 数据库角色是被命名的一组与数据库操作相关的权限&#xff0c;角色是权限的集合。因此&#xff0c;可以为一组具有相同权限的用户创建一个角色&#xff0c;使用角色来管理数据库权限可以简化授权的过程。 CREATE ROLE&#xff1a;创建一个角色 GRANT&#xff1a;给角色授…

进程(3)——进程优先级与环境变量【Linux】

进程&#xff08;3&#xff09;——进程优先级与环境变量【Linux】 一. 进程如何在cpu中如何执行1.1进程在CPU中的特性1.2 寄存器1.2.1 进程的上下文 二. 进程优先级2.1 如何查看进程优先级2.2 修改进程的优先级2.2.1 NI值2.2.2 修改方法 三. 环境变量3.1 什么是环境变量&#…

华为ICT——第六章:深度学习和卷积神经网络/详篇

目录 1&#xff1a;深度学习卷积的重要概念&#xff1a; 2&#xff1a;CNN核心思想——局部感知&#xff1a; CNN核心思想——参数共享&#xff1a; 3&#xff1a;卷积层的功能&#xff1a; 4&#xff1a;不同深度的卷积层提取的特征&#xff1a; 5&#xff1a;卷积效果——…

【公益案例展】火山引擎公益电子票据服务——连接善意,共创美好

‍ 火山引擎公益案例 本项目案例由火山引擎投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 捐赠票据是慈善组织接受捐赠后给捐赠方开具的重要凭证&…

saleae逻辑分析仪在win10上的安装: 驱动安装失败的解决办法

1. 安装 安装64位的&#xff1a;Logic Setup 1.1.16 (64-bit).exe 选择安装目录&#xff1a; 安装其间&#xff0c;如果弹出驱动安装对话框&#xff0c;要选择信任并安装驱动。 安装结束&#xff0c;打开软件&#xff0c;是未连接的状态。 此时打开电脑的设备管理器&#xff…

程序员男盆友给自己做了一款增进感情的小程序

前言 又是无聊的一天&#xff0c;逛GitHub的时候发现一个给女朋友做了一个互动微信小程序&#xff0c;据说女朋友更爱自己了&#xff0c;所以当晚。。。。给自己做了丰盛的晚餐&#xff0c;我当即点开立马开发粘贴复制起来&#xff0c;想到做的小程序可以和未来的女朋友增进感…

基于React开发的chatgpt网页版(仿chatgpt)

在浏览github的时候发现了一个好玩的项目本项目&#xff0c;是github大神Yidadaa开发的chatgpt网页版&#xff0c;该开源项目是跨平台的&#xff0c;Web / PWA / Linux / Win / MacOS都可以访问。非常有意思&#xff0c;本人就部署了一套&#xff0c;喜欢的同学可以体验一番。 …

快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab

Walrus 是一款基于平台工程理念的开源应用管理平台&#xff0c;致力于解决应用交付领域的深切痛点。借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境&#xff0c;并支持任意应用形态统一编排部署&#xff0c;降低使用基础设施的复杂度&#xff0c;为研发和运维团队提供…

干货 | 接口自动化测试分层设计与实践总结

接口测试三要素&#xff1a; 参数构造 发起请求&#xff0c;获取响应 校验结果 一、原始状态 当我们的用例没有进行分层设计的时候&#xff0c;只能算是一个“苗条式”的脚本。以一个后台创建商品活动的场景为例&#xff0c;大概流程是这样的(默认已经是登录状态下)&#…

FMCW雷达论文速览 | TRS 2023, 基于FMCW雷达的多天线高精度测距算法及性能分析

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TRS 2023 | High Accuracy Multi-antenna Ranging Algorithm and Performance Analysis for FMCW Radar 论文原文:https://ieeexplore.ieee.org/document/10309162 Z. Xu, S. Qi and P. Zh…

webgoat-(A1)SQL Injection

SQL Injection (intro) SQL 命令主要分为三类&#xff1a; 数据操作语言 &#xff08;DML&#xff09;DML 语句可用于请求记录 &#xff08;SELECT&#xff09;、添加记录 &#xff08;INSERT&#xff09;、删除记录 &#xff08;DELETE&#xff09; 和修改现有记录 &#xff…

springboot本地启动多个模块报错:Address already in use: JVM_Bind

目录 背景解决方法 背景 环境&#xff1a; jdk1.8 idea 2019.2.4idea本地启动多个模块联调时&#xff0c;提示报错&#xff1a; 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 9090; nested exception is: java.net.BindException: Addre…

SpringBoot系列之集成Redission入门与实践教程

Redisson是一款基于java开发的开源项目&#xff0c;提供了很多企业级实践&#xff0c;比如分布式锁、消息队列、异步执行等功能。本文基于Springboot2版本集成redisson-spring-boot-starter实现redisson的基本应用 软件环境&#xff1a; JDK 1.8 SpringBoot 2.2.1 Maven 3.2…

【算法-链表2】反转链表 和 两两交换链表节点

今天&#xff0c;带来链表相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 反转链表 1. 思路 链表操作的本质是修改连接关系&#xff0c;本题我们需要反转链表&#xff0c;也就是每次都让当前节点的next指向自己的上一个。而题目给的是单链表&#xf…

【React-Native开发3D应用】React Native加载GLB格式3D模型并打包至Android手机端

【React-Native开发3D应用】React Native加载GLB格式3D模型并打包至Android手机端 【加载3D模型】**React Native上如何加载glb格式的模型**第零步&#xff0c;选择相关模型第一步&#xff0c;导入相关模型加载库第二步&#xff0c;自定义GLB模型加载钩子第三步&#xff0c;借助…

Modbus通讯模拟仿真环境的搭建

文章目录 一、概要二、所需工具介绍三、搭建虚拟仿真环境1.Modbus RTU虚拟仿真环境搭建1.1.虚拟串口工具&#xff08;VSPD&#xff09;使用1.2.虚拟从站工具&#xff08;ModSim32&#xff09;使用1.3.虚拟主站工具&#xff08;Modscan32&#xff09;使用1.4.更改虚拟从站工具&a…

【算法】第二代遗传算法NSGA-II优化SVR超参数模型

NSGA-II介绍 NSGA-II&#xff08;Non-dominated Sorting Genetic Algorithm II&#xff09;是一种多目标优化算法&#xff0c;用于解决具有多个冲突目标的优化问题。它通过模拟进化过程中的自然选择和遗传操作&#xff0c;逐步改进种群中的解&#xff0c;以找到一组尽可能好的解…

Halcon的 Filter (过滤)目录之add_Image算子

Halcon两个图像相加可以应用在图像融合的场景中。通过将两幅图像的亮度信息相加&#xff0c;可以生成一幅新的图像&#xff0c;使得图像的细节更加清晰&#xff0c;提高目标检测和识别的准确率。例如&#xff0c;在红外图像和可见光图像融合中&#xff0c;加法运算可以将两幅图…