[9-13]Shell系列1——基本概念

本文旨在复习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
#Functions:Shell Script specification

cat "/etc/system-release"      --->填充命令
if [ ];then                    --->填充判断条件

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进程

时间: 2024-10-06 09:08:17

[9-13]Shell系列1——基本概念的相关文章

[9-13]Shell系列2——变量基础

本文旨在复习shell变量定义.使用变量.删除变量.只读变量以及变量类型.特殊变量实例 知识储备 变量本质上是内存空间中的一块指定区域,其数据内容会发生变化: 变量名本质是个指针,指向这个数据变化的内存空间,那么在命令执行或者操作时,只需要通过变量名,就能够随时调用那个变化的数据,很方便 Shell脚本中变量和大多编程语言一样,有全局的,也有局部的[比如作用于一个function函数] 值得一提的是,shell是弱类型编程语言 弱类型:变量无需事先申明,直接可用[为空] 强类型:变量使用前,必须

Windows内核原理系列01 - 基本概念

1.Windows API Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中. 2.关于.NET .NET由一个被称为FCL的类库和一个被称为CLR的公共语言运行库组成.FCL是建立在CLR之上的,而CLR是一组标准的COM服务器,提供了垃圾回收,即时编译类型检验等特性.由于CLR的这些特性,使得开发人员的生产效率得以提高..NET框架与组建的关系如下: .NET应用程序 用户模式(托管代码) —————————— 类库(FC

8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下

8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 # 8.10 shell 特殊符_cut命令 --- - * 任意个任意字符 - ?任意一个字符 -  井号#注释字符  写命令的时候前面加一个#,那么这条命令就不生效,包括shell脚本里面也是,前面加个#表示这一行不生效,可以加一些注释说明的文字 ``` <[email protected] ~># #ls a.txt <[email

[9-13]Shell系列7——函数及参数传递

本文旨在复习shell函数作用.定义.嵌套.删除.终端调用.返回值.参数传递 知识储备 函数:即Functions,把一组实现通用功能的独立的代码模块[通常里面是变量,可变的参数组成]封装在一起,并给予命名:后续用到时,可直接通过给定函数名来调用整体代码 函数作用:<1>代码重用 <2>模块化编程 函数使用:<1>先定义:编写函数代码 <2>后调用:调用函数,按需传递参数[非必需] 函数定义及调用 函数定义格式主要有2种,如下: 12345678910111

Linux Shell系列教程之(七)Shell输出

本文是Linux Shell系列教程的第(七)篇,更多shell教程请看:Linux Shell系列教程 与其他语言一样,Shell中也有输出操作,而且在实际应用中也是非常重要的,今天就为大家介绍下Shell输出操作. Shell echo命令 echo命令是Shell的一个内部指令,用于在屏幕上打印出指定的字符串. 命令格式: echo arg 转义字符 像其他高级语言一样,Shell也使用反斜杠“\”作为转义字符. 例子: echo "\"It is a test\"&q

Linux Shell系列教程之(六)Shell数组

本文是Linux Shell系列教程的第(六)篇,更多shell教程请看:Linux Shell系列教程 Shell在编程方面非常强大,其数组功能也非常的完善,今天就为大家介绍下Shell数组的用法. Shell支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0. 一.Shell数组的定义 在Shell中,用括号来表示数组,数组元素之间用“空格”分割开. 定义数组的一般形式

Linux Shell系列教程之(四)Shell注释

本文是Linux Shell系列教程的第(四)篇,更多shell教程请看:Linux Shell系列教程 与许多的编程语言一样,Shell中也有注释符号,今天就为大家来介绍下Shell中的注释的语法及用法. Shell中的注释以“#”号开头,所有以“#”号开头的代码都会被解释器所忽略. 比如下面的代码: #!/bin/bash # Author : linuxdaxue.com # Date : 2016-05-15 echo "What is your name?" read PER

Linux Shell系列教程之(三)Shell变量

本文是Linux Shell系列教程的第(三)篇,更多shell教程请看:Linux Shell系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的.今天就为大家介绍下Shell中的变量相关知识. 为使Shell编程更有效,系统提供了一些Shell变量.Shell变量可以保存诸如路径名.文件名或者一个数字这样的变量名. Shell将其中任何设置都看做文本字符串.有两种变量,本地和环境.严格地说可以有 4种,但其余两种是只读的,可以认为是特殊变量,它用于向Shell脚本传递参数. 定

Linux Shell系列教程之(八)Shell printf命令详解

本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell printf命令语法 printf format-string [arguments...] format-string为描述格式规格的字符串,用来描述输出的排列方式,最好为此字符串加上引号.此字