文档章节

Linux学习-什么是 Shell scripts

u
 uetucci
发布于 2017/09/12 15:23
字数 1039
阅读 22
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程 序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达 式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。

干嘛学习 shell scripts

如果你是想要玩清楚 Linux 的来龙去脉, 那么 shell script 就不可不知,为什么呢?因为:

  • 自动化管理的重要依据

  • 追踪与管理系统的重要工作

  • 简单入侵侦测功能

  • 连续指令单一化

  • 简易的数据处理

  • 跨平台支持与学习历程较短

第一支 script 的撰写与执行

在 shell script 的撰写中还需要用到下面的注意事项:

  1. 指令的执行是从上而下、从左而右的分析与执行;
  2. 指令、选项与参数间的多个空白都会被忽略掉;
  3. 空白行也将被忽略掉,并且[tab]按键所推开的空白同样视为空白键;
  4. 如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令;
  5. 至于如果一行的内容太多,则可以使用“[Enter]”来延伸至下一行;
  6. “#”可做为注解!任何加在#后面的数据将全部被视为注解文字而被忽略!
  • 直接指令下达: shell.sh 文件必须要具备可读与可执行 (rx) 的权限,然后:

    • 绝对路径:使用 /home/dmtsai/shell.sh 来下达指令;
    • 相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来执行
    • 变量“PATH”功能:将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/
  • 以 bash 程序来执行:通过“ bash shell.sh ”或“ sh shell.sh ”来执行

  • 撰写第一支 script

先写一支 script 给大家 瞧一瞧:

[dmtsai@study ~]$ mkdir bin; cd bin
[dmtsai@study bin]$ vim hello.sh
#!/bin/bash
# Program:
#       This program shows "Hello World!" in your screen.
# History:
# 2015/07/16	VBird	First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0

整个程序的撰写分成数段,大致是这样:

  1. 第一行#!/bin/bash在宣告这个script使用的shell名称:因为我们使用的是bash,所 以,必须要以“ #!/bin/bash ”来宣告这个文件内的语法使用 bash 的语法!那么当这个程 序被执行时,他就能够载入 bash 的相关环境配置文件 (一般来说就是 non-login shell 的 ~/.bashrc), 并且执行 bash 来使我们下面的指令能够执行。

  2. 程序内容的说明:整个script当中,除了第一行的“#!”是用来宣告shell的之外,其他的 # 都是“注解”用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的基本数 据。一般来说, 建议你一定要养成说明该 script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 创建日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!

  3. 主要环境变量的宣告:建议务必要将一些重要的环境变量设置好, 如此一来,则可 让我们这支程序在进行时,可以直接下达一些外部指令,而不必写绝对路径。

  4. 主要程序部分就将主要的程序写好即可!

  5. 执行成果告知(定义回传值)是否记得我们在第十章里面要讨论一个指令的执行成功与 否,可以使用 $? 这个变量来观察~ 那么我们也可以利用 exit 这个指令来让程序中断, 并且回传一个数值给系统。

撰写 shell script 的良好习惯创建

一定要养成良好的 script 撰写习惯,在每个 script 的文件开始处记录好:

  • script 的功能;
  • script 的版本信息;
  • script 的作者与联络方式;
  • script 的版权宣告方式;
  • script 的 History (历史纪录);
  • script 内较特殊的指令,使用“绝对路径”的方式来下达;
  • script 运行时需要的环境变量预先宣告与设置。
u
粉丝 0
博文 65
码字总数 103136
作品 0
深圳
程序员
私信 提问
加载中
请先登录后再评论。
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0
Linux 反汇编工具--LDasm

LDasm (Linux 反汇编工具) 是一个基于 Perl/TK 的 objdump/binutils 图形化工具,试图模仿 W32Dasm 工具的外观。可搜索相互参照,将代码从 GAS 转换成 MASM 风格代码等等。...

匿名
2013/01/22
5.6K
1
基于 Debian 的 Linux 发行版--Kali Linux

Kali Linux(以前叫做 BackTrack)是一份基于 Debian 的发行,它带有一套安全和计算机取证工具。其特色在于及时的安全更新,对 ARM 架构的支持,有四种流行的桌面环境供选择,以及能平滑升级...

匿名
2013/03/14
3.5W
10
Base 参数解析库--bash argsparse

bash argsparse 是一个 Bash 的高级参数解析库。 Its purpose is to replace the option parsing and usage describing functions commonly rewritten in all scripts. Its features includ......

匿名
2013/03/27
381
0

没有更多内容

加载失败,请刷新页面

加载更多

【每周CV论文】初学深度学习图像对比度增强应该要读的文章

欢迎来到《每周CV论文》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。 图像对比度增强,即增强图像中的有用信息,抑...

言有三
昨天
0
0
运营商大数据-行业大数据获客利器

一、永远不要沉溺在安逸里得过且过,能给你遮风挡雨的,同样能让你不见天日,只有让自己更加强大,才能真正撑起一片天。 二、别把生活当作游戏,谁游戏人生,生活就惩罚谁,这不是劝诫,而是...

osc_1wo6kipk
15分钟前
0
0
【Rust日报】2020-08-10:在 Rust 中存储连续数据

在 Rust 中存储连续数据? 作者都帮你整理好了: 使用 Rust 中的数组 [T; N]. Slice &[T] or &mut [T], 可以方便的 split. Boxed slice Box<[T]>. Vec. 长度和内容都可以变化,这可能是我们最常...

MikeTang
昨天
0
0
Gradient Centralization: 一行代码加速训练并提升泛化能力 | ECCV 2020 Oral

梯度中心化GC对权值梯度进行零均值化,能够使得网络的训练更加稳定,并且能提高网络的泛化能力,算法思路简单,论文的理论分析十分充分,能够很好地解释GC的作用原理   来源:晓飞的算法工程...

zb1486966459725
昨天
0
0
移动大数据-装修行业获客利器

因为海伦凯勒的努力和坚毅不拔的个性,而赢得了大家的肯定,终于得到了诺贝尔文学奖。虽然得了诺贝尔奖,但她对生命依然奋战不懈,她马不停蹄的到各地学校里演讲。有一次,她到一所大学演讲,...

osc_qheq8wav
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部