Linux Shell编程从初学到精通

华清远见系列图书
Linux Shell编程从初学到精通
华清远见嵌入式培训中心 伍之昂 等编著
ISBN 978-7-121-12305-4
2011年2月出版
定价:58.00元(含DVD光盘1张)
16开
468 页
内 容 提 要
Shell是用户与内核进行交互操作的一种接口,是Linux最重要的软件之一。目前最流行的Shell称为bash Shell,bash Shell脚本编程以其简洁、高效而著称,多年来成为Linux程序员和系统管理员解决实际问题的利器。
本书结合大量的示例,系统、全面地介绍了bash Shell脚本编程的语法、命令、技巧、调试等内容,在书中还有很多练习可以引导读者思考,力求使读者掌握Linux bash Shell编程的所有特性。本书结构清晰、易教易学、实例丰富、可操作性强、学以致用,对易混淆和实用性强的内容进行了重点提示和讲解,并配有光盘,光盘中提供书中出现的所有脚本文件、各章的讲解PPT,以及各章的讲解录像。
本书面向广大工程技术工作者,既可作为高等学校教师和相关专业学生的教材,又可作为各类培训班的培训教程。
前    言
随着Linux逐步成为主流的服务器操作系统,Shell脚本编程成为一个优秀的Linux开发者和系统管理员必须掌握的技术之一。bash Shell为当前大部分Linux版本所使用,本书旨在系统地介绍bash 4.0版本下的Shell脚本编程。
本书共分17章:第1章介绍Shell的概念、Shell脚本编程的优势和结构等入门知识;第2章讲述Shell脚本编程不可或缺的Linux系统的基础知识;第3章介绍正则表达式和grep命令族;第4章阐述sed命令和awk命令两种在Shell编程中常用的工具;第5章介绍Shell编程在文件排序、合并和分割上的一些命令;第6章探讨变量和引用;第7章介绍退出、测试、判断及操作符;第8章介绍循环与结构化命令;第9章深入讨论变量的高级用法;第10章详述I/O重定向,包含管道、exec命令等重要内容;第11章简述UNIX/Linux发展过程中出现的其他类型的Shell;第12章介绍子Shell、限制性Shell和进程等内容;第13章介绍函数的用法;第14章介绍别名、列表及数组;第15章罗列了无法归入其他章节的混杂主题,包含脚本编写风格、脚本优化、/dev和/proc文件系统等;第16章介绍了Shell脚本的调试技术;第17章给出六个Shell编程的实例,读者需要综合使用前面章节所述的Shell命令和编程技巧,涉及系统管理、文本处理和数据库等多个方面。
本书内容丰富,覆盖了Shell编程的大部分技术,并结合典型例子透彻地介绍了Shell命令、选项、结构中的重点和难点。各章最后还配有一定数量的练习题供读者学习。为了帮助读者更加直观地学习本书,我们将书中出现的所有脚本文件、各章的讲解PPT,以及各章的讲解录像都收录到本书的配套光盘中。
本书面向广大工程技术工作者,既可作为高等学校的教师和相关专业学生的教材,又可作为各类培训班的培训教程。
本书由南京财经大学江苏省电子商务重点实验室伍之昂组织编写。在本书编写过程中,实验室主任曹杰教授在全书的体系结构、理论阐释和实例选取等方面提出了许多精辟的见解,研究生陈志杰同学精心润色了本书的文字。参加本书编写工作的还有高淑娟、李子龙、王丽娜、周毅、林小峰、刘刚、马海波、李强、吴慧、马玉刚、冯浩、唐爱琴、王明明、蒋志。在此,对他们表示诚挚的谢意。
限于笔者水平,本书一定有不少错误和不妥之处,恳请计算机专家、同行和读者批评、指正,您可以通过E-mail的方式与作者联系,作者邮箱是zawu@seu.edu.cn
编  者
目    录
第1章  Shell脚本编程概述 1
1.1  Linux和Shell概述 2
1.1.1  Linux简介 2
1.1.2  Shell简介 3
1.2  Shell脚本编程的优势 5
1.3  第一个Shell脚本例子 6
1.3.1  Shell脚本的基本元素 6
1.3.2  执行Shell脚本 7
1.4  本章小结 8
第2章  Linux文件系统和文本编辑器 9
2.1  用户和用户组管理 10
2.1.1  用户管理常用命令 10
2.1.2  用户组管理常用命令 14
2.2  文件和目录操作 16
2.2.1  文件操作常用命令 17
2.2.2  目录操作常用命令 21
2.2.3  文件和目录权限管理 25
2.2.4  查找文件命令——find 28
2.3  文本编辑器 31
2.3.1  vi编辑器 31
2.3.2  Gedit编辑器 35
2.4  本章小结 36
2.5  上机提议 37
第3章  正则表达式 39
3.1  正则表达式基础 40
3.2  正则表达式的扩展 43
3.3  通配 44
3.4  grep命令 46
3.4.1  grep命令基本用法 47
3.4.2  grep和正则表达式结合使用的一组例子 53
3.4.3  grep命令族简介 57
3.5  本章小结 58
3.6  上机提议 58
第4章  sed命令和awk编程 60
4.1  sed命令基本用法 61
4.2  sed编程的一组例子 63
4.2.1  sed命令选项的一组例子 63
4.2.2  sed文本定位的一组例子 66
4.2.3  sed基本编辑命令的一组例子 68
4.2.4  sed高级编辑命令的一组例子 76
4.3  awk编程 79
4.3.1  awk编程模型 80
4.3.2  awk调用方法 80
4.4  awk编程的一组例子 81
4.4.1  awk模式匹配 81
4.4.2  记录和域 82
4.4.3  关系和布尔运算符 84
4.4.4  表达式 86
4.4.5  系统变量 88
4.4.6  格式化输出 89
4.4.7  内置字符串函数 91
4.4.8  向awk脚本传递参数 93
4.4.9  条件语句和循环语句 94
4.4.10  数组 95
4.5  本章小结 99
4.6  上机提议 99
第5章  文件的排序、合并和分割 101
5.1  sort命令 102
5.1.1  sort命令的基本用法 102
5.1.2  sort和awk的联合用法 106
5.2  uniq命令 108
5.3  join命令 111
5.4  cut命令 114
5.5  paste命令 115
5.6  split命令 117
5.7  tr命令 119
5.8  tar命令 122
5.9  本章小结 125
5.10  上机提议 126
第6章  变量和引用 128
6.1  变量 129
6.1.1  变量替换和赋值 129
6.1.2  无类型的Shell脚本
变量 132
6.1.3  环境变量 133
6.1.4  位置参数 140
6.2  引用 141
6.2.1  全引用和部分引用 142
6.2.2  命令替换 143
6.2.3  转义 146
6.3  本章小结 149
6.4  上机提议 150
第7章  退出、测试、判断及操作符 152
7.1  退出状态 153
7.2  测试 154
7.2.1  测试结构 154
7.2.2  整数比较运算符 154
7.2.3  字符串运算符 156
7.2.4  文件操作符 157
7.2.5  逻辑运算符 159
7.3  判断 161
7.3.1  简单if结构 162
7.3.2  exit命令 163
7.3.3  if/else结构 164
7.3.4  if/else语句嵌套 166
7.3.5  if/elif/else结构 169
7.3.6  case结构 172
7.4  运算符 174
7.4.1  算术运算符 175
7.4.2  位运算符 176
7.4.3  自增自减运算符 178
7.4.4  数字常量 178
7.5  本章小结 180
7.6  上机提议 180
第8章  循环与结构化命令 182
8.1  for循环 183
8.1.1  列表for循环 183
8.1.2  不带列表for循环 187
8.1.3  类C风格的for循环 188
8.2  while循环 191
8.2.1  计数器控制的while循环 191
8.2.2  结束标记控制的while循环 193
8.2.3  标志控制的while循环 195
8.2.4  命令行控制的while循环 196
8.3  until循环 198
8.4  嵌套循环 199
8.5  循环控制符 203
8.5.1  break循环控制符 203
8.5.2  continue循环控制符 206
8.6  select结构 208
8.7  本章小结 210
8.8  上机提议 210
第9章  变量的高级用法 212
9.1  内部变量 213
9.2  字符串处理 221
9.3  有类型变量 227
9.4  间接变量引用 230
9.5  bash数学运算 232
9.5.1  expr命令 232
9.5.2  bc运算器 234
9.6  本章小结 235
9.7  上机提议 236
第10章  I/O重定向 238
10.1  管道 239
10.1.1  管道简介 239
10.1.2  cat和more命令 240
10.1.3  sed命令与管道 242
10.1.4  awk命令与管道 244
10.2  I/O重定向 246
10.2.1  文件标识符 246
10.2.2  I/O重定向符号及其用法 248
10.2.3  exec命令的用法 252
10.2.4  代码块重定向 255
10.3  命令行处理 258
10.3.1  命令行处理流程 258
10.3.2  eval命令 261
10.4  本章小结 264
10.5  上机提议 264
第11章 Linux/UNIX Shell类型与区别 266
11.1  Linux/UNIX Shell起源与分类 267
11.2  dash简介 268
11.3  tcsh简介 270
11.4  Korn Shell简介 275
11.5  本章小结 280
第12章 子Shell与进程处理 281
12.1  子Shell 282
12.1.1  内建命令 282
12.1.2  圆括号结构 285
12.2  Shell的限制模式 290
12.3  进程处理 292
12.3.1  进程和作业 294
12.3.2  作业控制 295
12.3.3  信号 299
12.3.4  trap命令 302
12.4  本章小结 305
12.5  上机提议 305
第13章 函数 307
13.1  函数的定义和基本知识 308
13.2  向函数传递参数 311
13.3  函数返回值 314
13.4  函数调用 315
13.4.1  脚本放置多个函数 316
13.4.2  函数相互调用 317
13.4.3  一个函数调用多个函数 319
13.5  局部变量和全局变量 320
13.6  函数递归 321
13.6.1  使用局部变量的递归 322
13.6.2  不使用局部变量的递归 323
13.7  本章小结 325
13.8  上机提议 326
第14章 别名、列表及数组 328
14.1  别名 329
14.2  列表 332
14.3  数组 334
14.3.1  数组的基本用法 335
14.3.2  数组的特殊用法 339
14.3.3  用数组实现简单的数据结构 343
14.4  本章小结 349
14.5  上机提议 349
第15章  一些混杂的主题 352
15.1  脚本编写风格 353
15.1.1  缩进 353
15.1.2  {}的格式 355
15.1.3  空格和空行的用法 355
15.1.4  判断和循环的编程风格 356
15.1.5  命名规范 357
15.1.6  注释风格 358
15.2  脚本优化 359
15.2.1  简化脚本 359
15.2.2  保持脚本的灵活性 361
15.2.3  给用户足够的提示 362
15.3  Linux中的特殊命令 364
15.3.1  shift命令 364
15.3.2  getopts命令 367
15.4  交互式和非交互式Shell脚本 369
15.4.1  非交互式Shell脚本 369
15.4.2  交互式Shell脚本 371
15.5  /dev文件系统 372
15.5.1  /dev文件系统基础知识 372
15.5.2  /dev/zero伪设备 374
15.5.3  /dev/null伪设备 375
15.6  /proc文件系统 376
15.6.1  使用/proc/sys优化系统参数 378
15.6.2  查看运行中的进程信息 379
15.6.3  查看文件系统信息 380
15.6.4  查看网络信息 380
15.7  Shell包装 381
15.8  带颜色的脚本 383
15.9  Linux脚本安全 389
15.9.1  使用shc工具加密Shell脚本 390
15.9.2  Linux Shell脚本编写的病毒 391
15.9.3  Linux Shell中的木马 392
15.10  本章小结 392
15.11  上机提议 393
第16章  Shell脚本调试技术 395
16.1  Shell脚本调试概述 396
16.2  Shell脚本调试技术 398
16.2.1  使用trap命令 398
16.2.2  使用tee命令 401
16.2.3  调试钩子 403
16.2.4  使用Shell选项 404
16.3  本章小结 409
16.4  上机提议 409
第17章  bash Shell编程范例 412
17.1  将文本文件转化为HTML
文件 413
17.2  查找文本中n个出现频率最高的单词 417
17.3  伪随机数的产生和应用 419
17.4  crontab的设置和应用 423
17.5  使用MySQL数据库 426
17.5.1  MySQL基础 426
17.5.2  Shell脚本使用MySQL 427
17.6  Linux服务器性能监控系统 432
17.6.1  Ganglia简介及安装 432
17.6.2  提取服务器性能参数名称及数据 435
17.6.3  动态更新服务器监控数据 441
17.7  本章小结 443
17.8  上机提议 443
附录 445
附录A  POSIX标准简介 446
附录B  常用ASCII码对照表 447
附录C  Linux信号及其意义 452
附录D  bash内建变量索引 453
附录E  bash内建命令索引 455
参考文献 458

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux编程从入门到精通适合初学者 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 什么是操作系统 11 1.2.3 内核数据结构 13 第2章 内存管理 15 2.1 虚拟内存抽象模型 15 2.1.1 请求调页 17 2.1.2 交换 17 2.1.3 共享虚拟内存 18 2.1.4 物理寻址模式和虚拟寻址模式 18 2.1.5 访问控制 18 2.2 高速缓存 19 2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页 26 2.8.3 换出和淘汰页 27 2.9 交换缓存 27 2.10 页换入 28 第3章 进程 29 3.1 Linux进程 29 3.2 标识符 31 3.3 调度 32 3.4 文件 34 3.5 虚拟内存 35 3.6 创建进程 36 3.7 时间和定时器 37 3.8 执行程序 38 3.8.1 ELF 39 3.8.2 脚本文件 40 第4章 进程间通信机制 41 4.1 信号机制 41 4.2 管道 42 4.3 套接字 44 4.3.1 System V的进程间通信机制 44 4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理数据结构 61 6.1.3 中断处理 62 6.2 设备驱动程序 63 6.2.1 测试与中断 64 6.2.2 直接存储器访问(DMA) 65 6.2.3 存储器 66 6.2.4 设备驱动程序与内核的接口 66 6.2.5 硬盘 69 6.2.6 网络设备 74 第7章 文件系统 77 7.1 第二个扩展文件系统EXT2 78 7.1.1 EXT2系统的inode节点 79 7.1.2 EXT2系统的超级块 80 7.1.3 EXT2系统的组描述符 80 7.1.4 EXT2系统的目录 81 7.1.5 在EXT2文件系统中查找文件 81 7.1.6 在EXT2文件系统中改变文件 的大小 82 7.2 虚拟文件系统 83 7.2.1 VFS文件系统的超级块 84 7.2.2 VFS文件系统的inode节点 84 7.2.3 注册文件系统 85 7.2.4 装配文件系统 85 7.2.5 在虚拟文件系统中查找文件 87 7.2.6 卸载文件系统 87 7.2.7 VFS文件系统的inode缓存 87 7.2.8 目录缓存 88 7.3 缓冲区缓存 88 7.3.1 bdflush内核守护进程 90 7.3.2 update进程 90 7.4 /proc文件系统 91 7.5 特殊设备文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 建立INET BSD Socket连接 99 8.4.4 INET BSD Socket侦听 100 8.4.5 接受连接请求 100 8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务队列 108 9.1.3 定时器 109 9.1.4 等待队列 110 9.1.5 自旋锁 110 9.1.6 信号量 110 9.2 模块 111 9.2.1 模块载入 112 9.2.2 模块卸载 113 第10章 处理器 115 10.1 X86 115 10.2 ARM 115 10.3 Alpha AXP处理器 115 第11章 Linux内核源代码 117 11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把设备文件用于输入 170 第6章 启动参数 182 第7章 系统调用 185 第8章 阻塞处理 190 第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员指南 第1章 Linux操作系统 219 第2章 Linux内核 220 第3章 Linux libc包 221 第4章 系统调用 222 第5章 “瑞士军刀”:ioctl 223 第6章 Linux进程间通信 224 6.1 介绍 224 6.2 半双工Unix管道 224 6.2.1 基本概念 224 6.2.2 用C语言创建管道 225 6.2.3 简便方法 229 6.2.4 管道的原子操作 233 6.2.5 关于半双工管道需要注意的几个 问题 233 6.3 命名管道 234 6.3.1 基本概念 234 6.3.2 创建FIFO 234 6.3.3 FIFO操作 235 6.3.4 FIFO上的阻塞动作 236 6.3.5 SIGPIPE信号 237 6.4 系统V IPC 237 6.4.1 基本概念 237 6.4.2 消息队列 239 6.4.3 信号量 251 6.4.4 semtool:交互式信号量操作 程序 260 6.4.5 共享内存 267 第7章 声音编程 274 7.1 内部扬声器编程 274 7.2 声卡编程 274 第8章 字符单元图形 276 8.1 libc中的I/O函数 277 8.1.1 格式化输出 277 8.1.2 格式化输入 278 8.2 termcap库 278 8.2.1 前言 278 8.2.2 获得终端描述 279 8.2.3 查看终端描述 279 8.2.4 termcap权能 280 8.3 Ncurses简介 280 8.4 初始化 282 8.5 窗口 283 8.6 输出 284 8.6.1 格式化输出 285 8.6.2 插入字符/行 286 8.6.3 删除字符/行 286 8.6.4 方框和直线 287 8.6.5 背景字符 287 8.7 输入 288 8.8 选项 289 8.8.1 输出选项 289 8.8.2 输入选项 290 8.8.3 终端属性 291 8.8.4 使用选项 291 8.9 更新终端 292 8.10 视频属性与颜色 293 8.11 光标和屏幕坐标 294 8.12 滚动 294 8.13 小键盘 295 8.14 软标签 295 8.15 杂项 295 8.16 低级访问 296 8.17 屏幕转储 296 8.18 Termcap模拟 296 8.19 Terminfo函数 296 8.20 调试函数 297 8.21 Terminfo权能 297 8.21.1 布尔型权能 297 8.21.2 数值型权能 298 8.21.3 字符串型权能 299 8.22 [N]Curses函数概述 306 第9章 I/O端口编程 307 9.1 鼠标编程 307 9.2 调制解调器编程 308 9.3 打印机编程 308 9.4 游戏杆编程 308 第10章 把应用程序移植到Linux上 309 10.1 介绍 309 10.2 信号处理 309 10.2.1 SVR4、BSD和POSIX.1下 的信号 310 10.2.2 Linux信号选项 310 10.2.3 Linux下的信号 310 10.2.4 Linux支持的信号 311 10.3 终端I/O 311 10.4 进程信息和控制 311 10.4.1 kvm过程 312 10.4.2 ptrace和/proc文件系统 312 10.4.3 Linux下的进程控制 312 10.5 可移植条件编译 313 10.6 补充说明 314 附录 以字母顺序排列的系统调用 315 第四部分 Linux内核概念系统结构 摘要 323 前言 324 第1章 系统结构 325 1.1 系统概述 325 1.2 内核的目标 325 1.3 内核结构的概述 325 1.4 支持多个开发人员 327 1.5 系统数据结构 328 1.5.1 任务列表 328 1.5.2 内存映射 328 1.5.3 索引节点 328 1.5.4 数据连接 329 第2章 子系统的系统结构 330 2.1 进程调度程序系统结构 330 2.1.1 目标 330 2.1.2 模块 330 2.1.3 数据表达 331 2.1.4 依赖性、数据流和控制流 331 2.2 内存管理程序系统结构 331 2.2.1 目标 331 2.2.2 模块 331 2.2.3 数据表示 331 2.2.4 数据流、控制流和依赖性 332 2.3 虚拟文件系统系统结构 333 2.3.1 目标 333 2.3.2 模块 333 2.3.3 数据表示 333 2.3.4 数据流、控制流和依赖性 334 2.4 网络接口系统结构 334 2.4.1 目标 334 2.4.2 模块 334 2.4.3 数据表示 335 2.4.4 数据流、控制流和依赖性 335 2.5 进程间通信系统结构 335 第3章 结论 336 附录A 术语定义 337 附录B 参考文献 338 第五部分 Linux内核具体系统结构 摘要 341 第1章 前言 342 1.1 目标 342 1.2 Linux介绍 342 1.3 软件系统结构的背景知识 342 1.4 方法与途径 343 1.5 适用本书的读者 344 1.6 本部分的章节安排 344 第2章 系统结构 345 第3章 子系统结构 346 3.1 进程调度程序 346 3.1.1 目标 346 3.1.2 外部接口 346 3.1.3 子系统描述 346 3.1.4 数据结构 347 3.1.5 子系统结构 348 3.1.6 子系统依赖性 348 3.2 内存管理程序 348 3.2.1 目标 348 3.2.2 外部接口 349 3.2.3 子系统描述 349 3.2.4 数据结构 350 3.2.5 子系统结构 350 3.2.6 子系统依赖性 351 3.3 虚拟文件系统 352 3.3.1 目标 352 3.3.2 外部接口 352 3.3.3 子系统描述 353 3.3.4 设备驱动程序 353 3.3.5 逻辑文件系统 354 3.3.6 模块 354 3.3.7 数据结构 355 3.3.8 子系统结构 355 3.3.9 子系统依赖性 355 3.4 进程间通信 355 3.4.1 目标 355 3.4.2 外部接口 357 3.4.3 子系统描述 357 3.4.4 数据结构 358 3.4.5 子系统结构 359 3.4.6 子系统依赖性 359 3.5 网络接口 360 3.5.1 目标 360 3.5.2 外部接口 361 3.5.3 子系统描述 361 3.5.4 数据结构 362 3.5.5 子系统结构 363 3.5.6 子系统依赖性 363 第4章 结论 365 附录A 术语定义 366 附录B 参考文献 368 第六部分 附 录 附录A Linux文档工程拷贝许可证 372 附录B GNU通用公共许可证 374

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值