百度
360搜索
搜狗搜索

linux命令行与shell脚本编程,学生信的那些事儿之七 - Linux基础之Shell脚本编程详细介绍

本文目录一览: shell与Linux命令的区别是什么?

  众所周知,shell是运行在Linux系统上的一个脚本语言,是每个运维人员必须掌握的知识;而我们在使用Linux系统的时候,必须通过命令来操作,那么shell脚本语言与Linux命令有什么联系?它们之间的区别是什么?这篇文章为大家讲解一下。

  shell翻译成壳的意思,它是包裹在Linux内核外层的,一个可通过一系列的Linux命令对操作系统发出相关指令的人机界面。shell可以通过其条件语句和循环语句等,把一系列Linux命令结合在一起,形成一个相当于面向过程的程序,即shell

script,从而实现一些复杂的功能。

  shell可以说是Linux命令集的概称,属于命令行的人机界面。shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。shell既是一个命令语言,也是一个程序设计语言;其次,shell也指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

  由此可见,shell相当于经过装饰的命令行,它与命令行一样,都能操作Linux;但是shell是面向过程的,相当于有了一定的逻辑和过程,而命令行只是单一的操作。

  shell与Linux命令的区别

  1、直接在命令行执行,就是在当前的shell环境下执行,比如涉及到一些环境变量的时候,必须在当前shell环境里执行。

  2、在脚本执行的话,会fork一个子进程,所有操作都在子进程中进行。如果涉及到一些在脚本里设置环境变量的东西,脚本结束了,环境变量就消失了,如果是修改环境变量的话,需要特别注意。

  3、shell可以重复或批量地进行一些命令,你也可以把自己要重复执行的命令写到脚本里面执行,而命令行的话就需要一个一个的输入命令,比较麻烦。
shell翻译成壳的意思,它是包裹在Linux内核外层的,一个可通过一系列的Linux命令对操作系统发出相关指令的人机界面。shell可以通过其条件语句和循环语句等,把一系列Linux命令结合在一起,形成一个相当于面向过程的程序,即shell script,从而实现一些复杂的功能。
shell可以说是Linux命令集的概称,属于命令行的人机界面。shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。shell既是一个命令语言,也是一个程序设计语言;其次,shell也指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
由此可见,shell相当于经过装饰的命令行,它与命令行一样,都能操作Linux;但是shell是面向过程的,相当于有了一定的逻辑和过程,而命令行只是单一的操作。
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
shell与linux命令的区别
1、直接在命令行执行,就是在当前的shell环境下执行,比如涉及到一些环境变量的时候,必须在当前shell环境里执行。
2、在脚本执行的话,会fork一个子进程,所有操作都在子进程中进行。如果涉及到一些在脚本里设置环境变量的东西,脚本结束了,环境变量就消失了,如果是修改环境变量的话,需要特别注意。
3、shell可以重复或批量地进行一些命令,你也可以把自己要重复执行的命令写到脚本里面执行,而命令行的话就需要一个一个的输入命令,比较麻烦。

Linux命令、编辑器与Shell编程的目录

第1篇Linux命令
第1章Linux简介与安装(教学视频:52分钟)2
1.1Linux系统简介2
1.1.1Linux能做什么2
1.1.2Linux的主要发行版3
1.1.3Linux系统的优势4
1.2Linux的存储设备和目录结构5
1.2.1Linux系统中的存储设备5
1.2.2Linux系统中的目录结构7
1.3虚拟化技术的应用8
1.3.1虚拟化和VMware公司9
1.3.2VMwareWorkstation简介10
1.3.3VMwareWorkstation的网络连接方式11
1.3.4VMwareWorkstation的使用技巧13
1.3.5VMwareESXServer简介13
1.4Linux安装过程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.3SSH远程登录36
2.2.4Telnet远程登录38
2.2.5VNC远程登录38
2.2.6SFTP登录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.4Linux命令基础及帮助43
2.4.1Linux系统中的命令43
2.4.2帮助之help命令和选项45
2.4.3帮助之man手册46
2.4.4帮助之info信息页48
2.5系统与用户的交互程序Shell50
2.5.1Shell分类50
2.5.2更改默认Shell51
2.6Bash中的命令基本操作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.1Linux基本命令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.1find的基本格式123
5.1.2按文件名称查找125
5.1.3按文件权限查找125
5.1.4按文件类型查找126
5.1.5按文件的时间戳记和大小查找126
5.1.6按文件属主或属组查找127
5.1.7find工具的其他参数128
5.1.8使用exec和ok处理查找到的文件128
5.1.9使用xargs命令处理查找到的文件129
5.1.10find工具应用实例130
5.2查找文本工具grep131
5.2.1grep的基本格式131
5.2.2使用grep查找文本132
5.2.3行首、行尾匹配查找134
5.2.4配合常用的正则表达式查找135
5.2.5使用或、与多匹配模式查找136
5.2.6grep工具应用实例137
5.3流编辑器sed138
5.3.1sed基本格式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.1awk命令基本格式152
5.4.2正则表达、元字符、运算符和关系运算符153
5.4.3在awk命令中使用变量156
5.4.4在awk命令中使用流程控制159
5.4.5awk命令中的函数162
5.5转换和删除重复命令tr170
5.5.1tr命令的基本格式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.5suid、sgid和sticky权限概述208、6.3.6权限掩码命令umask211
6.4POSIXACL权限系统及其管理命令212
6.4.1POSIXACL权限系统概述213
6.4.2ACL权限管理和查看命令setfacl、getfacl213
6.4.3ACL权限管理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.1Linux系统支持的文件系统225
7.2.2创建文件系统命令mkfs226
7.2.3查看和修改卷标命令e2label227
7.2.4挂载文件系统228
7.2.5卸载文件系统命令umount231
7.2.6利用fstab自动挂载文件系统232
7.3RAID设备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.4LVM逻辑卷管理241
7.4.1LVM的基本概念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检查磁盘配额命令
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.2cron计划任务格式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.1syslogd守护进程及其配置文本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.2tar备份工具304、9.2.1tar命令的基本格式304、9.2.2tar归档和备份文件305、9.2.3查看归档文件中的文件列表306、9.2.4从归档文件中还原文件306、9.3cpio备份命令307、9.3.1cpio命令的基本格式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.5RPM包管理命令rpm317
9.5.1RPM包管理器简介317
9.5.2rpm命令基本格式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安装命令makeinstall329
9.6.6运行及环境配置330
9.6.7卸载软件命令make
9.7利用yum工具安装应用程序332
9.7.1yum简介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.1bonding简介364
10.4.2bonding的模式365
10.4.3设置网络接口366
10.4.4加载模块生成新的网络连接367
10.4.5验证设置368
10.5网络工具370
10.5.1测试连通命令ping370
10.5.2网络路径测试命令
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.2Linux系统中的文本编辑器387
11.2认识Vi和Vim编辑器388
11.2.1启动Vim编辑器388
11.2.2Vim编辑器帮助390
11.2.3退出Vim编辑器391
11.2.4Vim编辑器的模式391
11.2.5Vim编辑器的工作界面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.5Vim编辑器的查找和替换功能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.6Vim编辑器中的窗口操作406、11.6.1分割窗口406、11.6.2关闭窗口409、11.6.3控制窗口大小409、11.6.4窗口中的操作410
11.6.5移动窗口410
11.7Vim编辑器的高级技巧411
11.7.1复制和粘贴411
11.7.2剪切和粘贴411
11.7.3编辑多个文件411
11.7.4Visual模式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.1Emacs编辑器概述与入门419
12.1.1Emacs编辑器概述419
12.1.2启动Emacs编辑器420
12.1.3Emacs编辑器启动界面421
12.1.4退出Emacs编辑器423
12.2Emacs基本操作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.4Emacs编辑器的常用功能430
12.4.1撤销与恢复430
12.4.2搜索功能431
12.4.3查找并替换432
12.4.4复制、剪切和粘贴433
12.5Emacs编辑器的高级技巧434
12.5.1删除环435
12.5.2编辑文本区

阅读更多 >>>  远程linux主机命令

Linux Shell 脚本编程最佳实践

IT路边社
前言
与其它的编码规范一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。这份文档主要侧重于我们所普遍遵循的规则,对于那些不是明确强制要求的,我们尽量避免提供意见。

编码规范对于程序员而言尤为重要,有以下几个原因:
本文档中的准则致力于最大限度达到以下原则:
尽管本文档涵盖了许多基础知识,但应注意的是,没有编码规范可以为我们回答所有问题,开发人员始终需要再编写完代码后,对上述原则做出正确的判断。

注 :未明确指明的则默认为必须(Mandatory)
主要参考如下文档:

仅建议Shell用作相对简单的实用工具或者包装脚本。因此单个shell脚本内容不宜太过复杂。
在选择何时使用shell脚本时时应遵循以下原则:

可执行文件不建议有扩展名,库文件必须使用 .sh 作为扩展名,且应是不可执行的。
执行一个程序时,无需知道其编写语言,且shell脚本并不要求具有扩展名,所以更倾向可执行文件没有扩展名。
而库文件知道其编写语言十分重要,使用 .sh 作为特定语言后缀的扩展名,可以和其他语言编写的库文件加以区分。
文件名要求全部小写, 可以包含下划线 _ 或连字符 - , 建议可执行文件使用连字符,库文件使用下划线。
正例:
反例:

源文件编码格式为UTF-8。避免不同操作系统对文件换行处理的方式不同,一律使用 LF 。

每行最多不超过120个字符。每行代码最大长度限制的根本原因是过长的行会导致阅读障碍,使得缩进失效。
除了以下两种情况例外:
如出现长度必须超过120个字符的字符串,应尽量使用here document或者嵌入的换行符等合适的方法使其变短。
示例:
除了在行结束使用换行符,空格是源文件中唯一允许出现的空白字符。

对从来没有用到的或者被注释的方法、变量等要坚决从代码中清理出去,避免过多垃圾造成干扰。

Bash 是唯一被允许使用的可执行脚本shell。
可执行文件必须以 #!/bin/bash 开始。请使用 set 来设置shell的选项,使得用 bash echo "Process $: Done making $$$." # 示例7:命令参数及路径不需要引号 grep -li Hugo /dev/ "$1" # 示例8:常规变量用双引号,ccs可能为空的特殊情况可不用引号 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"} # 示例9:正则用单引号,$1可能为空的特殊情况可不用引号 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"} # 示例10:位置参数传递推荐带引号的"$@",所有参数作为单字符串传递用带引号的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 } func_t "$@" func_t "$*" # 当执行 ./t.sh a b c 时输出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:

使用 $(command) 而不是反引号。
因反引号如果要嵌套则要求用反斜杠转义内部的反引号。而 $(command) 形式的嵌套无需转义,且可读性更高。
正例:
反例:
条件测试
使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。
因为在 [[ 和 ]] 之间不会出现路径扩展或单词切分,所以使用 [[ ... ]] 能够减少犯错。且 [[ ... ]] 支持正则表达式匹配,而 [ ... ] 不支持。参考以下示例:

尽可能使用变量引用,而非字符串过滤。
Bash可以很好的处理空字符串测试,请使用空/非空字符串测试方法,而不是过滤字符,让代码具有更高的可读性。正例:
反例:
正例:
反例:
正例:
反例:
文件名扩展
当进行文件名的通配符扩展时,请指定明确的路径。
当目录中有特殊文件名如以 - 开头的文件时,使用带路径的扩展通配符 ./* 比不带路径的 * 要安全很多。

应该避免使用eval。
Eval在用于分配变量时会修改输入内容,但设置变量的同时并不能检查这些变量是什么。反例:

请使用进程替换或者for循环,而不是通过管道连接while循环。
这是因为在管道之后的while循环中,命令是在一个子shell中运行的,因此对变量的修改是不能传递给父shell的。
这种管道连接while循环中的隐式子shell使得bug定位非常困难。反例:
如果你确定输入中不包含空格或者其他特殊符号(通常不是来自用户输入),则可以用for循环代替。例如:
使用进程替换可实现重定向输出,但是请将命令放入显式子 shell,而非 while 循环创建的隐式子 shell。例如:

总是检查返回值,且提供有用的返回值。
对于非管道命令,使用 $? 或直接通过 if 语句来检查以保持其简洁。
例如:

当内建命令可以完成相同的任务时,在shell内建命令和调用外部命令之间,应尽量选择内建命令。
因内建命令相比外部命令而言会产生更少的依赖,且多数情况调用内建命令比调用外部命令可以获得更好的性能(通常外部命令会产生额外的进程开销)。
正例:
反例:

加载外部库文件不建议用使用.,建议使用source,已提升可阅读性。正例:
反例:

除非必要情况,尽量使用单个命令及其参数组合来完成一项任务,而非多个命令加上管道的不必要组合。常见的不建议的用法例如:cat和grep连用过滤字符串; cat和wc连用统计行数; grep和wc连用统计行数等。
正例:

除特殊情况外,几乎所有函数都不应该使用exit直接退出脚本,而应该使用return进行返回,以便后续逻辑中可以对错误进行处理。正例:
反例:

推荐以下工具帮助我们进行代码的规范:
原文链接:http://itxx00.github.io/blog/2020/01/03/shell-standards/
获取更多的面试题、脚本等运维资料点击: 运维知识社区 获取
脚本之---短信轰炸机
脚本之---QQ微信轰炸机
ansible---一键搭建redis5.0.5集群
elk7.9真集群docker部署文档
全球最全loki部署及配置文档
最强安全加固脚本2.0
一键设置iptbales脚本

Linux Shell 教程——想玩转linux就请一直看下去

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
Shell 在线工具
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh ,它同样也可以改为 #!/bin/bash 。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。
输入一些代码,第一行一般是这样:
#!/bin/bash echo "Hello World !"
运行实例 ?
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
1、作为可执行程序
将上面的代码保存为 test.sh,并 cd 到相应目录:
注意,一定要写成 ./test.sh ,而不是 test.sh ,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

阅读更多 >>>  如何在linux中默认安装路径是什么意思

LINUX快速入门第八章:Shell基础

我们平时所说的 Shell 可以理解为 Linux 系统提供给用户的使用界面。Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境。当一个用户登录 Linux 之后,系统初始化程序 init 就根据 /etc/passwd 文件中的设定,为每个用户运行一个被称为 Shell(外壳)的程序。
确切地说,Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至编写一些程序。
Shell 处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用。图 1 是 Linux 系统层次结构图,Shell 接收用户输入的命令,并把用户的命令从类似 abed 的 ASCII 码解释为类似 0101 的机器语言,然后把命令提交到系统内核处理;当内核处理完毕之后,把处理结果再通过 Shell 返回给用户。
换句话说:
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell 与其他 Linux 命令一样,都是实用程序,但它们之间还是有区别的。一旦用户注册到系统后,Shell 就被系统装入内存并一直运行到用户退出系统为止;而一般命令仅当被调用时,才由系统装入内存执行。
与一般命令相比,Shell 除了是一个命令行解释器,同时还是一门功能强大的编程语言,易编写,易调试,灵活性较强。作为一种命令级语言,Shell 是解释性的,组合功能很强,与操作系统有密切的关系,可以在 Shell 脚本中直接使用系统命令。大多数 Linux 系统的启动相关文件(一般在 /etc/rc.d 目录下)都是使用 Shell 脚本编写的。
同传统的编程语言一样,Shell 提供了很多特性,这些特性可以使 Shell 脚本编程更为有用,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及中断处理等。
说了这么多,其实我们在 Linux 中操作的命令行界面就是 Linux 的 Shell,也就是 Bash,但是我们的图形界面是 Shell 吗?其实从广义讲,图形界面当然也是 Shell,因为它同样用来接收用户的操作,并传递到内核进行处理。不过,这里的 Shell 主要指的是 Bash。

Shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
Shell的分类
目前 Shell 的版本有很多种,如 Bourne Shell、C Shell、Bash、ksh、tcsh 等,它们各有特点,下面简要介绍一下。
最重要的 Shell 是 Bourne Shell,这个命名是为了纪念此 Shell 的发明者 Steven Bourne。从 1979 年起,UNIX 就开始使用 Boume Shell。Bourne Shell 的主文件名为 sh,开发人员便以 sh 作为 Bourne Shell 的主要识别名称。
虽然 Linux 与 UNIX 一样,可以支持多种 Shell,但 Boume Shell 的重要地位至今仍然没有改变,许多 UNIX 系统中仍然使用 sh 作为重要的管理工具。它的工作从开机到关机,几乎无所不包。在 Linux 中,用户 Shell 主要是 Bash,但在启动脚本、编辑等很多工作中仍然使用 Bourne Shell。
C Shell 是广为流行的 Shell 变种。C Shell 主要在 BSD 版的 UNIX 系统中使用,发明者是柏克莱大学的 Bill Joy。C Shell 因为其语法和 C 语言类似而得名,这也使得 UNIX 的系统工程师在学习 C Shell 时感到相当方便。
Bourne Shell 和 C Shell 形成了 Shell 的两大主流派别,后来的变种大都吸取这两种 Shell 的特点,如 Korn、 tcsh 及 Bash。
Bash Shell 是 GNU 计划的重要工具之一,也是 GNU 系统中标准的 Shell。Bash 与 sh 兼容,所以许多早期开发出来的 Bourne Shell 程序都可以继续在 Bash 中运行。现在使用的 Linux 就使用 Bash 作为用户的基本 Shell。
Bash 于 1988 年发布,并在 1995-1996年推出Bash 2.0。在这之前,广为使用的版本是1.14,Bash 2.0增加了许多新的功能,以及具备更好的兼容性。表 2 中详细列出了各版本的具体情况。

注意,Shell 的两种主要语法类型有 Bourne 和 C,这两种语法彼此不兼容。Boume 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括 csh、tcsh(Bash 和 zsh 在不同程序上支持 csh 的语法)。
本章讲述的脚本编程就是在 Bash 环境中进行的。不过,在 Linux 中除了可以支持 Bash,还可以支持很多其他的 Shell。我们可以通过 /etc/shells 文件来査询 Linux 支持的 Shell。命令如下:
在 Linux 中,这些 Shell 是可以任意切换的,命令如下:
用户信息文件 /etc/passwd 的最后一列就是这个用户的登录 Shell。命令如下:
大家可以看到,root 用户和其他可以登录系统的普通用户的登录 Shell 都是 /bin/bash,也就是 Linux 的标准 Shell,所以这些用户登录之后可以执行权限允许范围内的所有命令。不过,所有的系统用户(伪用户)因为登录 Shell 是 /sbin/ndogin,所以不能登录系统。

阅读更多 >>>  linux如何快速定位到文件位置

笔记:
sh/bash/csh/Tcsh/ksh/pdksh等shell的区别

怎样从零开始学习linux?

1、学习Linux必须要玩熟练的就是它强大的shell系统,也就是我们常说的命令行;熟悉了命令行,可以继续深入学习一些提高知识以及Linux下各种著名的工具,包括版本控制软件,编辑器,文字处理,等等。
2、也可以选择兄弟连进行学习。
推荐几本学习Linux的书籍:
一、《快乐的Linux命令行》
这本书介绍如何生存在 Linux 命令行的世界。不像一些书籍仅仅涉及一个程序,比如像shell 程序, bash。这本书将试着向你传授如何与命令行界面友好相处。它是怎样工作的?它能做什么?使用它的最好方法是什么?
正如书中所说的“就像有位老师在你身边,指导你学习”,这本书的特点是语言简洁流畅,即使是英文版,看起来也不费劲(目前已有中文版)。涵盖了大部分命令行工具和Shell编程。最主要的是它基于 CC 协议共享,任何人都可以免费下载。
二、《Linux命令行与shell脚本编程大全》
这是一本非常适合Linux小白的入门教程,内容通俗易懂、深入浅出,除了日常工作中用的基础命令之外,像正则表达式、sed、awk 这样的高级命令也有介绍,书上还配有大量的实例,如果你想精通 shell 编程,那么这本书就是为你准备的。也是有志于从事系统运维开发的朋友必备读品,总之,只要你能跟着这本教程学完,使用 Linux 就轻车熟路了。
三、鸟哥的Linux私房菜 : 基础学习篇
如果你想要学习Linux,强烈建议通过《鸟哥的Linux私房菜》这套书籍去学习,浅显易懂,小编就是通过这套书籍学会Linux的。
四、Linux UNIX系统编程手册 套装上下册
《linux/unix系统编程手册(上、下册)》是介绍linux与unix编程接口的权威著作。linux编程资深专家michael kerrisk在书中详细描述了linux/unix系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。
《linux/unix系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200个程序示例,另含88张表格和115幅示意图。

linux 怎么进入shell编程模式

linux 可以通过vi或vim命令进入shell编程模式,操作步骤如下:
1、首先在linux终端中创建一个shell脚本文件,例如shell.sh:
2、使用vi shell.sh命令进入文件编辑模式即为shell编程模式,如图所示:
3、进入编辑模式后在文本文件内输入#!/bin/bash echo "Hello World!" ,如下图:
4、输入完成后:wq保存内容,回到了终端。
5、在终端输入sh shell.sh就执行了脚本。
linux进入shell编程模式方法如下:让Linux系统退出图形界面模式,进入控制台模式,显示器上只有一个简单的带着白色文字的“黑屏”,这种模式称为 Linux 控制台(Console)。现代 Linux 系统在启动时会自动创建几个虚拟控制台(Virtual Console),其中一个供图形桌面程序使用,其他的保留原生控制台。虚拟控制台其实就是 Linux 系统内存中运行的虚拟终端(Virtual Terminal)。从图形界面模式进入控制台模式也很简单,往往按下Ctrl + Alt + Fn(n=1,2,3,4,5...)快捷键就能够来回切换。输入用户名和密码,登录成功后就可以进入Shell。想了解更多有关linux的详情,推荐咨询达内教育。达内教育是引领行业的职业教育公司,致力于面向IT互联网行业,培养软件开发工程师、系统管理员、UI设计师、网络营销工程师、会计等职场人才,拥有强大的师资力量,实战讲师对实战经验倾囊相授,同时还与各大高校进行合作,助力学生职业方向的发展。感兴趣的话点击此处,免费学习一下
1.先打开终端:ctrl+art+t 快捷键即可以打开;
2.进入所在目录:cd命令;
3.编辑:vi 或者 vim
举例:在/home/根目录有test.txt文件,要编辑它
1.打开终端
2.cd /home/
3.vi test.txt
即可
进到终端里 随意建一个文件就可以进入vi编辑模式来编写shell脚本
在你想放的目录下 vi filename 就可以了,然後按下 a 或 i 等 进入编辑介面就over了
1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。
2、在linux命令行下输入shell指令:vi test.shell。
3、最后,按下回车键执行shell指令,此时发现用vi命令成功进入了shell编程模式中。

《Linux命令行与shell脚本编程大全》epub下载在线阅读,求百度网盘云资源

《Linux命令行与shell脚本编程大全》(Richard Blum)电子书网盘下载免费在线阅读
资源链接:
链接:https://pan.baidu.com/s/10S-mKk0ME0WotTnrFhMKOg
提取码:c1f9
书名:Linux命令行与shell脚本编程大全
作者:Richard Blum
译者:武海峰
豆瓣评分:8.4
出版社:人民邮电出版社
出版年份:2012-9
页数:619
内容简介:本书是一本关于Linux 命令行与shell 脚本编程的全面教程。全书分为四部分:第一部分介绍Linuxshell 命令行;第二部分介绍shell 脚本编程基础;第三部分深入探讨shell 脚本编程的高级内容;第四部分介绍如何在现实环境中使用shell 脚本。本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。
本书内容全面,语言简练,示例丰富,适合于Linux 系统管理员及Linux 爱好者阅读参考。
作者简介:Richard Blum 系统和网络管理员,已经在IT行业工作了22年多。他管理过UNIX、Linux、Novell和微软服务器,用Linux shell脚本进行过自动化网络监测,并在大多数常见的Linux shell环境中写过脚本。他还是一名网络课程讲师,美国各地的多所大学和学院都采用他的Linux基础课程。除本书外,Richard还著有Professional Linux Programming等书。
Christine Bresnahan 系统管理员,已经在IT行业工作了近30年。目前在印第安纳波利斯市的常春藤技术社区学院担任兼职教授,讲授Linux系统管理、Linux安全和Windows安全等课程。
武海峰 Linux系统工程师,兴趣集中在GNU/Linux和移动互联应用,热衷于开源软件。曾在商业Linux厂商任职,从事移动设备操作系统集成和商业Linux发行版集成工作。

学生信的那些事儿之七 - Linux基础之Shell脚本编程

沿着前面的轨迹,接下来是Linux中shell脚本的学习。这对于生信工程师后续处理大量 (海量更合适些) 数据是非常非常重要的,但是同样的,作为一个有点古板的人,对于"脚本"是什么意思我都死磕了好久。主要觉得有些抽象,尤其是跟生信的同事讨论项目分析部分的问题时,他们经常会说道这个词,在他们意识里这是个不言自明的术语,殊不知对外行人而言 (比如我),那简直就是无情的"知识的诅咒"。经常是我假装听懂了,然后继续讨论下面的问题,形成一个模糊的印象。

百度上的解释是:脚本(Script)是一种批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。不知道你能不能看懂,反正我开始的时候真是一知半解。

鸟哥私房菜的解释是:shell script是利用 shell 的功能所写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理的目的。不明觉厉,好像更看不懂了···

Jude 的简单粗暴大白话解释是:脚本就是Linux中很多命令按照一定规则的组合,以实现某个特定的功能。Linux中有很多简单的命令,往往只是进行了简单的对话,比如 cd 就是进入到某个目录,简单直接。但是如果我想进入某个目录A,然后在目录A中创建目录B,再在目录B中创建文本C呢?当然可以一步一步操作,如果想要一步到位呢,那就可以用脚本,把三个命令写在一起,一起执行。好像有点啰嗦···

或者从英语的角度去理解,脚本的对应英文是Script,而这个单词的中文释义中还有剧本的意思。剧本就好理解了啊,剧本就是导演(生信工程师)基于某个主旨(要实现的目标)按照一定的手法(规则)所写的一个故事。不管是哪个演员,都得按照剧本演。所以,学好英语对于生信也是有帮助的~

按照脚本的复杂程度可以分为:

这个无需多说,其实就是若干个简单命令的顺序排列,执行脚本后会按照命令的前后关系从前往后一一执行。

相对于简单的基本脚本,结构化的命令脚本可以施加逻辑流程控制,从而改变程序(命令)执行的顺序。基本脚本中的命令就是从上往下执行,但是结构化的命令脚本可以根据逻辑判断重复或者跳过某些命令。

常用的结构化命令(语句)有:

后面还有什么嵌套循环啊啥的,不过我觉得上面的7中命令学到家了,应该可以应付大部分在生信分析里面的应用了。

记得高中的时候,物理老师(也是班主任)在给我们讲解习题时有个有意思的套路:不管什么难题现在下面写个"答:",以示自己解决问题的决心,也是一种正向的心理暗示。脚本编写也是有套路的,不过总的来说还是比较简单。

对于简单的脚本(超级简单的那种),直接几个命令连在一起即可,中间用";"隔开。

对于更长更复杂的脚本,一般需要创建一个文本,并在里面编辑。这就涉及到了文本编辑器,比较常用和简单的一般有nano和vim,实在很简单,规则也容易理解,教程随手可得,不多说。

比如用vim创建了一个脚本之后,具体的语法(套路):

ok,脚本写完了,怎么让脚本开始工作呢?这有涉及到之前讲过的环境变量和相对路径、绝对路径了。方法有三:

就这么多吧,应该有点感觉到了,剩下的就是狂练狂练了~

知乎 linux命令和shell脚本的区别

准确上讲应该说是
shell
脚本文件编程(当然了,在该
shell
脚本文件中也可以包含
linux
系统命令)。shell
脚本文件是一个文本文件,它是将你需要完成的各种复杂功能通过编写
shell
程序来实现。例如:模式匹配(awk)
、字符串替换功能(sed)等。在
awk

sed
等工具的使用中肯定需要使用正则表达式的熟练使用,而
linux
命令是指
linux
系统的基本操作命令,例如:ls
列出文件名命令、cat
filename、cd
改变子目录命令等等。这就是它们之间的区别。

网站数据信息

"linux命令行与shell脚本编程,学生信的那些事儿之七 - Linux基础之Shell脚本编程"浏览人数已经达到25次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:linux命令行与shell脚本编程,学生信的那些事儿之七 - Linux基础之Shell脚本编程的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!