shell脚本(fifteen day)

一、shell概述

1、shell概念

(1)shell 英文翻译过来是外壳的意思,作为计算机语言来理解可以认为它是操作系统的外壳。可以通过shell 命令来操作和控制操作系统,比如Linux中的shell命令就包括 ls、cd、pwd 等等。
(2)shell 在内核的基础上编写的一个应用程序,它连接了用户和 Linux 内核,从而让用户能够更加便捷、高效、安全的使用 linux 内核,这其实就是 shell 的本质。
(3)使用专业术语的说法来解释,Shell 其实是一个命令解释器,它通过接受用户输入的 Shell 命令来启动、暂停、停止程序的运行或对计算机进行控制。

2、shell脚本

shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员进行设置或者管理。

3、shell脚本编写注意事项

(1)shell命名: shel脚本名称命名一般为英文、大写、小写、后缀以.sh结尾
(2)不能使用特殊符号、空格**
(3)名称要写的一眼可以看出功能,也就是顾名思义
(4)shell脚本首行需要#!/bin/bash开头
(5)shell脚本变量不能以数字、特殊符号开头,可以使用下划线,但不能用破折号

4、编写shell脚本

(1)hello world 脚本

vim hello.sh    #编辑脚本
#!bin/bash

echo "hello world"
ls -lh /etc/

bash hello.sh

运行脚本的命令有以下五条:

bash hello.sh
sh hello.sh
source hello.sh     #在当前进程里面执行
chmod +x hello.sh
./hello.sh

(2)nginx安装脚本

[root@shell ~]# vim nginx.sh

#!/bin/bash
yum -y install gcc gcc-c++ make pcre-devel openssl-devel wget
cd /usr/local/src/
wget 'https://nginx.org/download/nginx-1.26.1.tar.gz'
tar -xf nginx-1.26.1.tar.gz
cd nginx-1.26.1
./configure --prefix=/usr/local/nginx
make -j 4
make install

[root@shell ~]# sh nginx.sh

#逻辑顺序:先安装依赖关系,再进入到系统默认的安装包目录src,使用wget命令从网上下载nginx1.26.1版本的安装包,然后解压,再移动到 nginx 安装月录,执行编译安装(预配置

6、变量

(1)自定义变量

由用户自己定义、使用和修改。

[root@shell ~]# a=1314
[root@shell ~]# b=520
[root@shell ~]# echo $a $b
1314 520
[root@shell ~]# echo $a$b
1314520

(2)环境变量

由系统维护,用于设置工作环境
$PWD
$SHELL
$USER

$PATH

[root@shell ~]# env  #查看所有的环境变量
[root@shell ~]# echo $PWD
/root
[root@shell ~]# echo $SHELL
/bin/bash
[root@shell ~]# echo $USER
root
[root@shell ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

(3)位置变量

通过命令行给脚本程序传递参数(也属于预定义变量)为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数Bash引入了位置变量的概念位置变量有0,n,n为1~9之间的数字
$0:第一个字段表示命令名或脚本名称
$1:脚本要处理的第一个参数

$2:脚本要处理的第二个参数

shell脚本最多可以执行九个参数

[root@shell ~]# vim createacc

#!/bin/bash
useradd $1
echo $2|passwd --stdin $1

[root@shell ~]# bash createacc zzz zzzz
更改用户 zzz 的密码 。
passwd:所有的身份验证令牌已经成功更新。

(4)预定义变量 

Bash中内置的一类变量,不能直接修改

预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。害光。将所有参数作为整体
      $@:单个参数的组合,每个参数占一行
      $0:保存了脚本名称
      $?:保存命令或脚本的执行状态码
      $#:保存脚本要处理的参数的个数

[root@shell ~]# vim sh001.sh

#!/bin/bash
#将所有的脚本参数输出到终端
for x in "$*"
do
     echo $x
done

[root@shell ~]# bash sh001.sh 1 3 5 a b c
1 3 5 a b c

[root@shell ~]# vim sh001.sh

#!/bin/bash
#将所有的脚本参数输出到终端
for x in "$*"
do
     echo $x
done

echo $?
echo $#
echo $0

[root@shell ~]# bash sh001.sh 1 3 5 a b c
1 3 5 a b c
0
6
sh001.sh

二、判断语法

(一)条件判断

shell返回值:运行一条命令,都会有一个返回值。0代表执行正常,非0代表命令执行异常

(二)if条件语句

1、if单分支语句

if 条件判断 ; then
         条件成 的命令 ( 可以有多个命令,命令执行方式为逐行执行要么全执行,要么全不执行 )
fi

2、if多分支语句

if 条件 1; then
# 命令,条件 1
elif 条件 2;then
# 命令,条件 1 不成 ,条件 2
elif 条件 3;then
# 命令,条件 1 不成 ,条件 2 不成 ,条件 3
else
# 命令 ,以上条件都不成
fi

(1)数字判断格式

-eq equal ,等于,一般用于 [ $? -eq 0 ] ,也就是判断上条命令返回值等于 0 ,直接数字 -eq
字也可以 equals
-ne not equal ,不等于,一般用于 [ $? -ne 0 ] ,判断上条命令返回值不等于 0
-gt greater than ,大于
-ge greater or equal ,大于或等于
-lt less than ,小于
-le less or equal ,小于或等于

eg:数字判断脚本

[root@shell ~]# vim if.sh

#!/bin/bash
echo "请输入第一个数字"
read a
echo "请输入第二个数字"
read  b
if [ $a -eq $b ]; then
      echo "两个数字相等"
else
      echo "两个数字不想等"
fi

[root@shell ~]# sh if.sh 
请输入第一个数字
2
请输入第二个数字
4
两个数字不想等

eg:测试网络是否畅通的脚本

[root@shell ~]# vim ping.sh

#!/bin/bash
read -p "请输入要测试的网址:" web

# read:命令行内输入web的变量值
ping -c 3 $web &> /dev/null
# ping -c 3,连接某个网站三次
if [ $? -eq 0 ];then
# 如果ping命令执行成功,那么
        echo "此时网络畅通!"   
# 输出“此时网络畅通”
else
# 否则
        echo "无法访问,请检查网址是否输入正确或检查相关的网络配置!"           
# 输出“无法访问...”
fi
# if语句的结尾

[root@shell ~]# bash ping.sh
请输入要测试的网址:www.baidu.com
此时网络畅通!

(三)字符串判断

(1)格式:

[ 字符串 1 == 字符串 2 ] 字符串内容相同
[ 字符串 1 != 字符串 2 ] 字符串内容不同
[ -z 字符串 ]              字符串内容为空
[ -n 字符串 ]              字符串内容不为空
eg:

[root@shell ~]# aaa="abc"
[root@shell ~]# echo $aaa
abc
[root@shell ~]# test $aaa == "abc"
[root@shell ~]# echo $?
0
[root@shell ~]# test $aaa == "aaaa"
[root@shell ~]# echo $?
1
[root@shell ~]# test $aaa == "aaa"
[root@shell ~]# echo $?
1

eg:简单的字符串判断脚本

[root@shell ~]# vim zifu.sh

#!/bin/bash
read -p "请输入账号:" user
if [ $user == admin  ]  ; then
    echo "欢迎登陆:$user"
else
    echo "账号或密码错误!"
fi

[root@shell ~]# sh zifu.sh
请输入账号:admin
欢迎登陆:admin

[root@shell ~]# sh zifu.sh
请输入账号:aaa
账号或密码错误!

eg:测试nginx安装脚本

[root@shell ~]# vim nginxinstall.sh

#!/bin/bash
rpm -qa | grep nginx

if [ $? -eq 1 ] ; then
     yum -y install nginx
else
     yum -y remove nginx
     yum -y install nginx
fi

[root@shell ~]# bash nginxinstall.sh 

(四)与或判断

判断多个条件
多个条件其中一个成立,或
多个条件都要成立,与
或运算判断: ||       或,两个条件满足其一即可,还有-o
与运算判断: && 与,两个条件都得满足才行,还有 -a

多项选择

(1)或运算判断

[root@localhost test] # vim huo.sh
#!/bin/bash
read -p "请输⼊字符串:" name
if [ "$name" == "haha" ]||[ "$name" == "hehe" ];then # 这两个条件需满足其
一,也可使⽤[ "$name" =="haha" -o "$name" == "hehe" ]
echo "$name is my want"
else
echo "in else"
fi
[root@localhost test] # sh ./huo.sh
请输⼊字符串:haha
haha is my want
[root@localhost test] # sh ./huo.sh
请输⼊字符串:hehe
hehe is my want
[root@localhost test] # sh ./huo.sh
请输⼊字符串:lala
in else

(2)与运算判断

[root@localhost test] # vim yu.sh
#!/bin/bash
read -p "请输⼊⼀个数值:" age
if [ $age -gt 30 ]&&[ $age -lt 80 ];then # 这两个条件都得满足,大于30且小于
80,可使用[ $age -gt 30 -a $age -lt 80 ]
echo "age>30 and age<80"
echo "working"
else
echo "in else"
fi
[root@localhost test] # sh ./yu.sh
请输⼊⼀个数值:60
age>30 and age<80
workin g
[root@localhost test] # sh ./yu.sh
请输⼊⼀个数值:90
in else

(3)混合判断

[root@shell ~]# vim menu.sh

#!/bin/bash

echo "1:新增文件 2:删除文件 3:查找文件 4:修改文件"
read -p "请输入序号选择功能:" m
if [ $m == 1  ] ; then
    touch aaaaa.txt
elif [ $m == 2 ]; then
    rm -rf aaaaa.txt
else
     echo "其他功能正在开发"
fi

[root@shell ~]# sh menu.sh 
1:新增文件 2:删除文件 3:查找文件 4:修改文件
请输入序号选择功能:1

[root@shell ~]# ls
aaaaa.txt        createacc  if.sh    nginxinstall.sh  ping.sh   test001.sh
anaconda-ks.cfg  hello.sh   menu.sh  nginx.sh         sh001.sh  zifu.sh

[root@shell ~]# sh menu.sh 
1:新增文件 2:删除文件 3:查找文件 4:修改文件
请输入序号选择功能:2

[root@shell ~]# ls
anaconda-ks.cfg  hello.sh  menu.sh          nginx.sh  sh001.sh    zifu.sh
createacc        if.sh     nginxinstall.sh  ping.sh   test001.sh

三、shell脚本循环语法

[root@shell ~]# yum -y install inotify    #监听指定目录是否有修改

(一)for循环

1、作用

■ 读取不同的变量值,以逐个执行同一组命令

2、结构

for 变量名 in 取值列表(范围)

do

命令序列

■ 取值列表:数字范围、字符串、多个字符串、提前设定好的变量等

■ for默认以所有的空白字符进行分隔:tab、空格、回车,去循环处理

■ 分隔成几段就循环几次

[root@shell ~]# vim wait.sh

#!/bin/bash

yum -y install epel-release

yum -y install inotify-tools

inotifywait mrg $l while read events

do
      echo"文件发生修改"
done

[root@shell~]# bash wait.sh 

分隔值循环

[root@shell ~]# vim city.sh

#!/bin/bash  
for city in 青岛 庆阳  
do  
    echo "$city 是个好地方"  
done

[root@git ~]# bash city.sh 
青岛是个好地方
庆阳是个好地方

(二)while循环

1 、作用
重复测试某个条件,只要条件成立则反复执行
2 、结构
while 条件测试操作
do
           命令序列
done
3 while for 区别
(1)while 循环也有条件判断,当条件成立的时候,会循环执行。当条件不成立退出
(2)if判断当条件成立时,会执行一次,然后退出。当条件不成立时直接退出
批量删除⽤户脚本
[root@localhost test] # vim userdel.sh 
#!/bin/bash
read -p "请输⼊要删除⽤户的前缀:" QZ
read -p "请输⼊要删除⽤户的个数:" NUM
i=1
while [ $i -le $NUM ]
do
userdel -r $QZ$i
let i++
done
[root@localhost test] # bash userdel.sh
请输 要删除 户的前缀 :admin
请输 要删除 户的个数 :5

九九乘法表脚本

[root@shell ~]# vim 99.sh

#!/bin/bash
for i in {1..9};do
     for j in {1..9};do
        echo -n "$j*$i=$(($i*$j)) "
           if [ $j == $i ];then
              echo -e '\n'
              break
           fi
     done
done

[root@shell ~]# bash 99.sh 
1*1=1 

1*2=2 2*2=4 

1*3=3 2*3=6 3*3=9 

1*4=4 2*4=8 3*4=12 4*4=16 

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

四、sed流式编辑器

(一)概述

sed 是文本处理工具,读取文本内容,根据指定条件进行处理,可实现增删改查的功能。sed 依赖于正则表达式。

1、格式

sed ' 过滤 + 动作 ' 文件路径

2、选项

-e
指定要执行的命令 ( 操作 ) ,只有一个编辑命令 ( 操作 ) 时可省略
-n
只输出处理后的行,读入时不显示,不对原文件进行修改
-i
直接修改源文件,不输出结果

3、操作

p打印(输出)
d删除(整行)
s替换(字符串匹配)
c替换(整行)
r
读取指定文件(追加到行后)
a
append )追加到指定内容到行后
i
insert )追加指定内容到行前
w
另存为
n
表示读入下一行内容
H
复制到剪贴板
g
将剪贴板中的内容覆盖到指定行
G
将剪贴板中的内容追加到指定行后

(二)sed命令引用变量

1. sed 命令使用单引号的情况下,可以使用 '"$var"' 引用(单引号,然后 双引号,变量):
sed -i '2s/node_base/'" $i "'/' /etc/libvirt/qemu/ $i .xml
2. sed 命令中使用双引号的情况下,直接 shell command 或者 $(shell  command) 引用命令执行。
sed -i "2s/node_base/ $i /" /etc/libvirt/qemu/ $i .xml

 练习

1.配置一个自动设置静态ip以及关闭selinux服务 关闭防火墙服务 关闭NetWOrkManager,修改主机名称的 脚本,ip和主机名称使用read输入

[root@shell ~]# vim open.sh

#!/bin/bash  
#备份
cp /etc/sysconfig/network-scripts/ifcfg-ens160 /etc/sysconfig/network-scripts/ifcfg-ens160.bak

# 读取用户输入的IP地址和主机名称  
read -p "请输入要设置的静态IP地址: " STATIC_IP
read -p "请输入新的主机名称: " HOSTNAME

#替换DHCP为none
sed -i '/dhcp/s/dhcp/none/g'  /etc/sysconfig/network-scripts/ifcfg-ens160
#在文档最后添加五行
sed -i '$aIPADDR=STATIC_IP' /etc/sysconfig/network-scripts/ifcfg-ens160

sed -i '$aNETMASK=255.255.255.0' /etc/sysconfig/network-scripts/ifcfg-ens160

sed -i '$aGETWAY=192.168.1.254' /etc/sysconfig/network-scripts/ifcfg-ens160

sed -i '$aDNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens160

sed -i '$aDNS2=114.114.114.114' /etc/sysconfig/network-scripts/ifcfg-ens160

sed -i 'UUID/cUUID='"uuidgen"'' /etc/sysconfig/network-scripts/ifcfg-ens160

# 关闭SELinux  
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 关闭防火墙服务  
systemctl stop firewalld
systemctl disable firewalld

# 关闭NetworkManager服务  
systemctl stop NetworkManager
systemctl disable NetworkManager

# 修改主机名称  
hostnamectl set-hostname $HOSTNAME  

# 重启网络服务  
systemctl restart network

echo "静态IP已设置为 $STATIC_IP,主机名称已设置为 $HOSTNAME。" 

[root@shell ~]# bash open.sh
请输入要设置的静态IP地址: 192.168.1.12
请输入新的主机名称: sss
sed:-e 表达式 #1,字符 1:未知的命令:“U”
setenforce: SELinux is disabled
Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.
静态IP已设置为 192.168.1.12,主机名称已设置为 sss。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

postgres启动错误

说明&#xff1a;记录一次在Linux上启动postgres数据错误&#xff1b; 问题&#xff1a;安装好postgres数据库后&#xff0c;我使用systemctl启动数据库&#xff0c;报下面的错误 ● postgresql-15.service - PostgreSQL 15 database serverLoaded: loaded (/usr/lib/systemd…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中&#xff0c;英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力&#xff0c;是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析&#xff0c;帮助你在保研面试…

使用PyTorch导出JIT模型:C++ API与libtorch实战

PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1&#xff1a;导出模型 首先我们进行第一步&#xff0c;用 Python API 来导出模型&#xff0c;由于本文的重点是在后面的部署…

Java-----栈

目录 1.栈&#xff08;Stack&#xff09; 1.1概念 1.2栈的使用 1.3栈的模拟实现 1.4栈的应用场景 1.5栈、虚拟机栈、栈帧有什么区别呢 1.栈&#xff08;Stack&#xff09; 1.1概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操…

Java基础入门14:常用API(Object(s)类、包装类、Math、Arrays、日期时间、Lambda表达式、方法引用)

Object类 Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有类的对象都可以直接使用Object类中提供的一些方法。 Object类的常见方法&#xff1a; package com.itchinajie.d12_api_object;public class Test {public static void main(String[] args) {…

mybatis-plus默认字段填充以及批量数据插入优化

日常开发中&#xff0c;我们需要设置一些数据库的默认字段填充&#xff0c;比如创建时间、创建人、更新时间、更新人等等&#xff0c;那么mybatis-plus给我们提供了一个这样的接口去做这件事情 MetaObjectHandler。 1、首先可以创建一个实现类来实现MetaObjectHandler接口 C…

DBMotion x Chat2DB:高效迁移,优雅同步,数据腾飞不再愁

DBMotion 基本介绍 数据传输服务DBMotion是一款轻量、绿色的数据库迁移、同步、校验工具。支持国产化数据迁移、支持容灾演练、支持两地三中心和异地多活&#xff1b;源库无感知、简单易集成、丝滑高性能。助您在多云之间随心迁移、自由容灾。 功能介绍 已支持的数据库 v1.…

7月22日JavaSE学习笔记

Collection接口&#xff0c;还有一个父级接口Iterable可迭代的 Collection继承树 Set 集合 Set的底层是用Map实现&#xff08;存储在key中&#xff0c;value中是空的Object对象&#xff09; 有序&#xff1a;取出的顺序和添加的顺序是一样的。 List是有序的&#xff0c;Set是…

“软件质量”,构筑企业值得信赖的护城河

引子 质量是产品的生命线&#xff0c;质量问题不仅会导致企业财产损失&#xff0c;还可能引发业务中断、客户满意度下降、企业品牌声誉受损等负面影响。如何在软件开发过程中全方位构建产品质量防护盾&#xff0c;是各行业保障产品高质量的重要课题。 如何保障软件质量&#…

五、SpringIoC/DI的使用

1. 类注解、方法注解 告诉spring管理bean—>bean的存储 1、类注解&#xff1a;五大注解 Controller&#xff08;控制器存储&#xff09;、 Service&#xff08;服务存储&#xff09;、 Repository&#xff08;仓库存储&#xff09;、 Component&#xff08;组件存储&#xf…

【Linux】管道通信和 system V 通信

文章目录 一、进程通信原理&#xff08;让不同进程看到同一份资源&#xff09;二、管道通信2.1 管道原理及其特点2.1 匿名管道和命名管道 三、共享内存通信3.1 共享内存原理3.2 创建和关联共享内存3.3 去关联、ipc 指令和删除共享内存 四、消息队列和信号量&#xff08;了解&am…

VirtualSurveyor9.0.3 无人机测绘软件功能介绍

Virtual Surveyor9.0.3中文版是功能强大的无人机测绘软件&#xff0c;使用旨在为用户提供完整的地理空间数据可视化和分析功能&#xff0c;带来提高的生产力&#xff0c;功能全面而强大&#xff0c;在无人机到CAD模型的过程中&#xff0c;使用Virtual Surveyor软件来拆卸输送机…

情绪稳定的人有什么特点?

第一部分&#xff1a;至纯之人&#xff0c;大器晚成 1.1 单纯&#xff0c;不是天真 你知道吗&#xff1f;那些能够成就大事的人&#xff0c;往往在人性上非常单纯。他们对外界的需求很低&#xff0c;更多的是向内寻求。这样的人&#xff0c;他们的内心世界像一片净土&#xff…

数据结构与算法--顺序表(Java)

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约 ⏩收录专栏⏪&#xff1a;Java SE &#x1f921;往期回顾&#x1f921;&#xff1a;Java SE--基本数据类型&#xff08;详细讲解&#xff09; &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 什么…

每日任务:TCP/IP模型和OSI模型的区别

介绍一下TCP/IP模型和OSI模型的区别&#xff1f; OSI模型由国标准化组织提出&#xff0c;而TCP/IP模型是由美国国防部开发的&#xff1b; OSI模型由七个层次组成&#xff0c;从下到上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP模型只有四层…

AI视频生成(即梦)

1.打开即梦网页版 https://jimeng.jianying.com/ai-tool/home 2.图片生成-导入参考图&#xff08;这里原本的红色或者灰度图都是可以的&#xff09;-精细度5&#xff08;最高图质量越高&#xff09; 注&#xff1a;根据需要&#xff0c;选择不同的生图模型&#xff0c;具有…

线上监控诊断 - Arthas

简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并且能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;…

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中&#xff0c;Fragments 是一种轻量级的 UI 组件&#xff0c;类似于视图&#xff08;Views&#xff09;&#xff0c;但它们没有自己的控制器&#xff08;Controller&#xff09;。Fragments 通常用于定义可以在多个视图中重用的 UI 片段&#xff0c;从而提…

项目实战1(30小时精通C++和外挂实战)

项目实战1&#xff08;30小时精通C和外挂实战&#xff09; 01-MFC1-图标02-MFC2-按钮、调试、打开网页05-MFC5-checkbox及按钮绑定对象06--文件格式、OD序列号08-暴力破解09-CE10-秒杀僵尸 01-MFC1-图标 这个外挂只针对植物大战僵尸游戏 开发这个外挂&#xff0c;首先要将界面…

FPGA:流水灯设计

本次基于FPGA实现流水灯&#xff0c;即让LED[0:7]从左到右依次电量&#xff0c;每个LED灯频闪周期为1s钟&#xff0c;在这里&#xff0c;给出下面三种实现思路&#xff1a; 1、实验思路 1、使用位运算符 在复位时令LED灯为LED8’b0000_0001&#xff0c;然后每过一秒钟&#x…