Shell脚本

参考文献 华清远见《FS-MP1A开发教程-2022-04-01》

一、Shell脚本

1.1 Shell 简介

​ 在 Linux 系统开发过程中,开发者或者用户与 Linux 系统(内核)进行交互的时候需要一个平台,这就是 Shell,有了它,用户就能通过键盘输入与系统进行交互了。Shell 会执行用户输入的命令,并且在屏幕上显示执行结果。这种交互的全过程都是基于文本方式的,这种面向命令行的用户界面被称为 CLI(Command Line Interface),在图形化用户界面(GUI)出现之前,人们一直是通过命令行界面来操作计算机的。Linux 的图形化环境最近这几年有很大改进,在 X 窗口系统下,只需打开 Shell 提示来完成极少量的任务。然而,许多 Linux 功能在 Shell 提示下要比在图形化用户界面(GUI)下完成得更加高效,况且一些应用程序并不支持图形界面。

​ 单从字面意思上理解,Shell 的本意是“壳”的意思,通俗地讲就是内部核心与外部使用者发生联系的介质。当用户希望与系统内核Kernel)发生联系进而控制硬件设备时,用户不会也不允许直接与内核交互,而必须通过 Shell 来下达命令使系统来控制硬件,同时内核也会通过 Shell 来反馈执行情况,这里的 Shell 就是一个桥梁

image-20230527200648204

Shell 提供了用户与操作系统之间通讯的方式。这种通信可以以交互方式(从键盘输入,并且可以立即得到响应),或者以 Shell script(非交互)方式执行。Shell script 是放在文件中的一串 Shell 和操作系统命令,它们可以被重复使用。本质上,Shell script 是把命令行的命令简单地组合到一个文件中。

Shell 本身又是一个解释型的程序,也是一种编程语言,Shell 程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。Shell 编程语言简单而且易于掌握,任何在提示符中能键入的命令都能放到一个可执行的 Shell 程序中。作为操作系统的外壳,如果把 Linux 内核想像成一个系统的中心部分,那么 Shell 就是围绕内核的外层。当从 Shell 或其他程序向 Linux 传递命令时,内核会做出相应的反应。

Bash(Bourne Again Shell)是目前大多数 Linux(Red Hat,Slackware 等)系统默认使用的 Shell,它由 Brian Fox 和 Chet Ramey 共同完成,内部命令一共有 40 个,它是 BourneShell 的扩展,与 Bourne Shell 完全向后兼容,并且在 Bourne Shell 的基础上增加了很多特性。Bash 是 GNU 计划的一部分,用来替代 Bourne Shell。Linux 使用它作为默认的 Shell是因为它有以下的特点。

• 可以使用类似 DOS 下面的 doskey 的功能,用上下方向键查阅和快速输入并修改命令。
• 自动通过查找匹配的方式,给出以某字串开头的命令。
• 包含了自身的帮助功能,只要在提示符下面键入 help 就可以得到相关的帮助。

​ Linux 下使用 Shell 非常简单,打开终端就可以看到 Shell 的提示符了,登录系统之后,系统将执行一个称为 Shell 的程序,正是 Shell 进程提供了命令行提示符。作为 Linux 默认的 Bash,对于普通用户用“$”作为 Shell 提示符,而对于根用户(root)用“#”作提示符。如图 3.2 所示。

image-20230527202031843

​ 在实际执行的时候,Shell 会首先检查输入的命令是否是 Shell 的内部命令,如果不是,再检查是否是一个内部的应用程序。然后 Shell 在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给 Linux 内核。

1.2 命令行输入

​ 命令行输入实际上是可以编辑的一个文本缓冲区,在命令行中就可以输入 Shell 命令了。在按“回车键”以确认当前操作之前,可以对输入的内容进行编辑。比如删除、复制、粘贴等,还可以插入字符,使得用户在输入命令,尤其是复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。

  • 改变文件/目录访问权限

在 Linux 系统下面,一个文件有可读(r)、可写(w)、可执行(x)3 种模式,chmod可以用数字来表示该文件的使用权限,其语法如下。

chmod [XYZ] 文件

其中 X、Y、Z 各为一个数字,分别表示 User(用户)、Group(同组用户)及 Other(其他用户)对于该文件的使用权限。对于文件的属性,r(可读)=4,w(可写)=2,x(可执行)=1。对于每一位用户来说,若要具有 rwx 属性则对应的位应为 4+2+1=7,若要rw-属性则为 4+2=6,若要 r-x 属性则为 4+1=5。比如下面的例子:

linux@ubuntu:~$ chmod 751 /home/linux/test

其执行结果就是使程序 test 对于用户可读、写、执行,对于同组用户可读、执行,对于其他用户可执行。

  • 改变文件/目录的所有权
chown [-R] 用户名 文件/目录

例如:

linux@ubuntu:~$ chown TH File1

将当前目录下的文件 File 改为用户 TH 所有。

linux@ubuntu:~$ chown -R TH Dir1

将当前目录 Dir1 改为用户 TH 所有。

1.3 建立脚本

​ 编辑 Shell 脚本文件使用 Linux 下的普通编辑器如 vi、Emacs 等即可。Linux 下的 Shell默认采用 Bash,所以本书也主要以 Bash 脚本为例介绍,在建立 Shell 脚本程序的开始首先应指明使用哪种 Shell 来解释所写的脚本,一般来说 Bash 脚本以”#!”开头(文件的首行),
而”#!”后面同时要将所使用 Shell 的路径明确指出,比如 Bourne Shell 的路径为**/bin/sh**,而C Shell 的路径则为/bin/csh,Linux 下默认采用 Bash,所以本书也主要以 Bash 脚本为例介绍,下面的语句就是指定 Bash 来解释脚本。

#! /bin/sh

​ 该语句说明该脚本文件是一个 Bash 程序,需要由/bin 目录下的 Bash 程序来解释执行。除了在脚本内指定所使用的 Shell 类型以外,使用过程中也可以在命令行中强制指定。比如想用 C Shell 执行某个脚本,就可以使用以下命令。

linux@ubuntu:~$ csh Myscript

​ 为了增加程序的可读性,Shell 脚本语句也可以像高级语言那样加注释,在 dash 脚本程序中从“#”号开始到行尾的部分均被看作是程序的注释语句。

1.4 shell变量

​ Shell 编程中可以使用变量,这充分体现了它的灵活性。对 Shell 来讲,所有变量的取值都是一个字串。Shell 脚本中主要有以下几种变量:系统变量,环境变量,用户变量。其中用户变量在编程过程中使用频繁;系统变量在对参数判断和命令返回值判断会使用;环境变量主要是在程序运行的时候需要设置。

具体略

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信