Java教程

shell脚本的执行

本文主要是介绍shell脚本的执行,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

shell脚本的执行

概述

当shell脚本运行时,首先会查找系统环境变量ENV,环境变量指定了环境文件(加载顺序/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc等) 在加载了上述环境变量文件后,Shell就开始执行Shell脚本中的内容。

Shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在Shell脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。

通常情况下,在执行Shell脚本时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子Shell脚本。

 

shell脚本执行的几种方式

  1. bash script-name或sh script-name:当脚本文件本身没有可执行权限(即无x权限)或者脚本文件开头没有指定解释器时需要使用的方法。推荐使用

  2. path/script-name或./script-name:在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限先改为可执行(即文件权限属性加x位),具体方法为chmod+x script-name,然后通过绝对路径或相对路径执行脚本。

  3. source script-name或.script-name: 是使用source或“.”(点号)读入或加载指定的Shell脚本文件(如compute.sh),然后,依次执行指定的Shell脚本文件.computesh中的所有语句。这些语句将在当前父Shell脚本father.sh进程中运行(其他几种模式都会启动新的进程执行子脚本)。因此,使用source或“.”可以将.computesh自身脚本中的变量值或函数等的返回值传递到当前父Shell脚本father.sh中使用。

  4. sh<script-name或cat scripts-name|sh:同样适用于bash,不过这种用法不是很常见。 例如:不用循环语句来实现精简开机自启动服务的案例,就是通过将所有字符串拼接为命令的形式,然后经由管道交给bash操作的案例。

     #准备脚本一
     [root@web01 ~]# cat test.sh
     echo 'I am a programmer '
     [root@web01 ~]# sh test.sh  
     #第一种方式
     I am a programmer 
     #第一种方式
     [root@web01 ~]# bash test.sh  
     I am a programmer 
     #第二种方式
     [root@web01 ~]# chmod +x test.sh
     [root@web01 ~]# ./test.sh
     I am a programmer
     #第三种方式
      #会将source或“.”执行的脚本中的变量值传递到当前的Shell中,如下:
     [root@web01 ~]# echo 'userdir=`pwd`' >test2.sh
     [root@web01 ~]# cat test2.sh
     userdir=`pwd`    #定义一个命令变量,内容是打印当前路径
     [root@web01 ~]# bash test2.sh        #采用第一种方式
     [root@web01 ~]# echo $userdir
                                 #此处为空,并没有出现当前路径
     [root@web01 ~]# . test2.sh
     [root@web01 ~]# echo $userdir
     /root           #第三种方式
     [root@web01 ~]# source test2.sh
     [root@web01 ~]# echo $userdir
     /root      #第三种方式
     #第四种方式 
     [root@web01 ~]# sh<test.sh
     I am a programmer 
     [root@web01 ~]# cat test.sh|bash
     I am a programmer

总结

通过source或“.”加载执行过的脚本,由于是在当 前Shell中执行脚本,因此在脚本结束之后,脚本中的变量(包括函数)值在当前Shell中依然存在,而sh和bash执行脚本都会启动新的子Shell执行,执行完后退回到父Shell。因此,变量(包括函数)值等无法保留。在进行Shell脚本开发时,如果脚本中有引用或执行其他脚本的内容或配置文件的需求时,最好用“.”或source先加载该脚本或配置文件,处理完之后,再将它们加载到脚本的下面,就可以调用source加载的脚本及配置文件中的变量及函数等内容了。

 

这篇关于shell脚本的执行的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!