《Linux命令行与shell脚本编程大全》 第五章理解shell

简介: 5.1 1. cat /etc/passwd 可以查看每个用户自己的默认的shell程序。 2.默认的交互shell会在用户登录某个虚拟控制台终端时启动。 不过还有另外一个默认的shell是/bin/sh,它作为默认的shell,用于那些需要在启动时使用的shell脚本   ls -l /bin/sh   进行查看   乌班图的发行版中默认的系统shell(dash shell)和默认的交互shell(bash shell)并不相同。

5.1

1. cat /etc/passwd

可以查看每个用户自己的默认的shell程序。

2.默认的交互shell会在用户登录某个虚拟控制台终端时启动。

不过还有另外一个默认的shell是/bin/sh,它作为默认的shell,用于那些需要在启动时使用的shell脚本

 

ls -l /bin/sh   进行查看

 

乌班图的发行版中默认的系统shell(dash shell)和默认的交互shell(bash shell)并不相同。

 

 

可以直接 dash 来启动 dash shell

exit 退出

 

5.2 shell 的父子关系

一个shell可以创建另外一个shell(子shell)。

ps -f 查看一下。

bash shell就是一个进程(运行的程序)。

输入bash就会创建一个子shell。exit退出。  ps- f --forest。可以展示进程间的嵌套结构。

 

5.2.1 进程列表

$ pwd; ls; pwd; cd /; echo $BASH_SUBSHELL

这样可以让命令依次执行。这是在当前shell中执行的。

$(pwd; ls; echo $BASH_SUBSHELL;) // 这个是在子shell中执行。

() 还可以嵌套,比如pwd;(pwd; (ls; cd /home))

echo $BASH_SUBSHELL   若返回0,表示没有子shell。

 

$sleep 300&   // 后台运行命令,& 就是把命令置入后台模式

jobs  可以查看后台作业信息

 

还可以这样,将进程列表置入后台。

$(sleep 2; echo $BASH_SUBSHELL; sleep 2;)&

 

协程:可以同时做两件事,它在后台生成一个子shell,并在这个子shell中执行命令。

使用coproc命令进行协程处理:

 

$ coproc sleep 10

还可以这样:

$coproc MyJob { sleep 10; }  // 相当于给sleep 10取了个名字。注意那几个空格

 

5.3 理解shell的内建命令

 

1.外部命令:又称文件系统命令,存在与bash shell之外的命令。并不是shell程序的一部分

通常位于 /bin  /usr/bin   /sbin   /usr/sbin中。

外部 命令执行时会创建一个子进程。这种操作叫 衍生(forking

比如ps是一个外部命令,可以使用which 和 type命令找到它

$which ps

$ type -a ps

$ ls -l /bin/ps

 

2. 内建命令:不需要子进程来执行,和shell是一体的,不需要借助外部程序文件来运行。

 

(1)比如  exit 和 cd是内建命令

$type exit

$type cd

 

有些命令有多种实现,比如pwd和echo既有外部命令也有内建命令

#type -a echo

which  只显示出外部命令文件。

type -a 显示出每个命令的两种实现。

 

窍门:对于多种实现的命令,默认执行是内建的,若想要执行外部命令可以指定对应的文件就好了。

比如

$pwd  // 执行的是内部命令

$/bin/pwd   // 执行的外部命令

 

(2)查看历史执行的命令

$ history  // 这个是内建命令

可以看到之前执行的命令,前面有个数字,代表命令编号。比如是38

$ !38  // 表示执行第38条命令

(3)$ !!   这个是执行上一条输入的命令。

 

 

(4)命令别名

alias   也是内建命令

$alias  -p   // 查看当前可用的别名

 

创建自己的命令

$alias xcyls='ls -al'

一个别名仅仅在它所被定义的shell进程中才有效。在 ~/.bashrc下修改可以对所有shell都有效

 

shell  子shell  进程 子进程 都会受到环境变量的影响。

目录
相关文章
|
7天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
6天前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
5天前
|
Shell Linux 开发工具
|
5天前
|
监控 Unix Shell
shell脚本编程学习
shell脚本编程
22 12
|
6天前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
8天前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
11天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
27 2
|
21天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
20 6
|
1月前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
43 17
|
22天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
60 3
下一篇
无影云桌面