千家信息网

我看shell的第一眼

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,我看shell的第一眼1、脚本解释器设置脚本第一行:#!/bin/sh[root@SUN sun]# cat test.sh#!/bin/sh首先第一行可以拆分为两部分,#!和绝对路径,#!只是特殊的
千家信息网最后更新 2024年11月23日我看shell的第一眼

我看shell的第一眼

1、脚本解释器设置

脚本第一行:#!/bin/sh

[root@SUN sun]# cat test.sh
#!/bin/sh

首先第一行可以拆分为两部分,#!和绝对路径,#!只是特殊的表示符,#!后面存放的是解释器地址(即shell存放路径)。注意,shell路径必须是全路径。其实第一行也不是非写不可,是可以省略的,不写第一行,可以手动指定shell,例如:sh test.sh,手动指定shell,脚本文件还不必要求有执行权限。

2shell执行脚本的过程

a、执行交互式命令

用户进入终端,shell进程已经被运行,用户输入一条命令,如果是shell内部命令(例如cd,exec,此时不会新建一个进程,内部命令其实就是shell里的一个子函数,就在当前进程执行完毕。如果是一个外部命令(例如lsrm),则shell进程会先fork一个子进程,调用exec执行该命令,父进程调用wait()waitpid()来等待子进程结束。

b、执行脚本文件

shell进程会先fork一个子进程,然后调用exec执行脚本文件。这个时候执行exec执行的另外一套机制,exec会读取文本文件的第一行,如果指定了解释器,则会调用指定的解释器,从解释器的_start开始执行,脚本文件的内容就当作参数传给解释器。

3、查看当前使用shell的方法

1echo $SHELL

[root@SUN Desktop]# echo $SHELL
/bin/bash

2ps

[root@SUN Desktop]# ps
PID TTY TIME CMD
3246 pts/0 00:00:00 bash
3269 pts/0 00:00:00 ps

(3)输入一条不存在的命令,abcd

[root@SUN Desktop]# adcd
bash: adcd: command not found

4ehco $0

[root@SUN Desktop]# echo $0
/bin/bash

0