Shell,一种脚本语言,是主流操作系统出厂便支持的,即 Windows 系统、MacOS 系统和 Linux 的各个发行版,都支持运行 Shell 语句和脚本。Shell 之于运维工程师,就好比斧头之于樵夫,是不可或缺的生产工具。然而,Shell 的魅力却不仅仅是如此。对想体验编程的人士来说,Shell 由于开机可用、免安装要比 C/C++、Java 和 Python,具有更低的体验成本。同时,Shell 的语法内容和关键字都比它们少很多,这意味着学习难度更低。因此,对于只是抱着尝试心态想要体验编程的人来说,Shell 真的是最佳首选。
Shell 脚本,和其他代码脚本一样,需要借助命令窗口才能解析和执行。在 Windows 中,具有解析和执行 Shell 脚本的命令窗口,是 Powershell;而在 MacOS 和 Linux 中,任意一个命令终端窗口都支持解析和执行 Shell 脚本,不过,保险起见,你可以用 Shell 命令中的 echo 命令,去确认所打开的命令窗口是否支持解析和执行 Shell,具体如下:

只要回车之后,命令窗口没有提示“echo 不是可执行的命令”等错误相关的信息,那么,你所打开的命令窗口,就是支持解析和执行 Shell。
麻雀虽小,但五脏俱全,Shell 除了不支持结构体和类外,在变量和数组的声明、流程控制、函数声明和参数传递、输入输出等方面都是支持的,并且也支持条件判断、大小比较等运算,而加减乘除赋值等运算符也是支持。总而言之,除了不支持自定义数据结构,Shell 在很多操作上都和 C/C++、Java 和 Python 等编程语言,是相互一致的。
1、变量和数组的声明
1.1、变量
Shell 语法中,并没有数据类型的概念,因而在 Shell 脚本中声明变量时,并不需要显式地指定数据类型,由此,我们可以将 Shell 归入弱类型编程语言阵营中。Shell 声明变量的语法格式如下:

Shell 脚本中声明变量时,和 Python 类似,等号左边为变量名、右边为变量值,需要注意的是,变量名和等号之间不允许有空格,此外,合法的变量名应当遵循如下规则:

而执行 Shell 脚本也非常简单,只需在支持解析和执行 Shell 脚本的命令窗口中,前往Shell 脚本所在的目录,而后将待执行的 Shell 脚本设置成可执行模式,然后再用 ./[shell].sh 命令去执行即可,如下:

1.2、数组声明
数组的声明和变量的声明比较类似,只不过变量值从单个的值,换成了由圆括号扩起来的一系列值,如下:

上面是 Shell 脚本中最基本数组声明语法,除了表示符号和分隔符的差异外,作为动态类型语言的 Shell,和 Python 很多方面都很相似。而 Shell 获取数组的所有元素,无需通过遍历,使用 @ 或 * 可以获取数组中的所有元素,而基于这两个符号再加上! 或 # 还能轻松的获取数组的键名和长度,如下:

2、运算符
Shell 所支持的运算符有算术运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。
2.1、算术运算符
在 Shell 脚本中使用算术运算符的语法如下:

Shell 的算术运算符要在算术运算表达式中使用,而算术运算表达式由反引号扩起来、并以关键词 expr 开头。
2.2、其他运算符
除算术运算外,其他几种运算的结果都是 true 或 false,因此,放到流程控制中去列举。
3、流程控制
Shell 脚本的流程结构,也是分为顺序结构、选择结构和循环结构,同样是顺序结构作为 Shell 脚本的默认流程结构。Shell 的选择结构也是 if-else 和 case 两种,而循环结构除了常见的 for 循环和 while 循环外,还多了一个 until 循环。
3.1、选择结构
3.1.1、if 语句
Shell 的 if 语句的语法格式,如下:

与其他编程语言所不同的是,Shell 的 if 语句,需要用 fi 作为语句块的结束标志。
3.1.2、case 语句
Shell 的 case 语句如下:

如上所示,case 语句其实就是 switch-case 结构。
3.2、循环结构
3.2.1、循环语句
Shell 中的循环语句如下:

3.2.2、循环控制
Shell 也同样提供了 break 和 continue 两个关键字进行循环控制,用法如下:

网友评论