开始学习shell编程之前,我先啰嗦几句,作为一个web开发工作者,在部署网站的时候不可避免的要使用linux服务器。
对于大部分同学来说,配置linux服务器的环境是一件很难的事情,包括刚开始接触linux的我也是一样的。
最开始的时候也是碰到了不少坑,走了很多弯路。后来有了第一篇关于服务器环境配置的教程《Centos7.6配置lnmp》关于这篇教程纯粹就是我一点一点试出来的。在百度上各种查,把好用的部分整理在了一起。里边也包含了很多东西,包括yum的配置,nginx的配置文件编写。以上的东西,惭愧点说,我是看不懂的。反正好用了就行了呗。
但是,随着工作年限的增加,负责的工作也不再是之前那样简单的环境配置就能满足的,有的时候可能需要对nginx的配置文件进行修改,或者,yum源安装的软件附带的模块已经不满足项目所需要的要求。或者说的再深入一点,我们需要自己编写nginx的插件。
这个时候我们可能就需要使用到shell编程。
那什么是shell编程呢?
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。
包括我们之前学习的linux系统中使用的操作命令:cd、ll、grep等,都是shell命令。
基本流程如下图所示:
一:Shell 也支持编程
Shell不只是可以像我们上边说的可以使用命令来控制操作系统,也是可以像PHP、Java那样进行编写程序的,我们后期要学习的也就是这一部分。
Shell编程没有像其他语言那样复杂强大,他也是支持了基本的ifelse、for、while、until 循环等语句的。
二:Shell 是一种脚本语言
编程语言目前接触的就比较多了:java、C#、python、PHP、javascript等
大体分两种:
编译型语言:java、C#等必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。这个过程叫做编译,这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器
脚本语言:python、php、javascript等需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言,完成解释过程的软件叫做解释器。
编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。
脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。
Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。
三:linux中的shell解释器
我这里使用的服务器是centos
我们使用命令来查看一下centos的shell解释器:
cat /etc/shells
[root@VM_0_4_centos ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
Centos主要使用的shell解释器是sh、bash,那centos默认的shell解释器是什么呢?我们使用命令来查看一下:
ll /bin/ | grep bash
[root@VM_0_4_centos ~]# ll /bin/ | grep bash
-rwxr-xr-x 1 root root 964536 Apr 1 2020 bash
lrwxrwxrwx 1 root root 10 Dec 29 2020 bashbug -> bashbug-64
-rwxr-xr-x 1 root root 6964 Apr 1 2020 bashbug-64
lrwxrwxrwx 1 root root 4 Dec 29 2020 sh -> bash
我们通过返回结果可以清楚的看到,sh是指向bash的。因此centos系统中默认的shell解释器是bash。
或者我们可以直接使用echo输出shell变量:
echo $SHELL
[root@VM_0_4_centos ~]# echo $SHELL
/bin/bash
以上大概就是shell编程的基础入门知识。
有好的建议,请在下方输入你的评论。