本文旨在复习Shell基本概念、编程模型、变量类型、脚本规范、语言结构、脚本执行方式
Linux层次结构和Shell基本概念
Linux层次结构大致分为这么几层
● 请注意:基本上各层次都屏蔽了底层差异性,既能管理调用底层,同时又为上一层[或多层]服务
● Hardware Platform:硬件层有各种各样不同厂家的各种硬件接口,对上层提供服务
● OS Kernel:内核层,屏蔽底层硬件差异,提供核心功能,调度资源运行指令程序,上层可以进行System Call
● LIB:库文件,Kernel中的服务访问点,为了安全性、便利性等封装成库文件,上层可以进行库调用
● Shell:是用户和Linux沟通的桥梁,分为CLI Shell[bash、zsh、tsh]等,GUI Shell[Gnome、KDE等]
-
- Shell是命令语言:能交互式地解释和执行用户输入的命令,提请给内核来执行
- Shell是程序设计语言:能定义各种变量参数,并提供控制结构如循环、分支、判断等
- 本系列旨在讨论Shell编程的一些基础知识和概念
Shell编程模型
高级语言编程模型主要有面向过程、面向对象,通俗来说
● 面向过程:分析解决问题的步骤,把代码封装成函数一一实现这些步骤,使用的时候一一调用;
● 面向对象:把构成问题的事物分解成各个对象,建立对象的目的不是为了完成一个个步骤,而是为了描述事物在解决整个问题的过程中所发生的行为。
例子:一个下棋的过程,说明面向过程和面向对象。
● 请注意:总体来说,Shell编程是面向过程的,分解实现,最终调用完成自动化。但是新概念提出了Shell面向对象编程
Shell变量类型
Shell中变量大致有5类
● 环境变量:作用范围当前shell进程及其子shell进程
● 本地变量:作用范围仅当前shell进程
● 局部变量:当前shell进程中某个局部代码片段,通常是函数上下文
● 位置变量:参考grep后向引用,引用脚本参数,$1 $2 $3
● 特殊变量:由shell程序设置的特殊变量。有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
Shell脚本规范
任何一门编程语言,都会遵循一定的编程规范,比如C语言的include等,shell也有自己的编程规范
以一个shell脚本例子来说明规范
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #Author:By Lance,2015-09-21 13:37:03 cat "/etc/system-release" --->填充命令 statement1 fi .... source |
注意点:
<1>开头必须指定shebang[魔术],即表明该文件的格式,通常保存为*.sh
<2>注释信息:通常作者、时间、作用、描述等,但不局限于此,不建议中文注释
<3>内容部分:可填充各种命令、语言结构、条件判断、分支等等,实现逻辑加强
<4>代码缩进,易读,尤其是成对出现的通过缩进相同长度,更加直观可读
<5>成对符号、流程控制建议一次写完,避免遗漏,先整体后细节
Shell语言结构
同大多数高级语言,有3种语言结构,可组合使用
● 顺序执行 --> 默认法则,逐条执行语句
● 选择结构 --> 分支,进行条件判断,符合条件的分支予以执行;不符合的略过
● 循环结构 --> 将同一段代码反复执行有限次,直到满足跳出条件,否则是死循环
Shell脚本执行方式
通常脚本执行方式有3种
● ./test.sh执行,前提条件进程发起者对该文件有x权限,本质是通过调用一个新shell进程来运行,注意变量改变
● bash test.sh执行,本质上是调用bash命令,将test.sh作为该命令的参数来执行,该shell脚本可以无需x权限
● source test.sh或者. test.sh[.后有空格] 将shell脚本导入当前shell进程来执行,注意脚本中的变量也会导入进当前shell进程