我看shell的第一眼
我看shell的第一眼
1、脚本解释器设置
脚本第一行:#!/bin/sh
[root@SUN sun]# cat test.sh
#!/bin/sh
首先第一行可以拆分为两部分,#!和绝对路径,#!只是特殊的表示符,#!后面存放的是解释器地址(即shell存放路径)。注意,shell路径必须是全路径。其实第一行也不是非写不可,是可以省略的,不写第一行,可以手动指定shell,例如:sh test.sh,手动指定shell,脚本文件还不必要求有执行权限。
2、shell执行脚本的过程
a、执行交互式命令
用户进入终端,shell进程已经被运行,用户输入一条命令,如果是shell内部命令(例如cd,exec),此时不会新建一个进程,内部命令其实就是shell里的一个子函数,就在当前进程执行完毕。如果是一个外部命令(例如ls,rm),则shell进程会先fork一个子进程,调用exec执行该命令,父进程调用wait()或waitpid()来等待子进程结束。
b、执行脚本文件
shell进程会先fork一个子进程,然后调用exec执行脚本文件。这个时候执行exec执行的另外一套机制,exec会读取文本文件的第一行,如果指定了解释器,则会调用指定的解释器,从解释器的_start开始执行,脚本文件的内容就当作参数传给解释器。
3、查看当前使用shell的方法
(1)echo $SHELL
[root@SUN Desktop]# echo $SHELL
/bin/bash
(2)ps
[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
(4)ehco $0
[root@SUN Desktop]# echo $0
/bin/bash