当前位置:首页 » 编程软件 » linux下的shell编程

linux下的shell编程

发布时间: 2024-01-11 18:05:27

A. linux命令、编辑器与Shell编程的目录

第1篇 Linux命令
第1章 Linux简介与安装(教学视频:52分钟)2
1.1 Linux系统简介2
1.1.1 Linux能做什么2
1.1.2 Linux的主要发行版3
1.1.3 Linux系统的优势4
1.2 Linux的存储设备和目录结构5
1.2.1 Linux系统中的存储设备5
1.2.2 Linux系统中的目录结构7
1.3 虚拟化技术的应用8
1.3.1 虚拟化和VMware公司9
1.3.2 VMware Workstation简介10
1.3.3 VMware Workstation的网络连接方式11
1.3.4 VMware Workstation的使用技巧13
1.3.5 VMware ESX Server简介13
1.4 Linux安装过程14
1.4.1 安装前的准备工作14
1.4.2 创建虚拟机并使用光盘引导15
1.4.3 安装模式和光盘检测18
1.4.4 图形安装环境配置19
1.4.5 磁盘分区21
1.4.6 引导程序和网络配置23
1.4.7 设置时区和根用户密码25
1.4.8 定制软件包并开始安装26
1.4.9 第一次启动27
1.5 小结30
第2章 Linux系统入门(教学视频:109分钟)31
2.1 如何使用本书学习31
2.1.1 本书的知识结构和约定31
2.1.2 学习Linux系统的建议33
2.2 登录系统33
2.2.1 图形界面登录33
2.2.2 命令行登录35
2.2.3 SSH远程登录36
2.2.4 Telnet远程登录38
2.2.5 VNC远程登录38
2.2.6 SFTP登录39
2.3 关闭、重启系统41
2.3.1 关闭系统命令之shutdown41
2.3.2 关闭系统命令之poweroff41
2.3.3 挂起系统命令halt42
2.3.4 重启系统命令reboot42
2.3.5 切换系统运行级别命令init42
2.4 Linux命令基础及帮助43
2.4.1 Linux系统中的命令43
2.4.2 帮助之help命令和选项45
2.4.3 帮助之man手册46
2.4.4 帮助之info信息页48
2.5 系统与用户的交互程序Shell50
2.5.1 Shell分类50
2.5.2 更改默认Shell51
2.6 Bash中的命令基本操作54
2.6.1 命令行编辑功能54
2.6.2 绑定快捷键和命令55
2.6.3 命令行补全功能59
2.6.4 命令历史功能61
2.6.5 命令别名功能63
2.7 管道和输入/输出65
2.7.1 管道65
2.7.2 命令的输入/输出和错误66
2.7.3 重定向命令的输入/输出和错误66
2.8 小结69
第3章 常用命令(教学视频:115分钟)70
3.1 Linux基本命令70
3.1.1 切换工作目录命令cd70
3.1.2 查看当前路径命令pwd71
3.1.3 查看文件列表命令ls72
3.1.4 文件链接命令ln75
3.2 文件操作命令76
3.2.1 文件命名规则76
3.2.2 创建文件命令touch77
3.2.3 创建目录命令mkdir77
3.2.4 移动、重命名文件命令mv78
3.2.5 复制文件命令cp79
3.2.6 删除文件命令rm80
3.2.7 删除空目录命令rmdir81
3.2.8 查看文件类型命令file81
3.3 文本文件内容相关命令82
3.3.1 查看文本文件内容命令cat82
3.3.2 从文本尾查看文本内容命令tail83
3.3.3 从文本首行查看文本内容命令head84
3.3.4 分屏显示文本内容命令more和less85
3.3.5 文本内容比较命令diff87
3.3.6 文本统计命令wc89
3.4 日期时间命令89
3.4.1 查看日期时间命令date90
3.4.2 查看日历命令cal90
3.4.3 修改日期时间命令date和clock91
3.5 联线用户命令92
3.5.1 查看联线用户命令who、finger和w92
3.5.2 与联线用户通信的命令wall、write和mesg93
3.5.3 断开联线用户命令fuser94
3.6 切换用户命令94
3.6.1 临时切换用户命令su94
3.6.2 以root用户身份运行命令sudo95
3.7 定位和查找96
3.7.1 搜索命令 which96
3.7.2 文件搜索命令locate96
3.7.3 特殊文件搜索命令whereis97
3.7.4 关键字搜索命令apropos97
3.8 输入/输出相关命令98
3.8.1 回显命令echo98
3.8.2 接收用户输入命令read99
3.8.3 显示并保存文本命令tee102
3.8.4 邮件命令mail103
3.8.5 启动新Shell命令exec106
3.9 小结107
第4章 Linux命令中的特殊字符和正则表达式(教学视频:48分钟)108
4.1 命令中的特殊字符108
4.1.1 字符串引用符双引号和单引号108
4.1.2 命令引用符反引号110
4.1.3 变量引用和命令转换符美元符号111
4.1.4 反斜线屏蔽符111
4.2 文件名通配符111
4.2.1 单字符匹配元字符“?”112
4.2.2 多字符匹配元字符“*”112
4.2.3 字符范围匹配符“[]”113
4.2.4 排除范围匹配符“[!]”114
4.3 多条命令中的逻辑运算符和括号115
4.3.1 逻辑或“||”115
4.3.2 逻辑与“&&”116
4.3.3 括号116
4.4 命令中的正则表达式117
4.4.1 单字符匹配符“.”117
4.4.2 单字符或字符串重复匹配符“*”118
4.4.3 行首匹配符“^”118
4.4.4 行尾匹配符“$”119
4.4.5 反斜杠屏蔽符“”119
4.4.6 范围匹配符“[]”和排除范围匹配符“[^]”120
4.4.7 词首、词尾匹配符“<”和“>”120
4.4.8 重复次数匹配符“x{}”120
4.4.9 组合并使用正则表达式121
4.5 小结121
第5章 查找和筛选工具(教学视频:93分钟)123
5.1 查找文件工具find123
5.1.1 find的基本格式123
5.1.2 按文件名称查找125
5.1.3 按文件权限查找125
5.1.4 按文件类型查找126
5.1.5 按文件的时间戳记和大小查找126
5.1.6 按文件属主或属组查找127
5.1.7 find工具的其他参数128
5.1.8 使用exec和ok处理查找到的文件128
5.1.9 使用xargs命令处理查找到的文件129
5.1.10 find工具应用实例130
5.2 查找文本工具grep131
5.2.1 grep的基本格式131
5.2.2 使用grep查找文本132
5.2.3 行首、行尾匹配查找134
5.2.4 配合常用的正则表达式查找135
5.2.5 使用或、与多匹配模式查找136
5.2.6 grep工具应用实例137
5.3 流编辑器sed138
5.3.1 sed基本格式138
5.3.2 显示和删除行140
5.3.3 插入和修改文本142
5.3.4 替换文本和其他编辑指令145
5.3.5 处理文本中的控制字符148
5.3.6 分支结构149
5.4 格式化文本数据抽取工具awk152
5.4.1 awk命令基本格式152
5.4.2 正则表达、元字符、运算符和关系运算符153
5.4.3 在awk命令中使用变量156
5.4.4 在awk命令中使用流程控制159
5.4.5 awk命令中的函数162
5.5 转换和删除重复命令tr170
5.5.1 tr命令的基本格式170
5.5.2 字符转换171
5.5.3 删除字符172
5.6 合并和分割工具173
5.6.1 排序命令sort174
5.6.2 数据剪切命令cut179
5.6.3 数据粘贴命令paste181
5.6.4 数据连接命令join183
5.6.5 去除重复命令uniq186
5.6.6 分割文件命令split188
5.7 小结190
第6章 用户和文件权限管理(教学视频:73分钟)191
6.1 用户管理191
6.1.1 系统用户文件概述191
6.1.2 添加用户命令useradd193
6.1.3 设置用户密码命令passwd196
6.1.4 删除用户命令userdel197
6.1.5 用户管理命令usermod197
6.2 用户组管理199
6.2.1 用户组文件概述199
6.2.2 添加用户组命令groupadd201
6.2.3 删除用户组命令groupdel201
6.2.4 用户组管理202
6.3 基本权限及管理命令203
6.3.1 文件的属主和属组203
6.3.2 修改文件属主和属组命令chown、chgrp203
6.3.3 文件权限及表示方法205
6.3.4 文件权限管理命令chmod207
6.3.5 suid、sgid和sticky权限概述208
6.3.6 权限掩码命令umask211
6.4 POSIX ACL权限系统及其管理命令212
6.4.1 POSIX ACL权限系统概述213
6.4.2 ACL权限管理和查看命令setfacl、getfacl213
6.4.3 ACL权限管理214
6.5 小结217
第7章 磁盘和文件系统管理(教学视频:70分钟)218
7.1 磁盘及分区管理218
7.1.1 查看磁盘设备列表命令fdisk218
7.1.2 查看磁盘设备命令hdparm220
7.1.3 磁盘分区工具fdisk221
7.1.4 利用fdisk工具对磁盘分区222
7.2 文件系统管理225
7.2.1 Linux系统支持的文件系统225
7.2.2 创建文件系统命令mkfs226
7.2.3 查看和修改卷标命令e2label227
7.2.4 挂载文件系统228
7.2.5 卸载文件系统命令umount231
7.2.6 利用fstab自动挂载文件系统232
7.3 RAID设备233
7.3.1 磁盘阵列的种类233
7.3.2 磁盘阵列级别234
7.3.3 创建组成阵列的磁盘分区236
7.3.4 创建磁盘阵列237
7.3.5 为阵列添加热备盘239
7.3.6 使用热备盘替换损坏磁盘239
7.3.7 扩展阵列240
7.4 LVM逻辑卷管理241
7.4.1 LVM的基本概念241
7.4.2 创建物理卷243
7.4.3 创建卷组244
7.4.4 创建逻辑卷245
7.4.5 添加物理卷247
7.4.6 扩充逻辑卷248
7.4.7 减小逻辑卷249
7.4.8 移动数据并移除物理卷250
7.4.9 逻辑卷快照252
7.5 磁盘配额管理253
7.5.1 为磁盘配额提供支持253
7.5.2 检查磁盘配额命令quotacheck254
7.5.3 查看磁盘使用情况命令repquota255
7.5.4 建立磁盘配额命令edquota255
7.5.5 开启磁盘配额命令quotaon257
7.5.6 关闭磁盘配额命令quotaoff258
7.5.7 管理磁盘配额258
7.6 文件系统维护基础259
7.6.1 查看文件系统使用情况命令df259
7.6.2 追踪大文件命令260
7.6.3 修复文件系统命令fsck261
7.7 小结264
第8章 Linux系统管理(教学视频:70分钟)265
8.1 系统服务管理265
8.1.1 查看系统服务265
8.1.2 设置服务自启动状态267
8.1.3 添加删除系统服务269
8.1.4 启动和关闭服务命令service270
8.2 进程管理命令271
8.2.1 查看进程命令ps271
8.2.2 进程树274
8.2.3 实时显示进程命令top274
8.2.4 将任务放在后台执行277
8.2.5 查看后台任务命令jobs277
8.2.6 后台任务调至前台命令fg278
8.2.7 终止进程命令kill278
8.2.8 查看进程优先级281
8.2.9 指定进程运行优先级命令nice282
8.2.10 改变进程优先级命令renice283
8.3 计划任务命令crontab、at284
8.3.1 为计划任务提供支持284
8.3.2 cron计划任务格式285
8.3.3 添加计划任务命令crontab286
8.3.4 备份及恢复计划任务288
8.3.5 用户计划任务288
8.3.6 系统计划任务289
8.3.7 使用at执行一次性计划任务289
8.4 日志管理292
8.4.1 syslogd守护进程及其配置文本292
8.4.2 日志消息的格式295
8.4.3 记录日志消息命令logger295
8.4.4 日志轮循296
8.4.5 监视系统日志297
8.5 小结299
第9章 数据备份和应用程序管理(教学视频:74分钟)301
9.1 数据备份基础301
9.1.1 数据备份概述301
9.1.2 备份数据存放的介质302
9.1.3 备份类型302
9.1.4 备份时间选择304
9.2 tar备份工具304
9.2.1 tar命令的基本格式304
9.2.2 tar归档和备份文件305
9.2.3 查看归档文件中的文件列表306
9.2.4 从归档文件中还原文件306
9.3 cpio备份命令307
9.3.1 cpio命令的基本格式308
9.3.2 使用cpio归档文件308
9.3.3 查看归档文件中的文件列表309
9.3.4 恢复cpio归档文件310
9.4 压缩工具和整盘备份工具dd311
9.4.1 使用gzip压缩文件311
9.4.2 使用bzip2压缩文件313
9.4.3 整盘备份命令dd314
9.5 RPM包管理命令rpm317
9.5.1 RPM包管理器简介317
9.5.2 rpm命令基本格式318
9.5.3 使用rpm命令查询软件包319
9.5.4 使用rpm命令安装软件包321
9.5.5 使用rpm命令卸载软件包323
9.5.6 使用rpm命令升级软件包324
9.6 编译安装相关命令和工具324
9.6.1 安装编译环境324
9.6.2 获取软件工具wget、links325
9.6.3 编译前的配置327
9.6.4 编译软件命令make329
9.6.5 安装命令make install329
9.6.6 运行及环境配置330
9.6.7 卸载软件命令make uninstall332
9.7 利用yum工具安装应用程序332
9.7.1 yum简介333
9.7.2 配置yum333
9.7.3 查询源上的软件包336
9.7.4 利用yum安装软件包337
9.7.5 利用yum卸载软件包339
9.7.6 安装、卸载软件包组339
9.8 小结341
第10章 网络管理(教学视频:81分钟)343
10.1 网络接口配置命令343
10.1.1 查看网络接口信息343
10.1.2 配置网络接口347
10.1.3 重新启用网络接口351
10.1.4 配置DNS服务器地址352
10.2 路由命令route354
10.2.1 查看系统中的路由表355
10.2.2 添加默认路由356
10.2.3 添加路由条目357
10.3 主机名称命令hostname360
10.3.1 查看主机名称360
10.3.2 修改主机名称361
10.4 设置网络冗余363
10.4.1 bonding简介364
10.4.2 bonding的模式365
10.4.3 设置网络接口366
10.4.4 加载模块生成新的网络连接367
10.4.5 验证设置368
10.5 网络工具370
10.5.1 测试连通命令ping370
10.5.2 网络路径测试命令traceroute374
10.5.3 查看网络状态命令netstat374
10.5.4 域名解析工具dig和nslookup377
10.5.5 排除网络故障380
10.6 小结382
第2篇 文本编辑器
第11章 Vi和Vim文本编辑器(教学视频:37分钟)386
11.1 文本编辑器概述386
11.1.1 文本编辑器的发展及分类386
11.1.2 Linux系统中的文本编辑器387
11.2 认识Vi和Vim编辑器388
11.2.1 启动Vim编辑器388
11.2.2 Vim编辑器帮助390
11.2.3 退出Vim编辑器391
11.2.4 Vim编辑器的模式391
11.2.5 Vim编辑器的工作界面392
11.3 向Vim编辑器迈出第1步393
11.3.1 读取文件393
11.3.2 保存文件394
11.3.3 进入插入模式并插入文本394
11.3.4 移动光标395
11.3.5 删除文本396
11.3.6 撤销和恢复396
11.4 快速移动光标396
11.4.1 按单词移动光标396
11.4.2 快速移动光标至行首和行尾397
11.4.3 移动光标至指定的行397
11.4.4 滚动屏幕398
11.4.5 使用鼠标移动光标398
11.4.6 其他移动光标的技巧399
11.5 Vim编辑器的查找和替换功能400
11.5.1 简单的查找功能401
11.5.2 反向查找401
11.5.3 查找时忽略大小写402
11.5.4 高亮显示查找结果403
11.5.5 增量查找403
11.5.6 简单的查找替换功能404
11.5.7 区域性查找替换405
11.5.8 谨慎的查找替换405
11.6 Vim编辑器中的窗口操作406
11.6.1 分割窗口406
11.6.2 关闭窗口409
11.6.3 控制窗口大小409
11.6.4 窗口中的操作410
11.6.5 移动窗口410
11.7 Vim编辑器的高级技巧411
11.7.1 复制和粘贴411
11.7.2 剪切和粘贴411
11.7.3 编辑多个文件411
11.7.4 Visual模式413
11.7.5 在Vim编辑器中执行Shell命令415
11.8 定制Vim编辑器及灾难恢复415
11.8.1 定制文件vimrc416
11.8.2 定制Vim编辑器416
11.8.3 灾难恢复417
11.9 小结418
第12章 Emacs编辑器(教学视频:28分钟)419
12.1 Emacs编辑器概述与入门419
12.1.1 Emacs编辑器概述419
12.1.2 启动Emacs编辑器420
12.1.3 Emacs编辑器启动界面421
12.1.4 退出Emacs编辑器423
12.2 Emacs基本操作424
12.2.1 使用Emacs菜单栏424
12.2.2 打开新文件425
12.2.3 保存文件426
12.2.4 简单编辑操作426
12.3 快速移动光标427
12.3.1 按字符移动光标427
12.3.2 按句子移动光标428
12.3.3 按单词移动光标428
12.3.4 按段落移动光标428
12.3.5 滚动屏幕428
12.3.6 其他移动光标的技巧429
12.4 Emacs编辑器的常用功能430
12.4.1 撤销与恢复430
12.4.2 搜索功能431
12.4.3 查找并替换432
12.4.4 复制、剪切和粘贴433
12.5 Emacs编辑器的高级技巧434
12.5.1 删除环435
12.5.2 编辑文本区域436
12.5.3 书签功能436
12.5.4 灾难恢复440
12.5.5 使用多窗口441
12.6 目录模式444
12.6.1 查看文件445
12.6.2 删除、复制、重命名文件446
12.6.3 操作压缩文件447
12.6.4 其他文件操作447
12.7 Emacs编辑器的其他功能448
12.7.1 在Emacs编辑器中执行Shell命令449
12.7.2 发送电子邮件450
12.7.3 阅读电子邮件450
12.8 小结453
第13章 Eclipse编辑器(教学视频:29分钟)454
13.1 Eclipse开发平台概述与安装454
13.1.1 Eclipse平台概述454
13.1.2 Eclipse平台安装前的准备455
13.1.3 安装Eclipse平台457
13.2 Eclipse界面入门459
13.2.1 第1次启动459
13.2.2 Eclipse界面介绍460
13.2.3 操作窗口461
13.3 使用Eclipse开发Java程序463
13.3.1 建立编程项目463
13.3.2 建立Java类464
13.3.3 输入编程内容465
13.3.4 运行Java程序467
13.3.5 调试程序468
13.4 小结470
第14章 常用的文本编辑器(教学视频:28分钟)471
14.1 Nano编辑器471
14.1.1 Nano编辑器简介471
14.1.2 安装Nano编辑器471
14.1.3 Nano启动及工作界面472
14.1.4 快速移动光标474
14.1.5 复制粘贴文本474
14.1.6 查找和替换475
14.2 Gedit文本编辑器477
14.2.1 Gedit文本编辑器概述477
14.2.2 Gedit工作界面介绍478
14.2.3 快速移动光标479
14.2.4 显示行号479
14.2.5 语法高亮480
14.2.6 拼写检查480
14.2.7 查找和替换482
14.3 Kate编辑器482
14.3.1 Kate编辑器概述483
14.3.2 Kate基本界面484
14.3.3 快速移动光标485
14.3.4 查找和替换485
14.3.5 拼写检查487
14.3.6 语法高亮488
14.3.7 脚本编程环境488
14.4 小结490
第3篇 Shell编程
第15章 Shell脚本编程基础、变量(教学视频:56分钟)492
15.1 Bash脚本编程基础492
15.1.1 Shell脚本概述492
15.1.2 Shell脚本的基本内容493
15.1.3 脚本的运行方式495
15.1.4 接收用户输入496
15.1.5 向脚本传递参数497
15.2 Tcsh脚本编程498
15.2.1 输出字符串Hello的示例脚本498
15.2.2 Tcsh与Bash脚本的区别499
15.3 Shell中的变量499
15.3.1 保存系统运行情况的环境变量500
15.3.2 传递参数的位置变量503
15.3.3 系统预先定义的变量504
15.3.4 用户自定义变量505
15.4 Shell中的数组509
15.4.1 数组的定义509
15.4.2 数组的使用510
15.4.3 清除数组512
15.5 小结512
第16章 系统脚本和登录环境(教学视频:32分钟)513
16.1 系统启动过程513
16.1.1 Linux系统的启动步骤513
16.1.2 引导装载程序GRUB514
16.2 系统初始化过程518
16.2.1 INIT进程的配置文件518
16.2.2 设置系统默认运行级别519
16.2.3 初始化系统脚本520
16.2.4 启动系统服务520
16.2.5 重启快捷键522
16.2.6 UPS选项522
16.2.7 运行终端523
16.3 系统初始化过程中使用的脚本523
16.3.1 系统初始化脚本524
16.3.2 rc.local脚本525
16.4 用户环境526
16.4.1 全局用户配置文件/etc/profile526
16.4.2 个人用户配置文件.bash_profile527
16.4.3 定制用户环境529
16.5 小结529
第17章 函数和脚本参数(教学视频:22分钟)531
17.1 Shell中的函数531
17.1.1 在脚本中定义函数531
17.1.2 在脚本中使用函数532
17.1.3 向函数传递参数和返回值533
17.1.4 返回函数执行状态535
17.2 在Shell中使用函数文件536
17.2.1 函数文件的编写536
17.2.2 函数文件的调用537
17.3 两个示例脚本538
17.3.1 示例1:检查包的依赖性538
17.3.2 示例2:监控文件系统541
17.4 向脚本传递参数545
17.4.1 使用shift命令处理参数545
17.4.2 使用shift命令处理选项参数548
17.5 小结549
第18章 控制Shell脚本执行顺序(教学视频:29分钟)550
18.1 条件测试和捕获信号550
18.1.1 退出状态550
18.1.2 文件测试553
18.1.3 变量测试558
18.1.4 字符串和数值测试559
18.1.5 逻辑操作符561
18.1.6 捕获系统信号562
18.2 条件判断语句if564
18.2.1 简单if语句的使用564
18.2.2 if else语句的使用566
18.2.3 if elif语句的使用569
18.2.4 多if语句嵌套572
18.3 多条件判断语句case573
18.3.1 多条件判断语句case的基本格式573
18.3.2 利用case语句处理选项参数574
18.3.3 利用case语句处理用户输入577
18.4 步进循环语句for578
18.4.1 for语句的基本格式578
18.4.2 利用for语句处理数组579
18.4.3 一个设置防火墙的例子580
18.5 循环语句until581
18.5.1 until语句的基本格式581
18.5.2 利用until语句监控文件系统状态582
18.6 while循环语句583
18.6.1 while语句的基本格式583
18.6.2 while语句与until语句的区别584
18.6.3 利用while语句监控系统网络状态585
18.7 利用break和continue控制循环586
18.7.1 使用break语句控制循环586
18.7.2 使用continue语句控制循环588
18.8 小结589
第19章 Shell编程技巧和应用实例(教学视频:56分钟)591
19.1 运行级别脚本591
19.1.1 运行级别脚本的结构591
19.1.2 编写运行级别脚本593
19.1.3 添加和管理运行级别脚本595
19.2 怎样写好Shell脚本596
19.2.1 一般性原则596
19.2.2 良好的编程习惯596
19.2.3 Shell脚本的安全性597
19.3 调试脚本599
19.3.1 排除错误599
19.3.2 脚本调试601
19.4 Shell编程实例——自动备份文件脚本603
19.4.1 需求和设计思路603
19.4.2 完全备份模块604
19.4.3 差异备份模块605
19.4.4 远程备份模块606
19.4.5 主体和日志功能607
19.4.6 自动运行备份脚本610
19.5 Shell编程实例——防火墙快速配置脚本610
19.5.1 设置防火墙状态610
19.5.2 添加防火墙规则612
19.5.3 保存防火墙规则616
19.6 快速初始化系统脚本617
19.6.1 初始化系统网络617
19.6.2 更改SSH服务的端口625
19.6.3 设置SELinux状态626
19.6.4 关闭不必要的系统服务626
19.7 服务监控和主备切换脚本627
19.7.1 测试主服务器状态627
19.7.2 切换备用服务器状态628
19.8 小结629

B. linux下的 shell到底是什么啊

在计算机科学中,是指“提供用户使用界面”的软件,通常指的是命令行界面的解析器。一般来说,shell是指操作系统中,提供访问内核所提供之服务的程序。

C. linux下的shell是什么

什么是shell
shell是用户和Linux
操作系统
之间的
接口
。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的
特性

什么是shell
Linux系统的shell作为操作系统的
外壳
,为用户提供使用操作系统的接口。它是
命令语言
、命令
解释程序

程序设计语言
的统称。
shell是用户和
Linux内核
之间的接口
程序
,如果把Linux内核想象成一个
球体
的中心,shell就是围绕
内核
的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言
解释器
,它拥有自己内建的shell命令集,shell也能被系统中其他
应用程序
所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell是一种具备
特殊功能
的程序,
它是介于使用者和
UNIX/linux
操作系统之核心
程序(kernel)间的一个接口。为什么我们说
shell
是一种介于系统核心程序与使用者
间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个
系统资源
的管理者与分
配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因
为错误的操作而造成系统的伤害?众所周知,对
计算机
下命令得透过命令(command)

是程序(program);程序有编译器(compiler)将程序转为
二进制代码
,可是命令呢?
其实shell
也是一支程序,它由
输入设备
读取命令,再将其转为计算机可以了解的机械码,
然后执行它。
各种操作系统都有它自己的
shell,以
DOS
为例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解译程序可以取代标准的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外还有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux将
shell
独立于核心程序之外,
使得它就如同一般的应用
程序,
可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
有一些命令,比如改变工作目录命令cd,是包含在shell
内部
的。还有一些命令,例如
拷贝
命令cp和移动命令rm,是存在于
文件系统
中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是
内部命令
,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的
实用程序
,如ls和rm,也可以是购买的商业程序,如xv,或者是
自由软件
,如emacs)。然后shell在搜索
路径
里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个
可执行文件
,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为
系统调用
并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在
高级语言
中能见到的程序
元素
,如
函数

变量

数组
和程序控制结构。shell
编程语言
简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
一旦出现了shell提示符,就可以键入
命令名称
及命令所需要的
参数
。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从
键盘
上按ctrl+c发出中断
信号
来中断它(在正常结束之前,中止它的执行)。
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。

D. linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令

之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。
bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。
1、命令行参数
向shell脚本传递数据的最基本方式是使用命令行参数。
1)读取参数
读取输入的参数的变量为位置参数,位置参数通过标准数字表示,
其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。
shell脚本自动将命令行参数赋值给各个位置变量。
同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)
当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。
2)读取程序名称
传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。
使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。
3)测试脚本
当脚本认为应该包含参数,却实际上没有数据时,就会出错。
好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。
例子:if [ –n “$1” ] then .. else .. fi
2、特殊的参数变量
用于跟踪命令行参数
1)参数计数
使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可测试参数个数
可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)
2)获取所有数据
变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。
变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数
3、移位
shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)
在不清楚参数数目情况下,这是一个迭代参数的好办法。
可以为shift提供一个参数,来实现多位移变化。
4、处理选项
选项是由破折号引导的单个字母,用于更改命令的行为。
1,找出选项
1)处理简单选项
可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。
2)从参数中分离选项
同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。
3)处理带值的选项
选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:
2,使用getopt命令
getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析
1)命令格式
getopt可以接受任意形式的选项和参数列表,并自动将它们转换为适当的格式。
命令格式为: getopt options optstring parameters
选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。
2)脚本中使用getopt
需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。
需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`
但是getopt命令不能很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:
3)更高级的getopts命令
getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。
非常适宜于在循环中解析所有命令行参数
格式为: getopts optstring variable
$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。
注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。
好的特性:
1)可以在参数值中包含空格
2)选项字母和参数值中间可以没有空格
3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号
5、标准化选项
有一些字母选项具有标准含义。最好按照标准含义定义选项意义
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、获取用户输入
当需要在执行过程中获得执行脚本人员的输入,使用read命令
1)基本读取
read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。
-p 允许在read命令行中直接指定一个提示。
可以指定多个变量,也可以不指定将放置在reply环境变量中)
2)计时
使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。
使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入
3)默读
使用-s使输入不显示在终端例如输入密码)
4)读取文件
最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

热点内容
厨房需要配置什么喷淋头 发布:2024-11-16 20:39:02 浏览:297
酒瓶解压 发布:2024-11-16 20:29:20 浏览:729
视频怎样上传到手机 发布:2024-11-16 20:26:30 浏览:258
怎么把ppt文件压缩 发布:2024-11-16 20:22:30 浏览:685
linux大内存 发布:2024-11-16 20:22:28 浏览:950
屏蔽迅雷上传 发布:2024-11-16 19:49:17 浏览:599
java怎么定义方法 发布:2024-11-16 19:48:15 浏览:143
我的世界国际版为什么连接不到服务器 发布:2024-11-16 19:44:18 浏览:854
购物导航源码 发布:2024-11-16 19:35:48 浏览:145
打账号密码是什么 发布:2024-11-16 19:26:07 浏览:290