Linux Shell编程之谈谈bash

本文深入解析Bash(BourneAgainSHell)的优势与使用技巧,包括命令历史调用、参数补全、批处理脚本及环境变量功能。探讨Bash的层级关系,如何从标准输入或文件读取命令,并揭示脚本执行的本质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell是一个命令行工具。Shell(也称为终端或者壳)充当的是人与内核(硬件)之间的翻译官。用户报一些命令“告诉”终端,他就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流的Linux系统默认使用的终端是Bash(Bourne Again SHell)解释器。

一、bash的优势

  • 通过上下方向键来调取过往执行过得Linux命令
  • 命令或参数仅需要输入前几位就可以用Tab键补全
  • 具有强大的批处理脚本
  • 具有实用的环境变量功能

二、bash的使用

如图,bash可以从标准输入或者文件中读取命令。

1285498-20190514233625161-1040110865.png

1. 标准输入读取命令

1285498-20190514233631651-1837901679.png

如图bash是可以嵌套的。当我们打一个exit就会退出一个bash。多打一个exit的话便会退出SSH连接。

2. 从文件中读取命令

创建sh01.sh文件,输入如下内容:

1285498-20190514233638987-1213499089.png

我们使用source命令来执行我们的sh文件,source是内部命令,具体含义如下:“在当前shell执行文件中的命令”.什么是当前shell?我们说过bash是可以嵌套的。不同的bash执行相同的命令,可能结果不同(比如 echo $$ 来输出当前进程号),所有当前shell就是指的现在所在层的bash。

1285498-20190514233647367-1142244034.png

执行结果如下:

1285498-20190514233655442-1069857901.png

source命令相同 .也表示在当前shell执行文件内的命令:

1285498-20190514233706011-125080213.png

3.bash的层级关系

bash具有层级关系,我们可以通过pstree命令来查看bash的层级关系,示例如下:

1285498-20190514233714761-562472071.png

系统进入默认是第一层bash【1235】,当我们再键入一个bash命令就会嵌套一层bash,依次类推,才有了我们进程号为1798、1805的bash。

思考:既然bash是一个命令,那么我么是否可以bash执行文件内容呢?

当然可以。但是又会嵌套一层bash,具体如下:

1285498-20190514233725812-1851152141.png

但是我们执行pstree命令却发现为什么只有最外面一层默认的父bash,而没有执行sh01.sh文件的子bash呢?

显然这个过程是先开启bash然后执行完毕后再退出bash。

三、脚本的本质

我们知道yum工具执行的是python脚本,那我们来看一下我么的yum文件more /usr/bin/yum

1285498-20190514233734567-1578072057.png

我们发现,yum文件在第一行声明了python脚本,说明要启动一个python的终端。也就是这样一个流程:

我们当前的bash读取到文件的第一行后启动相应的子终端,然后子终端执行下面的命令。

同理我们也同样可以声明我们的sh01.sh:

1285498-20190514233743026-94472705.png

我们使用当前bash命令执行source或者 . ,执行结果并没有什么改变:

1285498-20190514233751886-252891583.png

我们通过chmod +x命令来将其改变为可执行文件来执行:

1285498-20190514233806652-1629647123.png

我们发现进程号不是1235了,而是1845;并且当前默认bash下层也有了子层级。说明我们的bash确实是读取可执行文件sh01.sh的首行来启动新的bash来执行文件内的命令。

注意:事实上首行不声明也能执行。因为我们bash执行文件会默认打开一个子bash执行文件内命令。但是如果是python脚本文件的话就必须首行声明,因为启动的是bash来而非python终端来执行python命令是会报错的。

转载于:https://www.cnblogs.com/nm666/p/10865385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值