Linux之Shell(一)
Linux之Shell
- Shell概述
- Linux提供的Shell解析器
- bash和sh的关系
- Centos默认的解析器是bash
- Shell脚本入门
- 脚本格式
- 第一个脚本
- 脚本常用的执行方式
- 变量
- 系统预定义变量
- 自定义变量
- 特殊变量
- $n
- $#
- \$*、\$@
- $?
- 运算符
- 条件判断
- 流程控制(▲)
- if判断
- case语句
- for循环
- while循环
- read读取控制台输入
Shell概述
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强
Linux提供的Shell解析器
[guozihan@hadoop100 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
bash和sh的关系
-rwxr-xr-x. 1 root root 964536 11月 25 2021 bash
lrwxrwxrwx. 1 root root 10 8月 25 20:20 bashbug -> bashbug-64
-rwxr-xr-x. 1 root root 6964 11月 25 2021 bashbug-64
lrwxrwxrwx. 1 root root 4 8月 25 20:20 sh -> bash
Centos默认的解析器是bash
[guozihan@hadoop100 bin]$ echo $SHELL
/bin/bash
Shell脚本入门
脚本格式
脚本以==#!/bin/bash== 开头(指定解析器)
第一个脚本
需求:创建一个 Shell 脚本,输出 helloworld
-
实例实操
首先我们先创建文件夹program,然后在文件夹里创建sh文件,vim编辑
[guozihan@hadoop100 桌面]$ mkdir program
[guozihan@hadoop100 桌面]$ cd program/
[guozihan@hadoop100 program]$ touch helloword.sh
[guozihan@hadoop100 program]$ vim helloword.sh
#!/bin/bash echo "helloworld"
脚本常用的执行方式
-
采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)
sh+脚本的相对路径
[guozihan@hadoop100 program]$ sh ./helloworld.sh
helloworldsh+脚本的绝对路径
[guozihan@hadoop100 program]$ sh /home/guozihan/桌面/program/helloworld.sh
helloworldbash+脚本的相对路径
[guozihan@hadoop100 program]$ bash ./helloworld.sh
helloworldbash+脚本的相对路径
[guozihan@hadoop100 program]$ bash /home/guozihan/桌面/program/helloworld.sh
helloworld -
采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
①首先要赋予 helloworld.sh 脚本的+x 权限
[guozihan@hadoop100 program]$ chmod +x helloworld.sh
②执行脚本
[guozihan@hadoop100 program]$ ./helloworld.sh
helloworld[guozihan@hadoop100 program]$ /home/guozihan/桌面/program/helloworld.sh
helloworld
注意:第一种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行 权限。第二种执行方法,本质是脚本需要自己
执行,所以需要执行权限。
-
在脚本的路径前加上“.”或者 source
①现有文件test.sh,内容如下
#!/bin/bash
A=5
echo $A
②分别使用 sh,bash,./ 和 . 的方式来执行,结果如下
[guozihan@hadoop100 program]$ bash test.sh
5[guozihan@hadoop100 program]$ sh test.sh
5[guozihan@hadoop100 program]$ chmod +x test.sh
[guozihan@hadoop100 program]$ ./test.sh
5[guozihan@hadoop100 program]$ . test.sh
5
原因:
前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则 子 shell 关闭,回到父 shell 中。
第三种,也就是使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前 shell 里执行,而无需打开子 shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需要 source 一下的原因。
开子 shell 与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell 中设置的当前变量,父 shell 是不可见
变量
系统预定义变量
-
常用系统变量
$HOME、$PWD、$SHELL、$USER 等
-
案例实操
查看系统变量的值
[guozihan@hadoop100 ~]$ echo $HOME
/home/guozihan显示当前 Shell 中所有变量:set
[guozihan@hadoop100 ~]$ set
自定义变量
-
基本语法
(1)定义变量:变量名=变量值,注意,=号前后不能有空格
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量,注意:不能 unset
-
变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
-
案例实操
定义变量 A
[guozihan@hadoop100 ~]$ A=5
[guozihan@hadoop100 ~]$ echo $A
5给变量 A 重新赋值
[guozihan@hadoop100 ~]$ A=8
[guozihan@hadoop100 ~]$ echo $A
8撤销变量 A
[guozihan@hadoop100 ~]$ unset A
[guozihan@hadoop100 ~]$ echo $A
声明静态的变量 B=2,不能 unset
[guozihan@hadoop100 ~]$ readonly B=2
[guozihan@hadoop100 ~]$ echo $B
2[guozihan@hadoop100 ~]$ B=9
-bash: B: 只读变量在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
[guozihan@hadoop100 ~]$ C=1+2
[guozihan@hadoop100 ~]$ echo $C
1+2变量的值如果有空格,需要使用双引号或单引号括起来
[guozihan@hadoop100 ~]$ D=I love sunchen
bash: love: 未找到命令…[guozihan@hadoop100 ~]$ D=“I love sunchen”
[guozihan@hadoop100 ~]$ echo $D
I love sunchen可把变量提升为全局环境变量,可供其他 Shell 程序使用
export 变量
在 helloworld.sh 文件中增加 echo $B
#!/bin/bash echo "helloworld" echo $B
[guozihan@hadoop100 program]$ ./helloworld.sh
helloworld[guozihan@hadoop100 program]$ export B
[guozihan@hadoop100 program]$ ./helloworld.sh
helloworld
2
特殊变量
$n
-
基本语法
$n 功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})
-
案例实操
[guozihan@hadoop100 program]$ touch parameter.sh
[guozihan@hadoop100 program]$ vim parameter.sh
#!/bin/bash echo '=$n=' echo $0 echo $1 echo $
[guozihan@hadoop100 program]$ chmod 777 parameter.sh
[guozihan@hadoop100 program]$ ./parameter.sh cls xz
=$n=
./parameter.sh
cls
xz
$#
-
基本语法
$# 功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性
-
实例实操
[guozihan@hadoop100 program]$ vim parameter.sh
#!/bin/bash echo '==========$n==========' echo $0 echo $1 echo $2 echo '==========$#==========' echo $
[guozihan@hadoop100 program]$ chmod 777 parameter.sh
[guozihan@hadoop100 program]$ ./parameter.sh cls xz
=$n=
./parameter.sh
cls
xz
=$n=
2
$*、$@
-
基本语法
$* 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
-
案例实操
[guozihan@hadoop100 program]$ vim parameter.sh
#!/bin/bash echo '==========$n==========' echo $0 echo $1 echo $2 echo '==========$#==========' echo $# echo '==========$*==========' echo $* echo '==========$@==========' echo $@
[guozihan@hadoop100 program]$ ./parameter.sh a b c d e f g
=$n=
./parameter.sh
a
b
=$n=
7
=$n=
a b c d e f g
=$n=
a b c d e f g
$?
-
基本语法
$? 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一 个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明 上一个命令执行不正确了
-
案例实操
判断 helloworld.sh 脚本是否正确执行
[guozihan@hadoop100 program]$ ./helloworld.sh
helloworld[guozihan@hadoop100 program]$ echo $?
0
运算符
-
基本语法
“$((运算式))” 或 “$[运算式]”
-
案例实操
计算(2+3)* 4 的值
[guozihan@hadoop100 program]$ S=$[(2+3)*4]
[guozihan@hadoop100 program]$ echo $S
20
条件判断
-
基本语法
(1)test condition
(2)[ condition ](注意 condition 前后要有空格)
注意:条件非空即为 true,[ guozihan ]返回 true,[ ] 返回 false。
-
常用判断条件
-
两个整数之间比较
-eq 等于(equal)
-ne 不等于(not equal)
-lt 小于(less than)
-le 小于等于(less equal)
-gt 大于(greater than)
-ge 大于等于(greater equal)
注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。
-
按照文件权限进行判断
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
-
按照文件类型进行判断
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)
-
-
案例实操
23 是否大于等于 22
[guozihan@hadoop100 program]$ [ 23 -ge 22 ]
[guozihan@hadoop100 program]$ echo $?
0helloworld.sh 是否具有写权限
[guozihan@hadoop100 program]$ [ -w helloworld.sh ]
[guozihan@hadoop100 program]$ echo $?
0
/home/atguigu/cls.txt 目录中的文件是否存在
[guozihan@hadoop100 program]$ [ -e /home/guozihan/cls.txt ]
[guozihan@hadoop100 program]$ echo $?
1多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一 条命令执行失败后,才执行下一条命令)
[guozihan@hadoop100 program]$ [ guozihan ] && echo OK || echo notOK
OK[guozihan@hadoop100 program]$ [ ] && echo OK || echo notOK
notOK
流程控制(▲)
if判断
-
基本语法
-
单分支
if [ 条件判断式 ];then程序 fi
或者
if [ 条件判断式 ] then 程序 fi
-
多分支
if [ 条件判断式 ] then程序 elif [ 条件判断式 ] then程序 else程序 fi
注意事项:
①[ 条件判断式 ],中括号和条件判断式之间必须有空格
②if 后要有空格
-
-
案例实操
输入一个数字,如果是 1,则输出 banzhang zhen shuai,如果是 2,则输出 cls zhen mei, 如果是其它,什么也不输出。
[guozihan@hadoop100 program]$ touch if.sh [guozihan@hadoop100 program]$ vim if.sh
#!/bin/bash if [ $1 -eq 1 ] then echo "banzhang zhen shuai" elif [ $1 -eq 2 ] then echo "cls zhen mei" fi
[guozihan@hadoop100 program]$ chmod 777 if.sh [guozihan@hadoop100 program]$ ./if.sh 1 banzhang zhen shuai [guozihan@hadoop100 program]$ ./if.sh 2 cls zhen mei
case语句
-
基本语法
case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;
“值 2”)
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
(3)最后的“*)”表示默认模式,相当于 java
-
案例实操
输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其它,输出 renyao。
[guozihan@hadoop100 program]$ touch case.sh [guozihan@hadoop100 program]$ vim case.sh
#!/bin/bash case $1 in "1") echo "banzhang" ;; "2") echo "cls" ;; *) echo "renyao" ;; esac
[guozihan@hadoop100 program]$ chmod 777 case.sh [guozihan@hadoop100 program]$ ./case.sh renyao [guozihan@hadoop100 program]$ ./case.sh 1 banzhang
for循环
-
基本语法1
for (( 初始值;循环控制条件;变量变化 )) do程序 done
-
案例实操1
从 1 加到 100
[guozihan@hadoop100 program]$ touch for1.sh [guozihan@hadoop100 program]$ vim for1.sh
#!/bin/bash sum=0 for((i=0;i<=100;i++)) do sum=$[$sum+$i] done echo $sum
[guozihan@hadoop100 program]$ chmod 777 for1.sh [guozihan@hadoop100 program]$ ./for1.sh 5050
-
基本语法2
for 变量 in 值 1 值 2 值 3… do 程序 done
-
案例实操2
打印所有输入参数
[guozihan@hadoop100 program]$ touch for2.sh [guozihan@hadoop100 program]$ vim for2.sh
#!/bin/bash #打印数字 for i in cls mly wls do echo "ban zhang love $i" done
[guozihan@hadoop100 program]$ chmod 777 for2.sh [guozihan@hadoop100 program]$ ./for2.sh ban zhang love cls ban zhang love mly ban zhang love wls
-
$*和$@的区别
$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n 的形式输出所有参数。
当它们被双引号“”包含时,$*会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输 出所有参数;$@会将各个参数分开,以“$1” “$2”…“$n”的形式输出所有参数。
while循环
-
基本语法
while [ 条件判断式 ] do 程序 done
-
案例实操
从 1 加到 100
[guozihan@hadoop100 program]$ touch while.sh [guozihan@hadoop100 program]$ vim while.sh
#!/bin/bash sum=0 i=1 while [ $i -le 100 ] do sum=$[$sum+$i] i=$[$i+1] done echo $sum
[guozihan@hadoop100 program]$ chmod 777 while.sh [guozihan@hadoop100 program]$ ./while.sh 5050
read读取控制台输入
-
基本语法
read (选项) (参数)
①选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
②参数
变量:指定读取值的变量名
-
案例实操
提示 7 秒内,读取控制台输入的名称
[guozihan@hadoop100 program]$ touch read.sh [guozihan@hadoop100 program]$ vim read.sh
#!/bin/bash read -t 7 -p "Enter your name in 7 seconds :" NN echo $NN
[guozihan@hadoop100 program]$ chmod 777 read.sh [guozihan@hadoop100 program]$ ./read.sh Enter your name in 7 senconds:guozihan guozihan
相关文章:

Linux之Shell(一)
Linux之Shell Shell概述Linux提供的Shell解析器bash和sh的关系Centos默认的解析器是bash Shell脚本入门脚本格式第一个脚本脚本常用的执行方式 变量系统预定义变量自定义变量特殊变量$n$#\$*、\$$? 运算符条件判断流程控制(▲)if判断case语句for循环while循环 read读取控制台输…...

解决拦截器抛出异常处理类的500状态码Html默认格式响应 !
解决方式 <mvc:annotation-driven><mvc:message-converters><!-- 配置JSON消息转换器 --><bean class"org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name"supportedMediaTypes"&…...

搭建PyTorch神经网络进行气温预测
import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline features pd.read_csv(temps.csv)#看看数据长什么样子 features.he…...

Qt Creato配置PCL库
Qt Creator中使用PCL库_业务不精er的博客-CSDN博客 Qt6.1.0中配置pcl1.11.1_qt6导入pcl库_朽一的博客-CSDN博客 VS2017 中配置QTPCL显示点云或3D图形_pcl显示3d图tiff_桂林巡山的博客-CSDN博客 Windows10下QTVTKPCL环境配置(一次成功)_qt pcl_v俊逸的…...

从阿里到字节跳动,这3年外包做完,我这人生算是彻底废了......
我为什么一直做外包呢,原因是薪资和技术方面。 在阿里做了一年外包,薪资5k,功能测试,接触Linux和网络,但是说实在的技术很难沉淀,就像雾里看花一样,过年之后,想走的人都走了&…...

在汽车行业中如何脱颖而出?使用聊天机器人是关键
汽车行业正在经历一场非凡的技术革命,尖端技术重塑了其本质。汽车中的聊天机器人能作为一种改变游戏规则的技术脱颖而出,推动企业与客户互动甚至吸引新客户的方式的进步。例如SaleSmartly(SS客服)就是一个很优秀的聊天机器人平台。…...

Go语言最全面试题,拿offer全靠它,附带免积分下载pdf
面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 文章目录 Go 基础类GO 语言当中 NEW 和 MAKE 有什么区别吗?PRINTF(),SPRINTF(),FPRINTF() 都是格式化输出,有什么不同?GO 语言当中数组和切片的区别是什么…...

虚拟机Linux20.04磁盘扩展
扩展之前必须要确保!没有快照! ps:先把快照删掉,如果担心弄坏的话可以先克隆一个 如果不删的话就会跟下面一样无法点击扩展: 删除了快照之后就可以点击这个【扩展】,输入你要的磁盘大小即可。 (我这里原…...

类欧几里得算法
求 ∑ i 0 n ⌊ a i b c ⌋ \sum\limits_{i0}^{n}\lfloor \frac{aib}{c} \rfloor i0∑n⌊caib⌋ 推式子步骤: 分类讨论 a 0 a0 a0 是个最简式子 b ≥ c b\ge c b≥c 或 a ≥ c a\ge c a≥c 由 f ( a m o d c , b m o d c , c , n ) f(a\bmod c,b\bmod…...

c++读取和存储文件,对文件操作
#include<bits/stdc.h> using namespace std; int aa[100];//全局变量数组,用来接收我们从文件中读取的数据。 void zhuanhua(string a){//这个函数的作用是转化我们读取的数字,由于我们读取文件时//是按行读取,就是一下读取一行&…...

InfluxDB API -- InfluxDB笔记四
1.调试工具的安装 ApiPost (类似Postman) 2.InfluxDB v2 API 地址 官方地址: InfluxDB v2 API | InfluxDB OSS 2.7 Documentation 本地文档地址:host1:8086/docs 3.token认证 在web UI 的Load Data -> API Tokens里面可以复制,这个页面也可以创…...

数据结构 - 单链表
文章目录 目录 文章目录 一、什么是链表? 线性表: 顺序表: 二、链表的分类和实现 分类: 实现: 1.创建节点类 2.创建单链表 1.addTail(尾增) 2.删除节点值为key的第一个节点 3.插入节点(在指定位置) 4.获取链表长度 总结 前言 大家好,这篇博客给大家讲一下什么是…...

化繁为简 面板式空调网关亮相上海智能家居展 智哪儿专访青岛中弘赵哲海
面对中央空调协议不开放和智能家居协议不统一的问题,青岛中弘选择中央空调控制器这一细分赛道入局智能家居市场,始终贯彻“所有空调,一个网关”的产品技术理念,逐渐探索出一条中弘的发展路径和商业模式。 在2023年的SSHT上海国际智…...

4G版本云音响设置教程阿里云平台版本
4G版本云音响设置教程介绍 第一章 介绍了在阿里云物联网平台生一个设备使用的三元素 第二章 转换阿里云三元素 为MQTT参数,并下载到设备中 第三章 阿里云物联网套件协议使用说明,如何发送数据至设备并播放 本文目录引导 目录 4G版本云音响设置教程介…...

STM32纯中断方式发送接收数据(串行通信;keil arm5;)
除了main文件其他文件均无修改,正常运行--在keil arm5内...

FPGA时序分析与约束(3)——时钟不确定性
一、前言 在之前的文章中,我们介绍了组合电路的时序和时序电路的时序问题,在阅读本文章之前,强烈推荐先阅读完本系列之前的文章,因为这是我们继续学习的理论的理论基础,前文链接: FPGA时序分析与约束&…...

【Java-HDFS】使用Java操作HDFS获取HDFS指定目录下的数据量大小
Maven依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId>…...

协议定制 + Json序列化反序列化
文章目录 协议定制 Json序列化反序列化1. 再谈 "协议"1.1 结构化数据1.2 序列化和反序列化 2. 网络版计算器2.1 服务端2.2 协议定制(1) 网络发送和读取的正确理解(2) 协议定制的问题 2.3 客户端2.4 代码 3. Json实现序列化反序列化3.1 简单介绍3.2 使用 协议定制 J…...

系统架构设计师(第二版)学习笔记----系统架构概述
【原文链接】系统架构设计师(第二版)学习笔记----系统架构概述 文章目录 一、系统架构的定义与发展历程1.1 架构的定义1.2 架构设计的作用1.3 架构设计产生的背景1.4 软件架构的发展历程1.5 模块化开发方法1.6 模块法方法分解模块遵循的原则1.7 软件工程…...

FPGA基本算术运算
FPGA基本算术运算 FPGA基本算术运算1 有符号数与无符号数2 浮点数及定点数I、定点数的加减法II、定点数的乘除法 3 仿真验证i、加减法验证ii、乘除法验证 FPGA基本算术运算 FPGA相对于MCU有并行计算、算法效率较高等优势,但同样由于没有成型的FPU等MCU内含的浮点数运…...

Linux Input子系统
一、基本概念 按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。本质属于字符设备。 1. input子系统结构如下: input 子系统分为 input 驱动层、input 核心层、input 事件处理层&…...

commet与websocket
commet与websocket Comet 前言 Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流。 实现方式 长轮询 长轮询是在打开一条连接以后保持&…...

python3 简易 http server:实现本地与远程服务器传大文件
在个人目录下创建新文件httpserver.py : vim httpserver.py文件内容为python3代码: # !/usr/bin/env python3 import datetime import email import html import http.server import io import mimetypes import os import posixpath import re import…...

Microsoft Edge 主页启动diy以及常用的扩展、收藏夹的网站
一、Microsoft Edge 主页启动diy 二、常用的扩展 1、去广告:uBlock Origin 2、翻译: 页面翻译:右键就有了,已经内置了划词翻译 3、超级复制 三、收藏夹的网站...

文末送书!谈谈原型模式在JAVA实战开发中的应用(附源码+面试题)
作者主页:Designer 小郑 作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,蓝桥云课认证讲师。 本文讲解了 Java 设计模式中的原型模式,并给…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR启动时打印starting server:listen tcp,该如何解决?
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成,…...

【Linux从入门到精通】通信 | 管道通信(匿名管道 命名管道)
本派你文章主要是对进程通信进行详解。主要内容是介绍 为什么通信、怎么进行通信。其中本篇文章主要讲解的是管道通信。希望本篇文章会对你有所帮助。 文章目录 一、进程通信简单介绍 1、1 什么是进程通信 1、2 为什么要进行通信 1、3 进程通信的方式 二、匿名管道 2、1 什么是…...

实践和项目:解决实际问题时,选择合适的数据结构和算法
文章目录 选择合适的数据结构数组链表栈队列树图哈希表 选择合适的算法实践和项目 🎉欢迎来到数据结构学习专栏~实践和项目:解决实际问题时,选择合适的数据结构和算法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT…...

上线检查工具(待完善)
根据V11《CEBPM系统上线CheckList》整理而得,适用于V11,DHERP,Oracle和MSSQL数据库,检查内容还不完善。 上图: 1)数据库连接 2)双击[连接别名],可选择历史连接 3)主界面…...

PE文件格式详解
摘要 本文描述了Windows系统的PE文件格式。 PE文件格式简介 PE(Portable Executable)文件格式是一种Windows操作系统下的可执行文件格式。PE文件格式是由Microsoft基于COFF(Common Object File Format)格式所定义的,…...