shell script学习记录(2)

来源:互联网 发布:nginx 内置变量 编辑:程序博客网 时间:2024/05/22 16:53

先上sh02.sh内容(内容来自《鸟哥的Linux私房菜基础学习篇》)。

<span style="font-size:18px;">#!/bin/bash#Program:#User inputs his first name and lastname. Program shows his full name.#History#2016/09/26  first releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHread -p "Please input your first name:" firstnameread -p "Plaese input your last name: " lastnameecho -e "\nyour full name is:$firstname $lastname"#exit 0</span>
分别使用source sh02.sh    

./sh02.sh

sh sh02.sh运行脚本文件。发现结果如下图:

也就是说,使用source sh02.sh  运行时,变量的值使可以继续在当前的进程中得到的。而使用另外两种命令运行的话,不会改变这个变量的值。(记得测试的时候需要用不同的字符串测试,不然很容易误解的,不要问我怎么知道的~~)

事实上,如果最先运行的不是  source sh02.sh的话,那个echo $firstname的结果什么都没有。

书上的解释是,sh sh02.sh和./sh02.sh运行的时候,其实script是在子进程的bash内执行的,当子进程完成后,子进程的各项变量或者操作将会结束而不会传回到父进程中。

source sh02.sh运行时,是在父进程中运行的。

另外,还有一个不同的地方是exit 0的效果。

书上的案例,在这里是没有exit 0的,但是我因为偷懒就把之前sh01.sh的内容直接copy过来,所以exit 0开始还有。下面说说有exit 0 的时候的结果:

source sh02.sh运行结束之后,终端会关掉。

sh sh02.sh和./sh02.sh运行结果完全和没有exit 0 的结果相同。

显然,这个结果,也很好地验证了上面的那个关于父进程和子进程的结论。


0 0