Bash Shell 脚本基础

3 篇文章 0 订阅

现在我们已经知道了Linux系统和命令行的基础知识了,是时候开始编程了。在此之前先了解一些基本概念:

从字面上的意思来说:kernel 是[ 核心 ]的意思,而 shell 是[ 壳 ] 的意思,核心是操作系统最底层的东西,里面包括了各种的支持硬件的工具!基本上替我们工作的是[ 硬件 ],而控制硬件的是[ 核心 ],我们使用者就是利用[ Shell ]控制一些 Kernel 提供的[ 工具(Utility)]来让硬件替我们工作。

换一种理解方式:由于 Kernel 听不懂我们的语言,而我们也无法直接记得 Kernel 的语言,所以两者之间的交互就由 shell 来支持了!(早期的DOS的文字接口也是使用 shell 作交互,那个 shell 的名称叫做 command.com)

目前我们的Linux大概有以下几种shell可以使用:(shell 所在的文件:/etc/shells

用户 chd 和 root 使用GNU bash shell 作为自己默认的 shell 程序:

bash shell 程序位于 /bin 目录内,从长列表可以看出 /bin/bash (bash shell)是一个可执行程序:

可以直接输入命令 /bin/sh 启动 bash shell ,输入 exit 退出 bash shell 

交互式和非交互式 shell进程

①交互式  shell :用户输入一条命令,Shell 解释并执行一条。如果你的 bash shell 不是登录系统时启动(比如在命令提示符下敲入bash 时启动),那么你启动的 shell 叫做交互式 shell 。交互式 shell 不会像登录 shell 一样运行,但它依然提供了命令行提示符来输入命令。

②非交互式 shell:(又称为:批处理 Batch)用户事先编写一个 shell 脚本,其中包含很多命令,shell 会一次执行完所有命令。系统执行 shell 脚本时用的就是这种 shell ,不同地方在于它没有命令提示符,但是当你在系统上运行脚本时,也许希望能够运行一些特定启动的命令。

shell 的父子关系

下面的例子中,bash 命令被输入了3次 实际上创建了3个子shell ,ps --forest 命令展示了这些子 shell 间的嵌套结构:

ps -f 命令也能表现子 shell 的嵌套关系,因为它能够通过 PPID 列显示出谁是谁的父进程:

可以输入 man bash 获得关于 bash 命令的更多帮助信息和命令行参数

使用多个命令

shell 脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果传给另一个命令,shell 可以让你将多个命令串起来,一次执行完成。如果要两个命令一起运行,可以把它们放在同一行,彼此间用分号(;)隔开。

date 命令先运行,显示了当前日期和时间,后面紧跟着 who 命令的输出,显示当前是谁登录到系统上。

使用这种方法就能将任意多个命令串连在一起使用了,最大命令行字符数不超过 225 就行!

shell 的内建命令和外部命令

①外部命令:也被称为文件系统命令,是存在于 bash shell 之外的程序,它们并不是 shell 程序的一部分,外部命令通常位于 /bin、/usr/bin、/sbin、或 /usr/sbin 中

PS 就是一个外部命令,可以使用 which 和 type 命令找到它

当外部命令执行时,会创建一个子进程,这种操作被称为衍生(forking),外部命令 ps 很方便显示出它的父进程以及自己所对应的衍生子进程:

②内建命令:内建命令和外建命令的区别在于前者不需要使用子进程来执行,它们已经和 shell 编译成了一体,作为 shell 工具的组成部分存在,不需要借助外部程序文件来运行。

cd 和 exit 命令都内建于 bash shell ,可以使用 type 命令来了解某个命令是否内建的。

因为不需要通过衍生子进程来执行,也不需要打开程序文件,所以内建命令的执行速度更快,效率更高。

有些命令有多种实现,例如 echo 和 pwd 既有内建命令也有外部命令,要查看命令的不同实现,使用 type -a 命令,which 命令只显示出了外部命令文件。对于多种实现的命令,如果想使用其外部命令实现,直接指明对应的文件就可以了,例如,要使用外部命令 pwd 可以输入 /bin/pwd 。

[ 插写3条 命令(可忽略) ] 

sleep   睡眠  (后面接的参数时你希望进程等待(睡眠)的秒数)

进程列表是运行在子 shell 中的一条或多条命令,使用包含了 sleep 命令的进程列表,在参数后面加上 &  表示 sleep 命令会在后台睡眠的秒数,可以通过 ps -f 来显示出来:

除了 ps 命令,还可以使用 jobs 命令显示后台作业信息,jobs 命令可以显示当前运行在后台模式中的所有用户的进程:

history     查看历史记录

一个有用的内建命令:history ,bash shell 会跟踪你用过的命令,你可以唤回这些命令并重新使用:

alias     命令别名

alias 命令是另一个 shell 内建命令,命令别名允许你为常用的命令(及其参数)创建另一个名称,从而将降低输入量减少到最低

创建 shell 脚本

要将 shell 命令放到文本文件中,首先需要用文本编辑器(详细请看《vi 和 vim 文本编辑器》那篇文章)来创建一个文件,然后将命令输入到文件中。在创建 shell 脚本时,必须在文件的第一行指定要使用的 shell 。 其格式为:

                              #!/bin/bash

通常在 shell 脚本中,井号(#)用作注释行!shell 并不会处理 shell 脚本中的注释行,然而 shell 脚本文件的第一行是个例外,

# 后面的惊叹号(!)会告诉 shell 用哪个 shell 来运行脚本。

echo    显示消息   (通过 echo 命令后面加上字符串,该命令就能显示出这个文本的字符串)

echo 命令可用单引号或双引号来划定文本字符串,如果在字符串中用到它们,你需要在文本中使用其中一种引号,而用另外一种来将字符串划定起来。

可以将 echo 语句添加到 shell 脚本中任何需要显示额外信息的地方

如果想把文本字符串和命令输出显示在同一行,可以用 echo 语句的 -n 参数

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值