29、shell变量、重定向及运算符

news2024/9/22 13:30:40

一、shell脚本

1.1、shell的定义

脚本:可运行的代码的集合,脚本语言(计算机语言)。

脚本的特点:从上到下,按行执行。

python:脚本语言 格式更严谨的执行缩进。也是从上到下按行执行。

shell脚本是在shell环境(/bin/bash)bash就是shell的解释器。linux环境下的编程语句。

----自动化运维,可重复执行的,自动化的在系统中实现增删改查的操作。

shell的解释器,默认的就是bash(cd翻译成计算机识别的语言)

sh:已经淘汰

bash:sh的扩展版

csh:类c语言

tcsh:整合了c语言的shell

nologin:用户无法登录到系统的shell

1.2、shell的作用:

1、自动化运维。

2、批量化的重复操作,以及配合定时任务执行。

3、有了脚本就可以减轻管理员的工作量。

4、避免配置出错。

5、提供处理批量文件的速度。

1.3、shell的构成:

[root@localhost ~]# vim test.sh

#!/bin/bash
#声明shell的解释器,这一行可以不写,默认就是bash ./python expect
,只要不是默认shell,其他的都要声明解释器
#被注释掉的部分是不会被执行的,步骤的含义。
#可执行语句:
#this is my first shell
cd /boot
echo "当前目录的位置"
#echo的作用就是打印
pwd
echo "展示其中以vml开头的文件:"
ls -lh vml*

第一行:声明解释器(默认就是bash,可以不写)

注释:以#开头,就是注释的信息,注释的部分不会被执行。

可执行语句:linux的命令都可以作为可执行语句,一行一行往下写。一行就是一个可执行的语句。

1.4、shell的执行方式:

3种执行方式:

1、不给脚本执行权限的执行方式:

sh +脚本:就是在当前的shell里产生一个子shell,运行的结果不改变父shell的环境。

[root@localhost ~]# sh test.sh
当前目录的位置
/boot
展示其中以vml开头的文件:
-rwxr-xr-x. 1 root root 6.4M 5月  15 22:34 vmlinuz-0-rescue-f40500d9daf845a7aac3e242fa92069c
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]#

2、bash test.sh:就是在当前的shell里产生一个子shell,运行的结果不改变父shell的环境。

[root@localhost ~]# bash test.sh
当前目录的位置
/boot
展示其中以vml开头的文件:
-rwxr-xr-x. 1 root root 6.4M 5月  15 22:34 vmlinuz-0-rescue-f40500d9daf845a7aac3e242fa92069c
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]#

3、source:点命令,他会改变当前shell的环境,也就是真正的执行代码。

[root@localhost ~]# source test.sh
当前目录的位置
/boot
展示其中以vml开头的文件:
-rwxr-xr-x. 1 root root 6.4M 5月  15 22:34 vmlinuz-0-rescue-f40500d9daf845a7aac3e242fa92069c
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost boot]#

第二种:

脚本调试完,都是赋权执行。

[root@localhost ~]# ./test.sh
-bash: ./test.sh: 权限不够
[root@localhost ~]# chmod 777 test.sh
[root@localhost ~]# ./test.sh
当前目录的位置
/boot
展示其中以vml开头的文件:
-rwxr-xr-x. 1 root root 6.4M 5月  15 22:34 vmlinuz-0-rescue-f40500d9daf845a7aac3e242fa92069c
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

二、重定向操作:

1、标准输入:ls

2、标准输出:

[root@localhost ~]# ls
test.sh  公共  模板  视频  图片  文档  下载  音乐  桌面

3、标准错误输出:

[root@localhost ~]# lsllsll
bash: lsllsll: 未找到命令...

4、重定向输出:

‘>’ 标准输出的结果保存到指定的文件,而且会覆盖文件原有的内容

[root@localhost ~]# ls > test1
[root@localhost ~]# cat test1
test1
test.sh

‘>>'标准输出的结果保存到指定的文件,原有的内容尾部追加内容,不会覆盖原有的内容。

[root@localhost ~]# ls >> test1
[root@localhost ~]# cat test1
test1
test.sh
test1
test.sh

5、2> 2>>标准错误输出的结果,保存到指定的文件。

[root@localhost ~]# lssdsdsf 2> test1
[root@localhost ~]# cat test1
bash: lssdsdsf: 未找到命令...
[root@localhost ~]# lssdsdsf 2>> test1
[root@localhost ~]# cat test1
bash: lssdsdsf: 未找到命令...
bash: lssdsdsf: 未找到命令...

6、&> &>>混合输出,既可以保存标准输出,也可以保存错误输出

[root@localhost ~]# ls &> test1
[root@localhost ~]# lsdsdsdsdsdsds &>> test1
[root@localhost ~]# cat test1
test1
test.sh
公共
模板
视频
图片
文档
下载
音乐
桌面
bash: lsdsdsdsdsdsds: 未找到命令...

7、重定向输入:< 从指定的文件获取数据。

[root@localhost opt]# echo 123456 > passwd.txt
[root@localhost opt]# ls
login.sh  nginx-1.22.0  nginx-1.22.0.tar.gz  passwd.txt
[root@localhost opt]# cat passwd.txt 
123456
[root@localhost opt]# passwd --stdin dn < passwd.txt 
更改用户 dn 的密码 。
passwd:所有的身份验证令牌已经成功更新。

三、变量的作用和类型,如何声明变量

3.1变量的作用:

用来存放系统和用户所需使用的设定的参数,变量保存在内存中,调用的时候,直接到内存中查找变量所在的内存地址。

3.2、变量的类型:

3.2.1、自定义变量

自定义变量:名称由用户自定义 值也可以自定义。

​ 变量名的规范:

​ 1、不要使用系统的命令作为变量名

​ 2、不要使用中文

​ 3、不要使用特殊符号开头,可以使用_开头,不要使用数字开头。

​ 4、变量名我们一般会使用对应的英文名称来使用,computer student nubmer 。。。

​ 5、变量名要保持前后一致,要有注释。提供代码的可读性。

​ 变量值:int 整数 string 字符串 浮点 0.12 布尔: true false

​ 字符串需要双引号引起来。"tes

[root@localhost opt]# vim test.sh
[root@localhost opt]# sh test.sh
10
[root@localhost opt]# vim test.sh

a="test"
echo "$a"


[root@localhost opt]# sh test.sh
test
[root@localhost opt]# vim test.sh

a=1
b=2
c=$[$a+$b]
echo $c



[root@localhost opt]# sh test.sh
3

’ '的作用

[root@localhost opt]# vim test.sh

a='test'
echo '$a'


[root@localhost opt]# sh test.sh
$a

#a=‘test’
#echo ‘$a’
#双引号,单引号,反撇号之间的作用和区别
#弱引用和强引用
#双引号,就是弱引用,变量值就是变量值本身
#单引号,强引用,变量值不再是本身定义的值,保持自身的字符串形式
#反撇号,命令替换,把命令结果传给变量,作为变量的值,先执行命令>,再给变量赋值。

[root@localhost opt]# vim test.sh

a=`ls /opt`
echo "$a"


[root@localhost opt]# sh test.sh
login.sh
nginx-1.22.0
nginx-1.22.0.tar.gz
passwd.txt
test1
test1.sh
test2.sh
test.sh
[root@localhost opt]# vim test.sh

#自定义输入变量的值

read -p "提示信息:" a
read -p "数字b:" b
c=$(($a+$b))         ##只能做整数运算
echo $c
#-p 指定提示符,提示符的内容包含在“”中间,“”可以为空,但是双引号
必须要有。



[root@localhost opt]# sh test.sh
提示信息:16
数字b:15
31

3.2.2、全局变量

全局变量:对整个系统生效,所有用户都可以使用。

vim test.sh

c=$(($a+$b))
echo $c

[root@localhost opt]# export a
[root@localhost opt]# a=3
[root@localhost opt]# export b
[root@localhost opt]# b=5
[root@localhost opt]# sh test.sh
8                               ##当前shell


[root@localhost opt]# vim /etc/profile    ##全局配置文件,全局生效

export a=3
export b=5

[root@localhost opt]# source /etc/profile
[root@localhost opt]# sh test.sh
8


重新开shell
[root@localhost ~]# sh test.sh
当前目录的位置
/boot
展示其中以vml开头的文件:
-rwxr-xr-x. 1 root root 6.4M 5月  15 22:34 vmlinuz-0-rescue-f40500d9daf845a7aac3e242fa92069c
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]# sh /opt/test.sh
8

全局生效,每个脚本的变量值是固定的。

持久性

共享性

全局变量适合于不需要经常更改的值。

排错的方法:bash -n 脚本名:检测语法。

bash -x 脚本名:会把每一步打印出来,方便定位每一步的错误。

3.2.3、环境变量

环境变量:环境变量是系统创建的,主要用来设置用户的工作环境。

环境变量可以理解为特殊的全局变量,/etc/profile配置文件。

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

可执行的命令,或者可执行的程序默认路径。

[root@localhost ~]# vim 123.sh
[root@localhost ~]# 123.sh
bash: 123.sh: 未找到命令...
[root@localhost ~]# ls
123.sh  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@localhost ~]# 123.sh
bash: 123.sh: 未找到命令...
[root@localhost ~]# chmod 777 123.sh
[root@localhost ~]# 123.sh
bash: 123.sh: 未找到命令...
[root@localhost ~]# cat 123.sh
[root@localhost ~]# cd /opt/
[root@localhost opt]# cat 123.sh
cat: 123.sh: 没有那个文件或目录
[root@localhost opt]# 123.SH
bash: 123.SH: 未找到命令...
[root@localhost opt]# 123.sh
bash: 123.sh: 未找到命令...
[root@localhost opt]# PATH="$PATH:/root"
[root@localhost opt]# echo $path

[root@localhost opt]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@localhost opt]# 123.sh
[root@localhost opt]# cd ..
[root@localhost /]# cd ~
[root@localhost ~]# 123.sh
[root@localhost ~]# cd /opt/
[root@localhost opt]# cat 123.sh
cat: 123.sh: 没有那个文件或目录
[root@localhost opt]# 

在这里插入图片描述

3.2.4、位置变量

位置变量:又名命令行参数,是在脚本的外面给脚本内部传值。

$1$2$3…$9

从第一个到第九个

10以后要用{}把数字括起来

( 10 ) (10) (10)(11)

[root@localhost opt]# vim test.sh

a=$1
b=$2
c=$(($a+$b))
echo $c


[root@localhost opt]# sh test.sh 12 13
25

3.2.5、预定义变量

预定义变量:编程语言和解释器提供的,用户无法更改,只能由系统自行更新和设备。

∗ 和 *和 @:表示命令或者脚本需要处理的参数。二者的区别在于处理方式的不同。

∗ 和 *和 @:不加引号的表现一致,都把参数一个一个处理。

$*加了引号,会把参数当成一个整体来进行处理。

[root@localhost opt]# vim test1.sh


function print_args {

for arg in "$*"
do
 echo "$arg"
done

}
print_args "1" "2" "3"

[root@localhost opt]# sh test1.sh 
1 2 3

$*不加引号,结果如下:

[root@localhost opt]# vim test1.sh

function print_args {

for arg in $*
do
 echo "$arg"
done

}
print_args "1" "2" "3"

[root@localhost opt]# sh test1.sh 
1
2
3

$#加引号

[root@localhost opt]# vim test1.sh

function print_args {

for arg in "$@"
do
 echo "$arg"
done

}
print_args "1" "2" "3"


[root@localhost opt]# sh test1.sh 
1
2
3

$@不加引号

[root@localhost opt]# vim test1.sh



function print_args {

for arg in $@
do
 echo "$arg"
done

}
print_args "1" "2" "3"

[root@localhost opt]# sh test1.sh 
1
2
3

$#也是一个全局变量,统计传递给脚本或者函数的参数个数。

[root@localhost opt]# vim test1.sh

function print_args {

for arg in $@
do
 echo "$arg"
done
echo "传了几个:$#"
}
print_args "1" "2" "3"

[root@localhost opt]# sh test1.sh 
1
2
3
传了几个:3
echo $?   ##查看上一次命令的执行状态

true false 命令执行之后返回的状态码,

只有0,表示成功

所有非0都表示失败

[root@localhost opt]# ls
login.sh      nginx-1.22.0.tar.gz  test1.sh
nginx-1.22.0  passwd.txt           test.sh
[root@localhost opt]# echo $?
0
[root@localhost opt]# sddss
bash: sddss: 未找到命令...
[root@localhost opt]# echo $?
127

返回上一次,执行命令的状态

例子1:

[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b
if [ $a -eq $b ]
then
echo $?
else
echo $?
fi

[root@localhost opt]# sh test2.sh 
输入第一个数12
输入第一个数12
0
[root@localhost opt]# sh test2.sh 
输入第一个数12
输入第一个数13
1

四、运算符号

4.1、加法

[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b
c=$(($a+$b))
echo $c

+ - * /  %取余

[root@localhost opt]# sh test2.sh 
输入第一个数12
输入第一个数14
26

4.2、减法

[root@localhost opt]# vim test2.sh



read -p "输入第一个数" a
read -p "输入第一个数" b
c=$(($a-$b))
echo $c

+ - * /  %取余

[root@localhost opt]# sh test2.sh 
输入第一个数12
输入第一个数3
9

4.3、乘法

[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b
c=$(($a*$b))
echo $c

+ - * /  %取余

[root@localhost opt]# sh test2.sh 
输入第一个数13
输入第一个数12
156

4.4、除法

[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b
c=$(($a/$b))
echo $c

+ - * /  %取余

[root@localhost opt]# sh test2.sh 
输入第一个数14
输入第一个数5
2

4.5、取余

[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b
c=$(($a%$b))
echo $c
+ - * /  %取余

[root@localhost opt]# sh test2.sh 
输入第一个数14
输入第一个数5

4.6、乘法补充:

c=$(expr $a \* $b )   ##乘法不一样
[root@localhost opt]# vim test2.sh
[root@localhost opt]# sh test2.sh 
输入第一个数12
输入第一个数14
expr: 语法错误          ##无\

[root@localhost opt]# vim test2.sh


read -p "输入第一个数" a
read -p "输入第一个数" b
c=$(expr $a \* $b )
echo $c

+ - * /  %取余

[root@localhost opt]# sh test2.sh 
输入第一个数14
输入第一个数15
210

4.7、let补充

let c=$a*$b     ##加减乘除都一样


[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b
let c=$a*$b
echo $c
# + - * /  %取余


[root@localhost opt]# sh test2.sh 
输入第一个数12
输入第一个数13
156

4.8、小数运算

#小数运算:bc是一个简易的系统自带的计算机程序,可以执行整数,也可以计算小数。

[root@localhost opt]# vim test2.sh

read -p "输入第一个数" a
read -p "输入第一个数" b

+ - * /  %取余

#小数运算:bc是一个简易的系统自带的计算机程序,可以执行整数,也>可以计算小数。
c=$(echo "$a+$b"|bc)

echo $c

[root@localhost opt]# sh test2.sh 
输入第一个数12.4
输入第一个数12.5
24.9

4.9、awk命令行运算

awk:命令行传参数

[root@localhost opt]# awk 'BEGIN{print 4.5*4.8}'
21.6
[root@localhost opt]# awk 'BEGIN{print 4.5+4.8}'
9.3
[root@localhost opt]# awk 'BEGIN{print 4.5-4.8}'
-0.3
[root@localhost opt]# awk 'BEGIN{print 4.5/4.8}'
0.9375
[root@localhost opt]# awk 'BEGIN{print 4.5%4.8}'
4.5

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

正式发布 | 极海首款GHD3440电机专用栅极驱动器,构建多元电机产品矩阵

​栅极驱动器是低压控制器和高功电路之间的缓冲电路&#xff0c;用于放大控制器的控制信号&#xff0c;从而实现功率器件更有效的导通和关断。随着各种智能电子设备的不断普及和应用&#xff0c;栅极驱动器的市场需求也在不断增加。据国际权威研究机构Yole Group预计&#xff0…

元灵诀 逆天纪系统搭建 零撸看广告升级模式 定制开发

在当今互联网飞速发展的时代&#xff0c;元灵诀逆天纪系统的出现无疑为游戏行业注入了新的活力。这款系统不仅是一个定制开发的youxiu作品&#xff0c;更是对游戏产业的一次深度思考和探索。其独特的零撸看广告升级模式&#xff0c;将游戏体验和商业模式完美结合&#xff0c;开…

HoloLens2系列讲解 - 05 HoloLens2 Appx 安装

安装准备 Hololens2设备打包好的Appx文件一台电脑Hololens2 和电脑需要处于同一局域网 安装Appx 1.在Hololens设备上点击设置->网络和Internet->选择“自己wifi名称”网络并点击自动连接。 2.查看HoloLens的IP地址&#xff0c;如192.168.0.1。 &#xff08;1&#xff…

【Go语言】面向对象编程(二):通过组合实现类的继承和方法重写

通过组合实现类的继承和方法重写 要实现面向对象的编程&#xff0c;就必须实现面向对象编程的三大特性&#xff1a;封装、继承和多态。 1 封装 类的定义及其内部数据的定义可以看作是类的属性&#xff0c;基于类定义的函数方法则是类的成员方法。 2 继承 Go 语言中&#x…

微软将 AI 工具和软件的研发工作外包给 OpenAI

微软将 AI 工具和软件的研发工作外包给 OpenAI 科技媒体 CNBC 报道称&#xff0c;微软正计划将其人工智能&#xff08;AI&#xff09;工具和软件的开发工作外包给OpenAI&#xff0c;这对竞争对手谷歌来说无疑是一个利好消息。 Okta首席执行官Todd McKinnon表示&#xff0c;微…

【浏览器清空证书】

chrome://net-internals/#hsts 在地址栏输入并访问&#xff1a;chrome://net-internals/#hsts

.NET C# 读写Excel及转换DataTable

目录 .NET C# 读写Excel及转换DataTable1. 依赖库2. Nuget包与版本3. ExcelUtil3.1 Excel sheet 转 DataTable3.2 Excel sheet 转 DataSet3.3 DataTable 转 Excel sheet3.4 DataSet 转 Excel3.5 私有方法 .NET C# 读写Excel及转换DataTable 1. 依赖库 using NPOI.HSSF.UserMo…

[数据集][目标检测]中国象棋检测数据集VOC+YOLO格式300张12类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;300 标注数量(xml文件个数)&#xff1a;300 标注数量(txt文件个数)&#xff1a;300 标注类别…

串口通信的基本概念

串口通信&#xff08;Serial Communications&#xff09;的基本概念可以归纳为以下几个方面&#xff1a; 1、定义与原理&#xff1a; 串口通信是一种通过串行接口进行数据传输的通信方式。它可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去&#xff0c;同时可…

大学四年没写过一行代码?真实的计算机专业到底如何?

最近我帮一个学弟做了一个网站当作课程项目&#xff0c;我做好了发给他。他却问我怎么打开&#xff0c;可以用 eclipse 吗&#xff1f;当时直接给我整不会了。这个学弟是通过我们学校的一个代做项目群认识的&#xff0c;这个群有 600 多人&#xff0c;而且天天有人问有没有代做…

C# Web控件与数据感应之模板循环输出

目录 关于模板循环输出 准备数据源 ​范例运行环境 RepeatHtml 方法 设计与实现 如何获取模板内容 getOuterHtml 方法 getInnerHtml 方法 调用示例 小结 关于模板循环输出 数据感应也即数据捆绑&#xff0c;是一种动态的&#xff0c;Web控件与数据源之间的交互&…

国内前十款品质优秀贵金属交易平台app最新排名(功能评测)

投资者如果想要成功进行贵金属投资&#xff0c;则需要掌握相应的技巧和知识。首先&#xff0c;需要对市场进行充分的研究和分析&#xff0c;了解市场走势和资讯&#xff0c;确保自己能够作出明智的投资决策。其次&#xff0c;需要在投资时控制好风险&#xff0c;不将全部资产投…

Angular封装高德地图组件实现输入框搜索,地图点击选地点

Angular封装高德地图组件实现输入框搜索,地图点击选地点(Angular17版本) 话不多说直接上代码 创建一个独立组件 html代码: <div style"position: relative;"><input #searchInput nz-input placeholder"请输入地址"/><div #mapContaine…

ai变声小妙招:分享5个免费变声器,建议收藏!

你曾想过模仿别人的声音吗&#xff1f;也许你看过电影&#xff0c;并为电影中可能出现的变声而惊叹不已。但你知道在现实生活中也可以变声吗&#xff1f;虽然它可能不像你在大屏幕上看到的那样令人印象深刻&#xff0c;但它仍然可以为各种目的带来乐趣和帮助。在以下情况下&…

6月1号关于伊拉克COC清关严控

伊拉克目的港清关严控&#xff0c;所有管控范围内的产品务必申请COC证书&#xff0c; 到港货物&#xff0c;也可以补办了 具体咨询 办理伊拉克COC认证的流程包括&#xff1a; 准备必要的文件&#xff0c;如装箱单、形式发票、产品的测试报告&#xff08;已有测试报告的无需重…

Flutter笔记:关于WebView插件的用法(上)

Flutter笔记 关于WebView插件的用法&#xff08;上&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

从AI大模型电视,看正在被改写的家庭智能交互

工业时代&#xff0c;内燃机未曾抵达的地方皆被看作“工业之废土”&#xff1b;信息化的今天&#xff0c;未能被AI染指的领域亦或成为“信息之孤岛”。 没有危言耸听。犹记去年&#xff0c;ChatGPT4.0横空出世——凭超强的自然语言处理能力锻造“上帝之手”&#xff0c;所到之…

【介绍下Pandas,什么是Pandas?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Spire.PDF for .NET【文档操作】演示:将新的 PDF 页面插入到指定索引处的现有 PDF 中

Spire.PDF 完美支持将多页 PDF 拆分为单页。但是&#xff0c;更常见的情况是&#xff0c;您可能希望提取选定的页面范围并保存为新的 PDF 文档。在本文中&#xff0c;您将学习如何通过 Spire.PDF 在 C#、VB.NET 中根据页面范围拆分 PDF 文件。 Spire.PDF for .NET 是一款独立 …

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果(地图探测、地图窥探)

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果&#xff08;地图探测、地图窥探&#xff09; 核心代码完整代码&#xff1a;在线示例 ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类&#xff0c;可以添加数据以及操作 FBO&#xff08;Ma…