linux shell编辑器,shell编辑器

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追踪大文件命令du260

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

如何使用Linux shell编程来进行系统管理和网络管理

从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修功课之一。

Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。在本文中,我们关注的重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我们可以看到#!/bin/sh,它同样也可以改为#!/bin/bash。

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

#!/bin/sh

#comments

Your commands go here

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。

编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。执行脚本的时候,要先将脚本文件的属性改为可执行的:

chmod+x filename.sh

执行脚本的方法是:

./filename.sh

下面我们从经典的“hello world”入手,看一看最简单的Shell脚本的模样。

#!/bin/sh

#print hello world in the console window

a="hello world"

echo$a

Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型。新的变量会在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进程都不能访问本地变量。这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。变量赋值的方式是:

variable_name= variable_value

如果对一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加$,$variable_name可以在引号中使用,这一点和其他高级语言是明显不同的。如果出现混淆的情况,可以使用花括号来区分,例如:

echo"Hi,$as"

就不会输出“Hi, hello worlds”,而是输出“Hi,”。这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是:

echo"Hi,${a}s"

单引号中的变量不会进行变量替换操作。

关于变量,还需要知道几个与其相关的Linux命令。

env用于显示用户环境区中的变量及其取值;set用于显示本地数据区和用户环境区中的变量及其取值;unset用于删除指定变量当前的取值,该值将被指定为NULL;export命令用于将本地数据区中的变量转移到用户环境区。

下面我们来看一个更复杂的例子,结合这个例子,我们来讲述Shell Script的语法。

1#!/bin/bash

2# we have less than 3 arguments. Print the help text:

3 if [$#-lt 3 ]; then

4 cat<<HELP

5 ren-- renames a number of files using sed regular expressions

6

7 USAGE: ren'regexp''replacement' files

8 EXAMPLE: rename all*.HTM files in*.html:

9 ren'HTM$''html'*.HTM

10

11 HELP

12 exit 0

13 fi

14 OLD="$1"

15 NEW="$2"

16# The shift command removes one argument from the list of

17# command line arguments.

18 shift

19 shift

20#$* contains now all the files:

21 for file in$*; do

22 if [-f"$file" ]; then

23 newfile=`echo"$file"| sed"s/${OLD}/${NEW}/g"`

24 if [-f"$newfile" ]; then

25 echo"ERROR:$newfile exists already"

26 else

27 echo"renaming$file to$newfile"

28 mv"$file""$newfile"

29 fi

30 fi

31 done

我们从头来看,前面两行上一个例子中已经解释过了,从第三行开始,有新的内容。if语句和其他编程语言相似,都是流程控制语句。它的语法是:

if…; then

elif…; then

else

fi

与其他语言不同,Shell Script中if语句的条件部分要以分号来分隔。第三行中的[]表示条件测试,常用的条件测试有下面几种:

[-f"$file" ]判断$file是否是一个文件

[$a-lt 3 ]判断$a的值是否小于3,同样-gt和-le分别表示大于或小于等于

[-x"$file" ]判断$file是否存在且有可执行权限,同样-r测试文件可读性

[-n"$a" ]判断变量$a是否有值,测试空串用-z

["$a"="$b" ]判断$a和$b的取值是否相等

[ cond1-a cond2 ]判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立

要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就会出错。

$#表示包括$0在内的命令行参数的个数。在Shell中,脚本名称本身是$0,剩下的依次是$0、$1、$2…、${10}、${11},等等。$*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表。

现在我们明白第三行的含义是如果脚本文件的参数少于三个,则执行if和fi语句之间的内容。然后,从第四行到第十一行之间的内容在Shell Script编程中被称为Here文档,Here文档用于将多行文本传递给某一命令。Here文档的格式是以<<开始,后跟一个字符串,在 Here文档结束的时候,这个字符串同样也要出现,表示文档结束。在本例中,Here文档被输出给cat命令,也即将文档内容打印在屏幕上,起到显示帮助信息的作用。

第十二行的exit是Linux的命令,表示退出当前进程。在Shell脚本中可以使用所有的Linux命令,利用上面的cat和exit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本的长度。

十四、十五两句是赋值语句,分别将第一和第二参数赋值给变量OLD和NEW。紧接下来的两句是注释,注释下面的两条shift的作用是将参数列表中的第一个和第二个参数删除,后面的参数依次变为新的第一和第二参数,注意参数列表原本也不包括$0。

然后,自二十一行到三十一行是一个循环语句。Shell Script中的循环有下面几种格式:

while [ cond1 ]&&{||} [ cond2 ]…; do

done

for var in…; do

done

for(( cond1; cond2; cond3)) do

done

until [ cond1 ]&&{||} [ cond2 ]…; do

done

在上面这些循环中,也可以使用类似C语言中的break和continue语句中断当前的循环操作。第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。sed基本上可以看成一个查找替换程序,从标准输入,例如管道读入文本,并将结果输出到标准输出,sed使用正则表达式进行搜索。在第二十三行中,backtick(`)的作用是取出两个backtick之间的命令输出结果,在这里,也就是将结果取出赋给变量 newfile。此后,判断newfile是否已经存在,否则就把file改成newfile。这样我们就明白这个脚本的作用了,Shell Script编写的其他脚本与此相似,只不过是语法和用法稍有不同而已。

通过这个例子我们明白了Shell Script的编写规则,但还有几件事情需要讲述一下。

第一个,除了if语句之外,Shell Script中也有类似C语言中多分支结构的case语句,它的语法是:

case var in

pattern 1)

…;;

pattern 2)

…;;

*)

…;;

esac

我们再就下面一个例子,看看case语句的用法。

while getopts vc: OPTION

do

case$OPTION in

c) COPIES=$OPTARG

ehco"$COPIES";;

v) echo"suyang";;

\?) exit 1;;

esac

done

上面的getopts类似于C语言提供的函数getopts,在Shell Script中,getopts经常和while语句联合起来使用。getopts的语法如下:

getopts option_string variable

option_string中包含一串单字符选项,若getopts在命令行参数中发现了连字符,那么它会将连字符之后的字符与option_string进行比较,若匹配成功,则把变量variable的值设为该选项,若无匹配,则把变量的值设为?。有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号后,会读取该值,然后将该值放入特殊变量OPTARG中。这个命令比较复杂,如有需要,读者可以详细参阅Shell编写的相关资料。

上面这个循环的作用就是依次取出脚本名称后面的选项,进行处理,如果输入了非法选项,则进入"?指定的部分,退出脚本程序。

第二个,Bash提供了一种用于交互式应用的扩展select,用户可以从一组不同的值中进行选择。其语法如下:

select var in…; do

break;

done

例如,下面这段程序的输出是:

#!/bin/bash

echo"Your choice?"

select var in"a""b""c"; do

break

done

echo$var

----------------------------

Your choice?

1) a

2) b

3) c

第三,Shell Script中也可以使用自定义的函数,其语法形式如下:

functionname()

{

}

例如我们可以把上面第二个例子中第四到第十二行放入一个名为help函数体内,以后每次调用的时候直接写help即可。函数中处理函数调用参数的方法是,直接用上面讲过的$1、$2来分别表示第一、第二个参数,用$*表示参数列表。

第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。

sh?x filename.sh

这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

linux的文本编辑器有哪些linux的文本编辑器

键盘文字编辑器哪个好用?

1.VisualStudioCode

VisualStudioCode(简称VSCode)是由微软研发的一款免费的、轻量级的Web集成开发环境,且开源的跨平台文本(代码)编辑器,能运行在Linux、Mac、Windows系统上。在智能提示变量类型,函数定义,模块方面继承了visiostudio的优秀传统,在断点调试上也有不错的表现。

推荐指数:★★★★★

下载地址:VisualStudioCode

最新版本:1.32

VSCode是微软2017年推出的一个轻量但功能强大的源代码编辑器,最新版本是1.32,而且可用于多平台(微软现在对开源的态度还是不错的)。它内置了对JavaScript,TypeScript和Node.js的支持并且具有丰富的其它语言和扩展的支持,功能超级强大。

我是主搞dotnet的同时兼Java,VS可以毫不夸张的说是最好用的一款IDE,因此这个界面风格和使用方式很喜欢,而且提供强大的扩展,几乎在简单的代码管理时不用打开VS了;版本更新很及时,功能丰富且强大。而且官网提供了丰富的说明文档和视频等支持。

智能感知功能

VSCodeIntelliSense功能由语言服务提供支持。如果语言服务知道可能的完成,则会在您键入时弹出IntelliSense建议。如果继续键入字符,则会过滤成员列表(变量,方法等),以仅包含包含键入字符的成员。按Tab或Enter将插入所选成员。

VSCode的智能感知提供了非常有用的语法高亮器,同时为变量类型,方法定义和模块引入提供了自动补全功能。而且还可以在设置中(settings.json)自定义IntelliSense。我们可以通过键入Ctrl+Space或键入触发器字符在编辑器窗口中触发IntelliSense。

VSCode的智能感知提供JavaScript,TypeScript,JSON,HTML,CSS,SCSS等的支持。VSCode支持任何编程语言的基于单词的完成,也可以通过安装语言扩展来配置为具有更丰富的IntelliSense。

断点调试

代码调试是程序开发中一个必不可少的功能,能够快速帮助我们直观的获取信息。VSCode具有对Node.js运行时的内置调试支持,可以调试JavaScript,TypeScript以及任何其他转换为JavaScript的语言。对于调试其他语言和运行时环境,可以安装Debuggers扩展或者安装其他调试器来辅助完成。

版本管理

VisualStudioCode集成了源代码控制,并包含了内置的Git支持。其他源代码控制提供程序可通过VSCodeMarketplace上的扩展获得。

2.Notepad++

Notepad++是一款非常有特色的编辑器,软件小巧高效,支持27种编程语言,通吃C,C++,Java,C#,XML,HTML,PHP,JS等。是开源软件,可以免费使用,同时也支持各类流行的计算机编程语言。编辑器可以运行在微软的windows系统环境下,它的使用是受GPL许可证保护的,支持的语言:C、C++、Java、C#、XML、HTML、PHP、Javascript。

推荐指数:★★★★☆

下载地址:Notepad++

最新版本:7.6.3

Notepad++也是一款非常小巧好用而且功能强大的编辑器,而且开源免费。支持很多种编程语言,对应相关的编程的时候可以进行相互的转换,很方便。只需要在“菜单栏”>“语言”就可以选择自己需要的编程语言。同时也支持语法高亮,代码折叠、自动补全以及宏等功能,可定制性也非常强大。

Notepad++同样支持代码高亮、和自动提示补全功能,不同的语言需要根据自己使用的语言在菜单栏选择,稍显麻烦,Notepad++的代码折叠功能也很好用,总的来说是一款不错的编辑器,但是在易用性上来说比VSCODE还是有不小的距离。

3.Notepad2

Notepad2是一个小巧、快速的替代微软记事本的软件,界面华丽,功能强大,免安装。我实在找不出微软的记事本还能留下来的理由。自定义语法高亮,支持HTML,XML,CSS,JavaScript,VBScript,ASP,PHP,CSS,Perl/CGI,C/C++,C#,Java,VB,Pascal,Assembler,SQL,Python,NSIS,INI,REG,INF,BAT,DIFF,Ruby等众多文件。

推荐指数:★★★☆☆

下载地址:Notepad2

最新版本:

Notepad2更像是系统自带记事本的增强版,他也是一个相当优秀的轻量级文本编辑器,软件开源,具有很多特色功能,具有显示行号、内建大部分主流程序语法的高亮度显示、改变背景颜色、支持Unicode与UTF-8和行号显示等,如果你想找一个记事本的替代方案,那么Notepad2是个不错的选择。

4.UltraEdit

UltraEdit是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII码,完全可以取代记事本(如果电脑配置足够强大),内建英文单字检查、C++及VB指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。

推荐指数:★★★★☆

下载地址:UltraEdit

最新版本:v25.20

UltraEdit是一个文本、HTML和十六进制编辑器,同时也是高级PHP、Perl、Java和JavaScript程序编辑器,最新版本23.2。同样支持代码高亮、代码折叠。可以对基于磁盘的文本编辑和大文件处理-支持超过4GB的文件,即使是数兆字节的文件也只占用极少的内存。同时内置FTP客户端以访问FTP服务器,可设置多个账户,并自动登录和保存。缺点就是收费的,价格有点贵。

自定义主题和布局

UltraEdit支持用户自定义主题和布局,可以通过修改主题或从头开始创建新主题与其他用户分享。

集成的FTP,SSH和Telnet

无论你是需要对服务器上的文件进行快速编辑还是上传大量代码库,UltraEdit的集成FTP功能和SSH/Telnet都可以轻松处理远程文件,并通过单个功能强大的应用程序与服务器进行交互。

HTML/Markdown实时预览

UltraEdit可以在编辑时动态查看呈现的HTML或Markdown更改。双击预览中的元素以跳转到源中的定义。还可以使用GithubFlavoredMarkdown(GFM)代码突出显示和兼容性。

列模式

当水平编辑不够好时,可以使用列模式。使用列模式可以在文档中的任何位置沿Y轴直观地进行编辑。

5.VIM

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim普遍被推崇为类Vi编辑器中最好的一个。

推荐指数:★★★★☆

下载地址:VIM

最新版本:8.1

VIM广泛使用于UNIX或者LINUX系统中,他的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘流的各种巧妙组合操作,能够给工作带来极为大幅的效率提升,但是需要记住很多复杂的快捷键,另外你的脑和手得能协调且跟得上。

原来我们这里外聘的一位从日本回来的顶尖Coder就是只用VIM,快捷键用的飞快。

6.Emacs

EMACS,即EditorMACroS(编辑器宏)的缩写,最初由RichardStallman于1975年在MIT协同GuySteele共同完成。这一创意的灵感来源于TECMAC和TMACS,它们是由GuySteele、DaveMoon、RichardGreenblatt、CharlesFrankston等人编写的宏文本编辑器。

推荐指数:★★★★☆

下载地址:Emacs

最新版本:26.1

Emacs和VIM类似,具有内置的宏功能以及强大的键盘命令,他能做的事情非常多,功能非常强大,能够集合整个开发环境并调试程序。Emacs支持对多种文字的文本编辑、跨平台,是深受Coder喜欢的一款编辑器。有多个发行版,其中最流行的是GNUEmacs和XEmacs,它们是跨平台、完全免费并且开源。

Emacs在我们这里用苹果电脑的基本上都是用的这一款编辑器,但是在我的劝说下也有不少转移到VSCode了。

7.SublimeText

SublimeText是一个代码编辑器(SublimeText2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器。SublimeText是由程序员JonSkinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。

推荐指数:★★★★☆

下载地址:SublimeText

最新版本:3.1.1

SublimeText具有漂亮的用户界面和强大的功能,支持多种编程语言的语法高亮、拥有优秀的代码自动完成功能。还拥有代码片段的功能,可以将常用的代码片段保存起来,在需要时随时调用。支持VIM模式,可以使用Vim模式下的多数命令;同时具有良好的扩展能力和完全开放的用户自定义配置,功能丰富的快捷命令等。

SublimeText同样支持丰富的插件扩展,例如:MarkDownEditing、SublimeREPL、Javascript-API-Completions、还有比较有意思能记录你Code时间的WakaTime等等。

8.EditPlus

EditPlus是一款小巧但是功能强大的可处理文本、HTML和程序语言的Windows编辑器,你甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。拥有无限制的撤消与重做、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴板的功能,同步于剪贴板可自动粘贴进EditPlus的窗口中省去粘贴的步骤。

推荐指数:★★★☆☆

下载地址:EditPlus

最新版本:5.1.2066

EditPlus和notepad++类似,能够提供文本、HTML以及其他程序语言编辑的功能;界面也相当的简便快捷,支持多标签,可以轻松编辑多个文档。editplus原生支持FTP,而且连接很简单,可视化做的也很人性化。

linux操作系统组成及应用?

Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

一.Linux内核

内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。Linux内核的模块分为以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信、系统的初始化和系统调用等。

二.Linuxshell

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。

三.Linux文件系统

文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、EXT3、FAT、FAT32、VFAT和ISO9660。

四.Linux应用程序

标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、XWindow、办公套件、Internet工具和数据库等

centos7文本编辑器命令行怎么用?

centos7上也有vi编辑器。只要是linux系统,内置的默认编辑器即vi。可以通过在终端中执行vi命令来打开

如何打开linux下的vim编辑器?

vim可以认为是vi文本编辑器的改良或增强版本。如果你安装的redhat的话,vi编辑器就是这个改良版本。可以用vi-version来查看。如果你又安装了vim,可以用vim-version来查看vi的版本。打开方式:

1、确定vim已经安装到了你的计算机中。其实,如果是redhat的话,vi是一样的效果。

2、默认情况下vim会安装在/usr/bin下面,确定这个目录加入到了你的path变量中。(一般情况下都加入了的,直接用就好)3、打开一个终端。在终端中直接输入vim,即可打开vim编辑器。

阅读剩余
THE END