泷羽sec---shell作业

ops/2024/11/30 1:08:30/

作业一 写计算器

使用bc命令

需要进行安装bc

代码如下:

#!/bin/bash
echo "-----------------------------------"
echo "输入  f  退出"
echo "可计算小数和整数"
echo "用法如:1.1+2.2"
echo "-----------------------------------"
while true; doread -p "请输入需要计算的表达式: " expressionif [ "$expression" == "f" ]; thenbreakfiresult=$(echo "$expression" | bc)echo "您输入的值是: $result"
done

在这里插入图片描述

使用(())

#!/bin/bash
echo "---------------------------------"
echo "输入  f   退出"
echo "运算符前后请以空格隔开"
echo "用法如:1 + 2"
echo "---------------------------------"
while true
doread -p "请输入需要计算的表达式: " expressionif [ "$expression" == "f" ]; thenbreakfiresult=$(($expression))echo "您输入的值是: $result"done

在这里插入图片描述

或者这里还可以使用case对接收的运算符进行判断,然后在每个分支进行对应的操作即可

作业二 阶乘

#/bin/bash
echo "-------------------------------"
echo "输入   f   退出"
echo "计算阶乘"
echo "-------------------------------"summerize(){result=$(($1 * result))
}
while true
doread -p "请输入一个数字: " numif [ "$num" == "f" ];thenbreakfiif [ "$num" == "0" ];thenecho "阶乘为0"breakfiresult=1for ((;num>0;num--))dosummerize numdoneecho "阶乘为: $result"
done

在这里插入图片描述

扩展一 获取eth0网卡IP

使用grep

#!/bin/bashfor i in $(seq 0 10)
doresult=$(ip addr show eth$i 2>/dev/null | grep -Eo "inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}"|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}")if [ -n "$result" ];thenecho "eth$i的IP是:$result"fi
done

ip addr show eth0表示只显示网卡eth0的信息

grep中的用法很多

  1. -A 2 "eth0" 表示显示包括eth0所在行的后面2行
  2. -E使用正则表达式
  3. -o表示只显示匹配到的

正则表达式中很多

  1. ^a 表示以a开头的

  2. .* 贪婪匹配,就是匹配任何东西

  3. q$ 表示以q结尾

    grep -Eo "^a.*q$" 表示只显示以a开头,以q结尾的字段

  4. [1-9] 表示数字1-9的任意一个

  5. {1,3} 表示匹配范围,长度

    [1-9]{1,3} 表示匹配1-9中的任意一个数字,数字范围在1-3

在这里插入图片描述

使用awk

#!/bin/bash
for i in $(seq 0 10)
doresult=$(ip addr show eth$i 2>/dev/null | awk '$1 == "inet" && $2 !~ /:/  {print $2}')if [ -n "$result" ];thenecho "eth$i的IP是:$result"fi
done
  1. /inet / 这是匹配模式,当字段中有inet加空格时,定位到这里
  2. {print $2} 表示定位到inet这一行地方时,输出第二个字符,空格隔开为字符终止
  3. 所以这里的$1是inet,$2是inet后面的一段字符
  4. $1 == "inet"这个条件用于匹配输出中每行的第一个字段等于inet的情况
  5. !~不匹配
  6. $2!~ /:/这里是判断每行的第二个字段(也就是我们实际要获取的 IPv4 地址部分)不匹配包含:的正则表达式,以此来排除 IPv6 地址。
  7. -F'/' 表示分割,这里是以/进行分割字符,如果有的话。
    若是多分割,可以采用数组形式-F'[,/]'

在这里插入图片描述

扩展二 设置定时任务

使用crontab

crontab -e进入定时任务的编写

在其中的下面已经给出提示,时间顺序是分钟(m) 、小时(h)、天(dom)、月(m)、星期(dow)、命令(command)

crontab -l查看当前定时任务

这里是把网卡ethn系列的IP信息输出到文本中

在这里插入图片描述

使用at

at命令一般可能没安装,需要先进行安装

at命令比较灵活,可以使用now + 2 minutes -f [脚本]表示现在开始两分钟后执行脚本,还可以设置

at 12:00 tommory表示明天12点执行

at 8am+3 days表示三天后的早上8点执行

等等

还可以与EOF联合使用,EOF算是标识符,可以使得命令不止一行,甚至可以在里面执行多条命令,开头EOF,结尾EOF中间就是前面命令执行的,所以好用,推荐

在这里插入图片描述

扩展三 无限重启

首先了解重启的命令,在linux系统中,两个命令可以重启计算机

  1. reboot
  2. init 6

知道重启命令后,就可以直接在一个脚本中编写,使得重启

在这里插入图片描述

其次,需要知道自启动目录在哪,或者文件在哪

可以试想一下,平常在启动某项服务的时候,使用的systemctl命令,以及这个命令可以实现服务的开机启动。不过就是需要高权限才能使用该命令。

那么该命令是通过哪些文件来让这些服务启动的呢

/etc/systemd/system/目录,这个目录是系统服务单元文件的存放位置。所以可以在这个文件中编写。

可以查看这个目录下的文件

在这里插入图片描述

基本上是以.service为结尾,这是一种服务,查看文件

在这里插入图片描述

以下面简单的框架描述

[Unit]
Description=IP Script Service
After=network.target[Service]
ExecStart=/bin/bash /home/kali/test/ip.sh
Type=oneshot[Install]
WantedBy=multi - user.target

[Unit]部分

  • Description:这是对服务的一个简单描述,用于在查看服务信息时能够识别服务的用途。
  • After:指定在哪个系统目标(target)之后启动这个服务。在这里,network.target表示在网络相关的服务启动之后再启动这个服务,因为你的脚本可能依赖于网络连接(例如获取 IP 地址相关的操作)。

[Service]部分

  • ExecStart:定义了服务启动时要执行的命令,这里是执行/bin/bash /home/kali/test/ip.sh脚本。
  • Typeoneshot表示这个服务只执行一次,执行完后就结束。这适用于像脚本这种只需要运行一次的情况,而不是像守护进程那样一直运行。

[Install]部分

  • WantedBy:指定这个服务应该被哪个系统目标所依赖。multi - user.target是一个常见的目标,它表示在多用户模式下启动这个服务。

/etc/systemd/system目录下创建一个re.service文件,并编写内容

[Unit]
Description=reboot[Service]
ExecStart=/bin/bash /home/kali/test/re.sh
Type=oneshot[Install]
WantedBy=multi-user.target

然后使用systemctl enable [服务名]来使得服务开机自启动

在这里插入图片描述

这时候输入systemctl start re.service会直接进行重启

这时候计算机到这个界面就会重启,根本到不了登录界面

在这里插入图片描述


http://www.ppmy.cn/ops/137789.html

相关文章

重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!

模型简介 Video-Retalking 模型是一种基于深度学习的视频再谈话技术,它通过分析视频中的音频和图像信息,实现视频角色口型、表情乃至肢体动作的精准控制与合成。这一技术的实现依赖于强大的技术架构和核心算法,特别是生成对抗网络&#xff0…

【二分查找】力扣 2529. 正整数和负整数的最大计数

一、题目 二、思路 基本的二分查找模板是进行查找大于等于 target 值的第一个位置。统计负数个数转换为:查找 0 的位置。统计正数个数转换为:数组总个数 - 查找 1 的位置。 三、题解 class Solution {public int maximumCount(int[] nums) {int n nu…

简单线性DP

数字三角形--简单线性DP 题目链接:数字三角形 解题代码: import java.io.BufferedReader; import java.io.InputStreamReader;public class Main {static int N510;static int INF (int) -1e9;static String[] q;static int[][]fnew int[N][N];static …

Flink 安装与入门:开启流式计算新时代

在当今大数据蓬勃发展的时代,数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式,在面对诸如网站实时监控、异常日志即时分析等场景时,显得力不从心。随着 5G、物联网等技术的兴起,海量数据如潮水般涌来,且…

windows部署基于Composio的skekit应用问题解决记录

背景 最近在探索新方向的时候,发现一个项目:Composio, 它是为AI Agent准备的生产完备的工具集,可以和一些主流的agent框架进行结合,让agent具备更加强大的能力。按之前的视角来划分,应该属于应用层的。看了下项目的介绍,感觉还是蛮有意思的,准备使用其skekit(SWE Devel…

Spring Events 最新详解(spring4.2前后变化)

事件驱动设计模式,也可能通过Spring来实现。 围绕事件的三个角色: 事件(Event)事件发布者(Publisher)事件监听者(Listener) 文章内容: Spring Event.jpg 1. Demo-01:…

LeetCode 力扣 热题 100道(十)回文链表(C++)

回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 回文序列;回文 序列是向前和向后读都相同的序列。 /*** Definition for singly-linked list.* struct…

国产FPGA+DSP 双FMC 6U VPX处理板

高性能国产化信号处理平台采用6U VPX架构,双FMC接口国产V7 FPGA 国产多核 DSP 的硬件架构,可以完成一体化电子系统、有源相控阵雷达、电子侦察、MIMO 通信、声呐等领域的高速实时信号处理。 信号处理平台的组成框图如图 1 所示, DSP处理器采…