0%

Shell

  1. What’s Shell?
  2. Types of Linux Shell
  3. What’s Shell script?
  4. How to Write Shell Scipt?

1. 什么是 Shell

Unix Shell 即大家俗称的 Shell 是源于 Unix/Linux 的命令行解释器,用户在 Shell 中执行的一系列命令都会被 Shell 命令行解释器直接执行。现代流行的命令行解释功能都已被内置到 Linux Shell 中进行支持,例如:通配符、 管道、 变量、条件操作、 命令及帮助文件等。简单来说,我们可以把 Linux 理解为用户与 Linux 操作系统进行交互的一个接口。

2. 有哪些 Linux Shell 类型

常见Shell类型

Linux 中的各种 Shell 类型有很多,但 Bourne Shell 和 C shell 应用最为广泛,事实上 Bourne Shell 已经成为 Shell 附加功能及一些衍生功能的编码基础。

Bourne Shell:Bourne shell 又名 sh,在 Linux 中的标准路径为 /bin/sh,它由 Stephen Bourne 编写创建,其之所以如此出名是因为 sh 作为其它 Shell 的大量符号/硬链接而存在。(Bourne Shell 的 License 仍在讨论中。)

C Shell:C Shell 又名 csh,由 Billy Joy 编写创建并被 BSD Unix 广泛使用。C Shell 引入许多功能来完善交互,如:别名,历史操作,任务控制等。它完全由 C 语言写成,并使用 BSD license。

Fish:Fish 是友好人机交互的代表,它改变了用户与 Linux Shell 在通用变量、友好错误信息、Tab 补全、语法高亮、智能终端和剪贴板处理等方面的交互方式。(Fish 基于 GPL v2)
Bourne-Again Shell:作为 GNU 项目的一部分,Bourne-Again Shell 是目前大多数 Linux 发行版和 Mac OS X 默认使用的 Shell。(它主要由 C 语言写成并基于 GPLv3 发布)

其它不太常用的 Linux Shell 还包括:

Debian Almquist shell 别名 dash
Korn Shell 别名 ksh
Z shell 别名 zh
Busybox
……

3. 什么是 Shell 脚本

Shell 脚本主要由 Linux Shell 解释执行,可被用于自动化的程序执行、文件操作、环境配置等任务,Linux 管理员通常使用 Shell 脚本来执行一些重复性的体力劳动。

Shell 脚本可将多个要执行的命令和任务提交到 Linux Shell 自动执行,而无需用户手动触发。你还可以在单个脚本中将一个命令的输出定义为另一个命令的输入。

总的来说,Shell 脚本编写是 Linux 管理员节省时间和资源的必备技能。

4. 如何编开始写自己的 Shell 脚本

在新手阶段,我们比较建议大家使用 gedit、vi/vim、nano 或 Emacs 来编写 Shell 脚本,而不要使用其它 IDE 编辑器。Bash 脚本必需以如下代码作为首行:

#!/bin/bash

上述字符中的 #! 被称为 shebang,后面跟的 /bin/bash 表明要使用 /bin/bash 来执行。除首行(意义特殊)用于指定脚本类型外,其余以 # 打头的内容会被当作注释被 Shell 忽略执行。

脚本写成后,你可将该文件保存成任意扩展名甚至无扩展名,但业界公认惯例以 .sh 作为 Linux Shell 脚本的扩展名,建议大家也别搞特殊。而且要在赋予脚本执行权限之后才能被执行,建议大家采用 775 权限,千万不要 777:

chmod 755 sysgeekdemo.sh

编写首个Shell脚本
打开你使用的文本编辑器,粘贴如下内容:

#!/bin/bash
echo “Hello World!”

将其保存成 1st.sh 再执行看看效果:

chmod 755 1st.sh
./1st.sh

执行成功了,是不是非常简单。
下面我们再建立一个 2nd.sh 并粘入如下内容:

#!/bin/bash
echo “What is your name?”
read a;
echo “Hey $a! what is your Favorite Website?”
read b;
echo -e “That’s Nice to know @$a that $b is your favorite Website”

大家看看执行之后发生了什么呢?

echo 后的「What is your name?」进行了正确输出,随后你输入的名字被存到了变量 a 当中,让命令可以从文件描述符中进行读取。
echo 后跟的 「Hey $a! what is your Favorite Website?」中的 $a 变量进行了赋值输出,并将输入的网址存入了变量 b,在第三行进行输出。
如此简单!开始上手的感觉非常良好?

Reference

Linux Shell脚本系列:开始上手(1)

欢迎关注我的其它发布渠道