目录
shell脚本部分参照:Linux Shell脚本学习指南http://c.biancheng.net/shell/
进行学习,过程中对脚本进行编写运行,部分脚本粘贴出执行结果。
shell模块化
谓模块化,就是把代码分散到多个文件或者文件夹,使用 source 命令来实现。
案例:
脚本1:
[root@com ee]# cat fun2.sh
#!/bin/bash
#dev by yjh
#函数的定义使用
#方法为求所有输入参数的和
function sumNum(){
sum=0
echo $@
#$@ $* 区别 $@获取所有参数 $*获取所有参数形成一个变量,但当前方法测试两者无区别
for num in $@
do
echo "遍历的数值为${num}"
(( sum+=num ))
done
return ${sum}
}
脚本2:
cat main.sh
#!/bin/bash
#dev by yjh
#文件中调用文件的方法
source fun2.sh
sumNum 1 2 3 4
echo $?
执行:
[root@com ee]# ./main.sh
1 2 3 4
遍历的数值为1
遍历的数值为2
遍历的数值为3
遍历的数值为4
10
子Shell和子进程
子 Shell 的本质可以理解为 Shell 的子进程,子进程的概念是由父进程的概念引申而来的。
在 Linux 系统中,系统运行的应用程序几乎都是从 init(pid为 1 的进程)进程派生而来的,所有这些应用程序都可以视为 init 进程的子进程,而 init 则为它们的父进程。
使用pstree -p命令就可以看到 init 及系统中其他进程的进程树信息(包括 pid):
对于 Shell 的子进程来说,它是一个从父级 Shell 进程派生而来的新的 Shell 进程,我们将这种新的 Shell 进程称为这个父级 Shell 的子 Shell。
Shell 脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完一个命令之后再执行下一个。如果在 Shell 脚本中遇到子脚本(即脚本嵌套),就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。
如果以新进程的形式运行 Shell 脚本,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子 Shell 脚本,基本流程如下图所示。