目录
对于开发者来说,除了掌握Java、C/C++等主要编程语言外,还需要掌握支撑性的工具语言和库,学习和掌握Shell,能够帮助我们高效便捷的编译和运行程序,让系统代替复杂的人工操作。通过速通Shell系列,我们一起走近Shell,读懂Shell,用好Shell,提高程序执行效率和日常工作效率。
初次走进Shell
要想走进Shell的世界,我们需要先观其貌,识其才,进而攻其心,得其人,所谓知己知彼,无往不利。我们从Shell的概念、原理、分类和优点开始。
Shell是什么
Shell 是一种脚本语言,一种命令语言,也是一种程序设计语言。脚本语言最显著的特点是解释执行而非编译执行,一个Shell脚本主要由原本需要在命令行输入的命令组成,Shell可以控制进程和文件,以及启动和控制其它程序。Shell 通过提示输入,向操作系统解释该输入,然后处理来自操作系统的结果输出,管理用户与操作系统之间的交互。
Shell工作原理
计算机设备是由一个个物理硬件组成的,本身不具备运行处理能力,需要通过内核和驱动对硬件进行操作,驱动其工作。在计算机系统中,内核接口是隐藏起来的,用户不能直接操作内核,我们需要通过一个中间程序,接收用户操作命令,将其传递给内核,推动内核工作,进而推动硬件工作。Shell便是这个中间程序,起到连接操作系统内核和用户的作用。
所以Shell起到一个代理商的作用,通俗点说,有点像一个代购。一般情况下,我们难以直接获得海外商品,可以将需求提给代购。代购理解消化需求后,去海外供应商采购商品,供应商就是内核。供应商收到采购指令,将商品返回给代购,代购将商品可视化的呈现给用户。
Shell分类
随着历史发展和技术演进,Shell诞生了数个版本,它们彼此借鉴学习,推陈出新,使得Shell更容易被用户接受和使用,极大释放了生产力。主要Shell版本如下:
- Bourne Shell 标识为sh,由Steve Bourne在贝尔实验室开发,在UNIX系统中被普遍使用,在编程方面比较优秀,但在用户交互方面没有其他Shell优秀。
- Bourne-Again Shell 标识为bash,该Shell是linux操作系统上使用最为广泛的Shell,也是现在的主流Shell,在Bourne Shell基础上增强了很多特性,如命令补全,命令历史表等。
- Korn Shell 标识为ksh,二十世纪八十年代早期由David Korn在贝尔实验室编写开发。它完全向上兼容Bourne Shell并包含了C Shell的很多特性,集成了C Shell和Bourne Shell优点。
- C Shell 标识为csh,C Shell开发于二十世纪七十年代末,作为编程语言使用时,语法类似于C,更容易被接受。此外,C Shell还提供了增强交互使用的功能,如作业控制、命令行历史和别名等。但是类C的特点使其降低了作为脚本语言的灵活性,因此C Shell对于个人用户而言运行比较慢。
现如今,在我们日常系统中,bash已经成为Shell编程的不二人选,因此速通Shell系列也是全部采用bash版本。
Shell的优势
没有金刚钻就揽不了瓷器活,Shell能够在软件系统中有着举足轻重的作用,自然有着它的天然优势,简单、易用、高效是其三大基本原则。
- 语法简单 Shell看似复杂,实际上语法和结构是比编译执行的编程语言要简单,主要内容是命令调用、语句拼接、文件读写等,逻辑复杂度一般不会非常高;
- 使用方便 Shell将一系列操作复杂的命令存储在一个或几个脚本文件内,只需要一次调用就可以顺序执行完所有命令;
- 适用范围广 Shell是解释执行,灵活性高,适用场景多,例如代码编译、版本打包发布、软件安装、程序运行、log存储、进程监控等一系列操作繁琐、重复性高的工作,均可以依靠Shell来高效准确完成。
第一个Shell脚本
Hello World
按照惯例,我们编写一个最基本的Shell脚本hello.sh:
#!/bin/bash
echo "hello world"
代码只有两行,但也值得进行一下分析。
脚本文件第一行使用#!符号指定一个脚本的解释器,如#!/bin/bash、#!/bin/sh等,该行被#注释,所以不会被当作命令来执行,但计算机通过该注释信息得知应该使用什么解释器来解释整个脚本文件中的所有有效代码,在上面的例子中使用的解释器是/bin/bash。
脚本文件第二行echo 命令用于向窗口输出文本,hello word被双引号括起来,表示是一个字符串。
Shell脚本文件以sh作为扩展名,sh代表Shell。脚本写完,下面看一下脚本怎么运行。
Shell执行方式
Shell是解释型语言,常用执行方法有四种:绝对路径执行、相对路径执行、脚本命令执行、系统命令执行。
绝对路径执行
刚创建出来的脚本文件是没有可执行权限的,因此绝对路径执行时需要先给脚本文件赋予可执行权限,使用命令chmod +x hello.sh即可。执行完毕,打印hello world。
相对路径执行
相对路径就是通过./来执行脚本文件,操作最为方便。
脚本命令执行
通过sh或者bash命令来执行脚本,不需要为脚本文件分配可执行条件。该方式下,脚本默认解释器类型为运行命令所指定,不受脚本文件开头的#!/bin/bash、#!/bin/sh所控制。
系统命令执行
通过source命令来执行脚本,在执行时hello.sh作为了参数source命令的参数,因此也不需要hello.sh有执行权限。
总结
在项目开发中,脚本是工具性语言,受到的关注不如C/C++、Java等语言高,但它是操作系统和软件项目运行的推进器和管理员,尤其是在运维上起到了关键作用。掌握Shell编程,实现软件自动化,大大提升了我们的工作效率,提高了系统的运行效率。
一支战队是否优秀,C位非常重要,辅助也要出彩,相辅相成。
下一篇我们将进入shell编程非常关键的变量。
版权归原作者 柒号华仔 所有, 如有侵权,请联系我们删除。