【 shell 编程 】第1篇 变量

news2024/10/7 8:24:06

变量


文章目录

  • 变量
    • 一、前言
    • 二、变量
      • 1.变量的类型
      • 2.变量的运算


在这里插入图片描述


一、前言

1.什么是 shell

简介

SHELL是UNIX系统的用户与操作系统之间的一种接口。它既是UNIX系统的命令解释程序,又是一种高级的命令程序设计语言。

作为命令解释程序,SHELL接收用户输入的命令,将命令翻译成一个动作序列,然后调用系统过程执行这条命令。

作为命令程序设计语言,SHELL具有一般高级语言的许多特征,如变量定义、赋值、条件和循环语句等。用户可以利用SHELL的这些功能将多条命令组织成一个命令程序,以完成某种特定的任务。这个命令程序称为SHELL程序或SHELL过程。

在这里插入图片描述

2.shell语言的特点

SHELL语言的优点在于

1、SHELL语言非常适于编写小的CGI应用程序。UNIX系统中的SHELL语言是功能非常强大的编程工具。

2、Windows NT支持POSIX标准,这意味着大多数常用的UNIX工具(例如sh)都可以在NT中运行。

3、使用SHELL语言编写的应用程序短小精干,运行时不会产生类似Perl语言解释器之类的开销,并且易于实现在不同系统之间的移植。

SHELL语言的缺点在于

1、SHELL语言没有象“真正”的编程语言那样,提供灵活且功能强大的控制结构。

2、在SHELL程序中常常需要不断地调用其它的工具(例如,grep、sed,甚至还有Perl)。

3.shell 能做什么?
1、自动化批量系统初始化程序( update、软件安装、时区设置、安全策略…)

2、自动化批量软件部署程序( LAMP、LNMP、Tomcat、LVS、Nginx)

3、应用管理程序( KVM、集群管理扩容、MySQL、DELLR720批量RAID)

4、日志分析处理程序(PV、UV、200代码、!200代码、top 100、grep/awk)

5、自动化备份恢复程序(MySQL完全备份/增量 + Crond)

6、自动化管理程序(批量远程修改密码、软件升级、配置更新)

7、自动化信息采集( 收集系统/应用状态信息、CPU、Mem、Disk、Net、TCP、Status、Apache、MySQL)

8、配合zabbix信息采集( 收集系统/应用状态信息、CPU、Mem、Disk、Net、TCP、Status、Apache、MySQL)

9、自动化扩容(增加云主机 ——> 业务上线)
zabbix监控CPU 80% + 50%Python API AWS/EC2 (增加/删除云主机)+ shell Script ( 业务上线)

10、俄罗斯方块、打印三角形、打印圣诞树、打印五角星、运行小火车、坦克大战、排序算法实现

11、shell可以做任何事(一切取决于业务需求!)
4.shell 执行方式
shell 多种执行方式
准备测试脚本

[root@apache 桌面]# vim file1
[root@apache 桌面]# cat file1
echo "hello,2023!"
read -p "请输入你的姓名:" name
echo "hello,$name"

执行1:bash ping01.sh
执行2:sh ping01.sh
执行3:. bash.sh
执行4:source bash.sh

[root@apache 桌面]# bash file1
hello,2023!
请输入你的姓名:guan
hello,guan
[root@apache 桌面]# sh file1
hello,2023!
请输入你的姓名:guan
hello,guan
[root@apache 桌面]# . file1
hello,2023!
请输入你的姓名:guan
hello,guan
[root@apache 桌面]# source file1
hello,2023!
请输入你的姓名:guan
hello,guan

5.多种执行方式的区别

1、准备环境

[root@apache 桌面]# vim bash.sh
[root@apache 桌面]# cat bash.sh
#!/bin/bash
cd /home
ls



2、1和2的方式是子shell(执行脚本没有改变目录路径位置)

[root@apache 桌面]# bash bash.sh
guan  Guan  guanguan  Guanguan
[root@apache 桌面]# sh bash.sh
guan  Guan  guanguan  Guanguan
[root@apache 桌面]# pwd
/root/桌面

3、3和4的方式是本shell(执行脚本改变了目录路径位置)

[root@apache 桌面]# . bash.sh
guan  Guan  guanguan  Guanguan
[root@apache home]# 
[root@apache 桌面]# source bash.sh
guan  Guan  guanguan  Guanguan
[root@apache home]# 
[root@apache home]# pwd
/home

6.shell 解释器有哪些?

[root@apache ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@apache ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

二、变量

变量:用一个固定的字符串去表示不固定的内容,便于修改。

1.变量的类型

1、自定义变量

特性

自定义变量(例子:ping.sh 引入变量)

定义变量:变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip = 192.168.200.182

引用变量: $变量名 或 ${变量名}

查看变量: echo $变量名;"set"可以查看所有变量(包括自定义变量和环境变量)

取消变量: unset 变量名

作用范围:仅当前 shell 中有效

例子
使用变量前

[root@apache 桌面]# vim ping.sh
[root@apache 桌面]# bash ping.sh
192.168.200.182up
PING 192.168.200.182 (192.168.200.182) 56(84) bytes of data.
64 bytes from 192.168.200.182: icmp_seq=1 ttl=64 time=0.057 ms

--- 192.168.200.182 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.057/0.057/0.057/0.000 ms
[root@apache 桌面]# cat  ping.sh
#!/bin/bash
ping -c1 192.168.200.182 & > /dev/null && echo 192.168.200.182up || echo 192.168.200.182down

使用变量后

[root@apache 桌面]# vim ping.sh
[root@apache 桌面]# bash ping.sh
192.168.200.182 up
PING 192.168.200.182 (192.168.200.182) 56(84) bytes of data.
64 bytes from 192.168.200.182: icmp_seq=1 ttl=64 time=0.057 ms

--- 192.168.200.182 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.057/0.057/0.057/0.000 ms
[root@apache 桌面]# cat  ping.sh
#!/bin/bash
ip=192.168.200.182
ping -c1 $ip & > /dev/null && echo "$ip up" || echo "$ip down"

作用
-c后跟执行次数
$ip使用变量,需要用$进行调用
&&只用在&&前面的指令执行完了才执行它之后的指令
||相当于编程中的否则的作用
echo输出它之后的内容

变量赋值(定义变量):
1.显示赋值

[root@apache 桌面]# ip1=192.168.200.182
[root@apache 桌面]# echo ip1
ip1
[root@apache 桌面]# echo "ip1"
ip1
[root@apache 桌面]# echo $ip1
192.168.200.182
[root@apache 桌面]# school="NN university"
[root@apache 桌面]# echo $school
NN university

[root@apache 桌面]# date +%F
2022-12-28
[root@apache 桌面]# today01=`date +%F`
[root@apache 桌面]# echo $today01
2022-12-28

[root@apache 桌面]# today02=(date +%F)
[root@apache 桌面]# echo $today02
date
[root@apache 桌面]# today02=$(date +%F)
[root@apache 桌面]# echo $today02
2022-12-28

2.read 从键盘读入变量值

read 变量名
read -p “提示信息:” 变量名
read -t 5 -p “提示信息:” 变量名 //-t 等待 5 秒后超时
read -n 2 变量名 //-n 只记录几个字符

[root@apache 桌面]# vim ping.sh
[root@apache 桌面]# bash ping.sh
请输入测试的IP地址:192.168.200.182
192.168.200.182 up
PING 192.168.200.182 (192.168.200.182) 56(84) bytes of data.
64 bytes from 192.168.200.182: icmp_seq=1 ttl=64 time=0.063 ms

--- 192.168.200.182 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.063/0.063/0.063/0.000 ms

[root@apache 桌面]# cat ping.sh
#!/bin/bash
#ip=192.168.200.254
read -p "请输入测试的IP地址:" ip

ping -c1 $ip & > /dev/null && echo "$ip up" || echo "$ip down"

注意事项:3种引号
定义或引用变量时注意事项:
1." " 弱引用

[root@apache 桌面]# echo "${school} is good"  //脱去空格
NN university is good


  1. ’ ’ 强引用

' ' 单引号内所有字符都不起作用,只是看到的字符而已

[root@apache 桌面]# echo '${school} is good' //脱去所有字符
${school} is good
[root@apache 桌面]# 
  1. ` ` 优先执行

` ` 命令替换 等价于 $() 反引号中的shell命令会被先执行

[root@apache 桌面]# touch `date +%F`_file1.txt
[root@apache 桌面]# ls
2022-12-28_file1.txt           
bash.sh                
file1                 ping.sh                              
        
[root@apache 桌面]# touch $(date +%F)_file2.txt
[root@apache 桌面]# ls
2022-12-28_file1.txt          
2022-12-28_file2.txt        
bash.sh               
file1                 ping.sh                       

2、环境变量
定义环境变量:
方法一:export back_dir2=/home/backup
方法二:export back_dir1 将自定义变量转换成环境变量

引用变量:$变量名 或 ${变量名}
查看环境变量:echo $变量名 env 例如 env | grep back_dir2
取消环境变量:unset 变量名
变量作用范围:在当前shell和子shell有效!

[root@apache 桌面]# export abc=123456
[root@apache 桌面]# echo $abc
123456
[root@apache 桌面]# unset abc
[root@apache 桌面]# echo $abc

//自定义变量与环境变量的区别是否在子shell1中起作用
[root@nfs 桌面]# guan=hello
[root@nfs 桌面]# bash
[root@nfs 桌面]# echo $hello

[root@nfs 桌面]# 
[root@apache 桌面]# export abc=123456
[root@apache 桌面]# bash
[root@nfs 桌面]# echo $abc
123456

[root@nfs 桌面]# vim /etc/profile
[root@nfs 桌面]# tail -n 1 /etc/profile
export abc=hello   //这是新添加的环境变量,要使它生效需要重启虚拟机,完成后用户可以使用这个环境变量
[root@nfs ~]# echo $abc
hello

3、位置变量和预定义变量
语法:
命令 参数1 参数2 参数3 … 参数9以后特殊定义
预先定义过的变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的 PID
$? 上一个命令的返回值 0 表示成功

列子

[root@nfs 桌面]# vim test.sh
[root@nfs 桌面]# bash test.sh 
第1个位置参数是
第2个位置参数是
第3个位置参数是
第4个位置参数是
第5个位置参数是
第6个位置参数是
第7个位置参数是
第8个位置参数是
[root@nfs 桌面]# bash test.sh a b c d e
第1个位置参数是a
第2个位置参数是b
第3个位置参数是c
第4个位置参数是d
第5个位置参数是e
第6个位置参数是
第7个位置参数是
第8个位置参数是
[root@nfs 桌面]# cat test.sh
#!/bin/bash
echo "第1个位置参数是$1"
echo "第2个位置参数是$2"
echo "第3个位置参数是$3"
echo "第4个位置参数是$4"
echo "第5个位置参数是$5"
echo "第6个位置参数是$6"
echo "第7个位置参数是$7"
echo "第8个位置参数是$8"

[root@nfs 桌面]# cat  test.sh
#!/bin/bash
echo "第1个位置参数是$1"
echo "第2个位置参数是$2"
echo "第3个位置参数是$3"
echo "第4个位置参数是$4"
echo "第5个位置参数是$5"
echo "第6个位置参数是$6"
echo "第7个位置参数是$7"
echo "第8个位置参数是$8"


echo "所有的参数是  $*"
echo "所有的参数是  $@"
echo "参数的个数是:  $#"
echo "当前进程的 PID 是:  $$"
sleep 30
echo "进程的名字是:  $0"
ls /home111111
echo "该程序最后执行成功了吗?  $?"  //执行成功返回0,执行失败返回非0值
ls /home
echo "该程序最后执行成功了吗?  $?"


[root@nfs 桌面]# vim  test.sh
[root@nfs 桌面]# bash  test.sh a b c
第1个位置参数是a
第2个位置参数是b
第3个位置参数是c
第4个位置参数是
第5个位置参数是
第6个位置参数是
第7个位置参数是
第8个位置参数是
所有的参数是  a b c
所有的参数是  a b c
参数的个数是:  3
当前进程的 PID 是:  9757
进程的名字是:  test.sh
ls: 无法访问/home111111: 没有那个文件或目录
该程序最后执行成功了吗?  2
guan  Guan  guanguan  Guanguan
该程序最后执行成功了吗?  0


$* 和 $@ 的区别

都是列出所有参数

2.变量的运算

1、整数运算
方法一:expr
语法:
expr 1+ 2
expr $num1 +(+ 、- 、* 、/ 、% ) $num2
(+ - * / % )

+
-
\*
/
%取余
[root@nfs 桌面]# expr 1 + 1
2
[root@nfs 桌面]# num1=1
[root@nfs 桌面]# num2=2
[root@nfs 桌面]# num3=3

[root@nfs 桌面]# expr $num1 + $num2 + $num3
6
[root@nfs 桌面]# 

方法二:$(( ))

[root@nfs 桌面]# num1=1
[root@nfs 桌面]# num2=2
[root@nfs 桌面]# num3=3
[root@nfs 桌面]# echo $((($num1 + $num2)*$num3)) 
9
[root@nfs 桌面]# num4=$((($num1 + $num2)*$num3)) 
[root@nfs 桌面]# echo $num4
9
[root@nfs 桌面]# num4=$((($num1 + $num2)*$num3));echo $num4
9

方法三:$[ ]

[root@nfs 桌面]# echo $[1*2*3]
6

方法四:let

[root@nfs 桌面]# let sum=1+2;echo $sum
3
[root@nfs 桌面]# let sum=$num1+$num2+$num3;echo $sum
6
[root@nfs 桌面]# let i++;echo $i
1
[root@nfs 桌面]# let i++;echo $i
2
[root@nfs 桌面]# let i++;echo $i
3

2、小数运算

[root@nfs 桌面]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1.4*3
4.2

[root@nfs 桌面]# echo "scale=2;9/4" | bc  //scale=为保留小数点多少位
2.25

[root@nfs 桌面]# echo "scale=4;9/4" | bc
2.2500

[root@nfs 桌面]# echo "scale=8;9/4" | bc
2.25000000

[root@nfs 桌面]# awk 'BEGIN{print 1/2}'
0.5

[root@nfs 桌面]# echo "print 5.0/2" | python
2.5

案列:
1、编写脚本,创建用户userA,并为用户设置初始密码为123456(无变量)

[root@nfs 桌面]# cat test01.sh
#!/bin/bash

useradd userA
echo "123456"|passwd --stdin userA & > /dev/null
echo "userA create finished the password is 123456"

2、编写脚本,创建用户userB,并为用户设置初始密码为123456(有变量)

[root@nfs 桌面]# cat  test02.sh
#!/bin/bash

#useradd userA

name=userB

echo "123456"|passwd --stdin $name & > /dev/null
echo "$name create finished the password is 123456"

3、编写脚本,创建用户userA,并为用户设置初始密码为123456(有变量,键盘读取)

[root@nfs 桌面]# cat  test03.sh
#!/bin/bash

#useradd userA

read -p "please input username:" name

useradd $name

echo "123456"|passwd --stdin $name & > /dev/null
echo "$name create finished the password is 123456"

4、编写脚本,配置本地 yum 源

[root@nfs 桌面]# cat yum.sh
#!/bin/bash

mount /dev/cdrom  /mnt &> /dev/null

rm -rf /etc/yum.repos.d/yum.repo

cat << EOF > /etc/yum.repos.d/yum.repo
[local]
name=localyum
baseurl=file:///mnt
enable=1
gpgcheck=0
EOF

yum repolist all

[root@nfs 桌面]# bash test01.sh
userA create finished the password is 123456
更改用户 userA 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@nfs 桌面]# bash  test02.sh
userB create finished the password is 123456
passwd:未知的用户名 userB。
[root@nfs 桌面]# bash  test03.sh
please input username:userC
userC create finished the password is 123456
更改用户 userC 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@nfs 桌面]# cat /etc/passwd
userA:x:1004:1004::/home/userA:/bin/bash
userC:x:1005:1005::/home/userC:/bin/bash


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

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

相关文章

Windows/Mac/Ubuntu环境下安装Dokcer

前提概要&#xff1a; 注意&#xff1a;安装虚拟环境的步骤我放到另外一个文章里面啦&#xff0c;有需要的可以看看哦 Docker介绍&#xff1a;1、Docker 并⾮是⼀个通⽤的容器⼯具&#xff0c;它依赖于已存在并运⾏的 Linux 内核环境。2、Docker 实质上是在已经运⾏的 Linux 下…

智慧养老系统(社区+居家+机构养老)

智慧养老是一个新的养老模式&#xff0c;信息化医疗服务&#xff0c;不仅能够提高养老产业的质量&#xff0c;提高养老成本降低&#xff0c;而且能够提高老人的身体健康&#xff0c;提高养老人的老年生活质量。 智慧养老系统解决方案提供完整的机构养老系统、社区养老系统&…

在项目中使用——newFixedThreadPool线程池

newFixedThreadPool线程池前言newFixedThreadPool的介绍使用newFixedThreadPool的步骤实例化一个固定线程大小线程池创建一个用于启动新线程的类使用submit提交线程最后关闭关闭线程池CountDownLatch配合线程池使用构造CountDownLatch计数器减一使调用该方法的线程处于等待状态…

推荐 12 月 yyds 的开源项目

本期推荐开源项目目录&#xff1a;1. 面向 API 的低代码平台2. 京东抢购自动下单助手3. 开发人员使用的低代码平台4. 好用又强大的开源建站工具5. OCR 图片转文字识别软件6. 互联网仍有记忆01面向 API 的低代码平台APITable 一个面向 API 的低代码平台&#xff0c;用于构建协作…

推荐系统从入门到入门(2)——简单推荐系统构建(无框架、Tensorflow)

本系列博客总结了不同框架、不同算法、不同界面的推荐系统&#xff0c;完整阅读需要大量时间&#xff08;又臭又长&#xff09;&#xff0c;建议根据目录选择需要的内容查看&#xff0c;欢迎讨论与指出问题。 系列文章梗概 本次大作业主要是以电影推荐系统为例&#xff0c;介绍…

GIC V3 V4 逻辑组件

GIC V3 & V4 逻辑组件1 GIC V3逻辑组件2 GIC 各组件的介绍2.1 Distributor2.2 Interrupt translation service, ITS2.3 Redistributor2.4 CPU interface1 GIC V3逻辑组件 The GICv3 architecture consists of a set of logical components: • A Distributor.• A Redist…

C++ 实现Manacher算法

前言 Manacher算法是一种回文串查找算法&#xff0c;专门用于处理查找字符串中的回文子串操作。虽然这个算法本身只是用于查找回文子串&#xff0c;但是它的查找思想还是非常值得学习的。由于Manacher算法是基于暴力解法优化而来的&#xff0c;所以在阅读正式的算法之前&#…

arthes—线上debug好帮手

arthes简介 以下是arthes官网原文&#xff1a; 通常&#xff0c;本地开发环境无法访问生产环境。如果在生产环境中遇到问题&#xff0c;则无法使用 IDE 远程调试。更糟糕的是&#xff0c;在生产环境中调试是不可接受的&#xff0c;因为它会暂停所有线程&#xff0c;导致服务暂…

粒子滤波原理和MATLAB代码实现

理论基础1&#xff1a; (a) Prediction Use the transition equation to propagate the particles: (b) Update Use the measurement equation to obtain measurements of the propagated particles and their standard deviations: (in the case of our program, ym is obt…

如何在 Manjaro Linux 上安装 ONLYOFFICE 桌面编辑器

ONLYOFFICE 桌面编辑器是一款免费开源办公套件&#xff0c;其中包括适用于文本文档、电子表格与演示文稿的离线编辑器。同时&#xff0c;您还可将应用程序连接至云端&#xff08;ONLYOFFICE、Nextcloud 等&#xff09;以便在线开展文档协作。该应用的源代码已根据 AGPL v.3.0 许…

业务中台10讲2.0合辑(推荐收藏)

目录V3.0迭代内容&#xff1a; 增加最近更新的中台系列文章至本目录&#xff1b;根据最新热点修订并调整部分未更新内容方向&#xff1b;为各文章标注《中台产品经理宝典》书中原文出处&#xff1b;本目录使用方法&#xff1a; 本目录推文为中台内容系列中的业务中台子类新原…

华润微功放CS3850EO,2×40W D 类音频功率放大电路,替换:智浦芯CS8673,TI的TAS5780、TAS5754,国产功放

1、概述 CS3850EO 是一款典型输出功率为 40W 立体声的 D 类音频功率放大电路&#xff0c;适用于拉杆音箱、高级桌面音响等场合。 特点 ● 工作电压范围&#xff1a;8V~26V ● 典型输出功率&#xff1a;30W2 20V、8Ω、THD10% 40W2 18V、4Ω、THD10% 50W2 26.5V、8Ω、…

你以为Shell只是命令行?读懂这篇文,给你的工作赋能

可以使用adb tcpip 端口在Android设备上启动一个指定的端口&#xff0c;然后使用adb connect Android设备ip:端口远程连接Android设备。 uiautomator 是一个 java 库&#xff0c;包含用于创建自定义功能UI测试的API&#xff0c;以及用于自动执行和运行测试的执行引擎。使用uiau…

Transformer与看图说话

&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5;&#x1f3c5; 一年一度的【博客之星】评选活动已开始啦 作为第一…

Redis的持久化技术

1. 前言 今天呢&#xff0c;我们来了解下Redis的持久化技术。都知道Redis是内存型key-value型数据库。其实叫缓存中间件更合适。既然是内存性数据库就知道存入磁盘的必要性了。所以就需要持久化技术来支持了 2. 合适人群 对Redis 持久化技术不了解的人 3. RDB RDB 其实就是Re…

推荐三款 Mac 上的理财神器 iCompta、Rublik、UctoX

推荐三款 Mac 上的理财神器 iCompta、Rublik、UctoX 今天推荐三款理财神器&#xff0c;像个人的话可以使用 iCompta&#xff08;个人财务管理&#xff09;一款软件就好了&#xff0c;但有些朋友可能有关注汇率的需求&#xff0c;可以使用 Rublik&#xff08;汇率动态&#xff…

尚硅谷密码学

密码学1. 密码学1.1. 密码学基本概念1.2 密码学的历史1.2.1 古典密码学1.2.1.1. 替换法1.2.1.2移位法1.2.1.2 古代密码学的破解方式1.2.2 进代密码学1.2.3 现代密码学1.2.3.1 散列函数1.2.3.2 对称密码1.2.3.3 非对称密码1.2.4 如何设置密码才安全1.2.5 ASCII编码1.3 凯撒加密1…

Ant Design Pro入门

目录 一&#xff1a;了解Ant Design Pro 二&#xff1a;快速入门 一&#xff1a;了解Ant Design Pro Ant Design Pro 是基于Ant Design的一个开箱即用的&#xff0c;企业级中后台前端/设计解决方案。 效果&#xff1a;源码地址&#xff1a;https://github.com/ant-design/ant…

Linux制作和使用动静态库

文章目录一、概念1.1 动态库和静态库1.2 动态链接和静态链接二、制作第三方库2.1 生成静态库① 制作静态库② 使用静态库2.2 生成动态库① 制作动态库② 使用动态库三、相关题目一、概念 1.1 动态库和静态库 静态库与动态库本质都是一堆目标文件(xxx.o)的集合&#xff0c;库的…

MySQL 索引之道

文章目录1. 索引的介绍2. 索引的本质3. 索引的结构3.1 Hash3.2 B树3.3 常见面试题之为什么用B树4. 索引的分类4.1 功能逻辑层次4.2 存储形式层次5. 索引的失效5.1 最左前缀原则5.2 索引失效的场景6. 索引常见面试题7. 总结及参考文献1. 索引的介绍 索引是通过某种算法&#xf…