网站地图    收藏   

主页 > 前端 > css教程 >

shell的不同执行方式及其区别 - html/css语言栏目:

来源:自学PHP网    时间:2015-04-14 14:51 作者: 阅读:

[导读] 假设已经写好的这个程序文件名是/home/dmtsai/shell.sh,有以下几种方法执行:1、直接命令执行:shell文件必须具备可执行(rx)权限。然后: (1)绝对路径执行:/home/dmtsai/shell.sh; (2)...

假设已经写好的这个程序文件名是/home/dmtsai/shell.sh,有以下几种方法执行:

1、直接命令执行:shell文件必须具备可执行(rx)权限。然后:

    (1)绝对路径执行:/home/dmtsai/shell.sh;

    (2)相对路径执行,假设工作目录在/home/dmtsai/,则使用./shell.sh执行;

    (3)变量“PATH”功能:将shell放在PATH指定的目录下或者在PATH添加你shell文件所在的目录。

2、以bash进程来执行;通过bash shell.sh或sh shell.sh来执行。

3、利用不同的执行方式将造成不一样的结果,尤其对bash环境影响很大。

    (1)当使用直接命令执行(不论是绝对路径还是相对路径还是在$PATH内),或者是bash(或者sh)来执行脚本时,该脚本也就是说使用这种执行方式时, 其实 script 是在子程序的 bash 内执行的! 重点在于当子程序完成后,在子程序内的各项变量将会结束而不会回传到父程序中』! 这是什么意思呢?

例如:

[html]
[root@www scripts]# vi sh02.sh  
#!/bin/bash  
# Program:  
#  User inputs his first name and last name.  Program shows his full  
name.  
# History:  
# 2005/08/23  VBird  First release  
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin  
export PATH  
  
read -p "Please input your first name: " firstname  # 提示使用者输入  
read -p "Please input your last name:  " lastname   # 提示使用者输入  
echo -e "\nYour full name is: $firstname $lastname" # 结果由屏幕输出 

[root@www scripts]# vi sh02.sh
#!/bin/bash
# Program:
#  User inputs his first name and last name.  Program shows his full
name.
# History:
# 2005/08/23  VBird  First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
 
read -p "Please input your first name: " firstname  # 提示使用者输入
read -p "Please input your last name:  " lastname   # 提示使用者输入
echo -e "\nYour full name is: $firstname $lastname" # 结果由屏幕输出

如果你直接使用直接命令执行方式,将会出现下面的结果

[html] 
[root@www scripts]# echo $firstname $lastname  
    <==确认了,这两个变量不存在喔!  
[root@www scripts]# sh sh02.sh  
Please input your first name: VBird <==这个名字是鸟哥自己输入的  
Please input your last name:  Tsai   
  
Your full name is: VBird Tsai      <==看吧!在 script 运作中,这两个变数有 
生效  
[root@www scripts]# echo $firstname $lastname  
    <==事实上,这两个变量在父程序的 bash 中还是不存在的! 

[root@www scripts]# echo $firstname $lastname
    <==确认了,这两个变量不存在喔!
[root@www scripts]# sh sh02.sh
Please input your first name: VBird <==这个名字是鸟哥自己输入的
Please input your last name:  Tsai 
 
Your full name is: VBird Tsai      <==看吧!在 script 运作中,这两个变数有
生效
[root@www scripts]# echo $firstname $lastname
    <==事实上,这两个变量在父程序的 bash 中还是不存在的!
 

       上面的结果你应该会觉得很奇怪,怎举我已经刟用sh02.sh设定好的发量竟然在 bash环境底下无效!怎么回事呢?如果将程序相关性绘制成图的话,我们以下图来说明。当你使用直接执行的方法来处理时,系统会给予一支新的bash让我们来执行sh02.sh里面的指令,因此你的 firstname, lastname等发量其实是在下图中的子程序bash内执行的。当sh02.sh执行完毕后,子程序bash内的所有数据便被清除,因此上表的练习中,在父程序底下 echo $firstname 时,就看不到任何东西了!这样可以理解吗?

 

\

   

(2)利用source(或者.)来执行就不一样了,它其实在父进程中执行。结果如下:

[html]
[root@www scripts]# source sh02.sh  
Please input your first name: VBird  
Please input your last name:  Tsai  
  
Your full name is: VBird Tsai  
[root@www scripts]# echo $firstname $lastname  
VBird Tsai  <==嘿嘿!有数据产生喔! 

[root@www scripts]# source sh02.sh
Please input your first name: VBird
Please input your last name:  Tsai
 
Your full name is: VBird Tsai
[root@www scripts]# echo $firstname $lastname
VBird Tsai  <==嘿嘿!有数据产生喔!

执行流程如下

 \
 

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论