Linux下shell script的执行方式汇编

来源:互联网 发布:西王母国 知乎 编辑:程序博客网 时间:2024/06/16 21:54

假设存在shell scripts文件为/home/myscripts/helloworld.sh,现列举如下的执行方式:

 

一、直接命令执行

             1)绝对路径——/home/myscripts/helloworld.sh

             2)相对路径——假设当前工作目录为/home/myscripts,则执行方式为./helloworld.sh

             3)利用变量PATH— —将helloworld.sh脚本文件放在PATH变量中任一个目录,然后直接以helloworld.sh来执行

Remarks:

             问题:在第2)条中,为什么不是直接用helloworld.sh来执行呢?因为相对于其当前工作目录/home/myscripts,./hellowold.sh和helloworld.sh都是相对路径了。假设当前工作目录为/home,那么可以通过./myscripts/helloworld.sh和myscripts/helloworld.sh来执行都可以的。这和问题上面的有什么不同呢?

             解答: 如果想直接用helloworld.sh来执行成功的话,其实就要采取第3)种方式了。

 

二、以bash进程来执行

           假设当前工作目录为/home/myscripts,则直接通过bash helloworld.sh或者sh helloworld.sh来执行

Remarks:可以使用sh helloworld.sh来执行,是因为/bin/sh就是/bin/bash的连接文件

 

三、以source或小数点(.)来执行

           假设当前工作目录为/home/myscripts,则通过source helloworld.sh或. helloworld.sh来执行,二者是一样的哦

 

四、各种执行shell scripts方式的区别

           a )第三种执行方式和第一、二种执行方式的区别           

           利用第三种方式来执行shell scripts,就会在父进程中去执行shell scripts中的命令。而第一、二两种方式,会使用一个新的bash环境来执行脚本内的命令,就是在子进程中执行脚本命令了。所以如果脚本文件中有有关变量的设置的时候,第一、二种方式下,等脚本文件执行完毕,回到父进程bash中时,在脚本文件中设置的变量已经查不到了。而第三种方式下,因为脚本文件就是在父进程bash中执行的,所以等脚本文件执行完毕,仍然可以查到在脚本文件中设置的变量。

            b)第一种执行和第二种执行方式一样吗

            从原理上说,二者是一样的,因为在shell scripts文件的第一行有#!/bin/bash语句,就是说要用bash来执行,相当于shell *.sh


五、Linux中命令的查找的过程

         当我们在命令提示符下输入一个命令时,Linux的查找该命令的流程如下:

        (1)已相对命令或决定命令去查找(像/home/jianzai/script/my_script.sh,或./my_script.sh,但是如果直接是my_script.sh的话,那就不经过第1步了,从第2步开始找了 )

        (2)有alias找到命令,然后执行

        (3)shell内置的命令执行

        (4)在PATH环境变量设置的目录中去查找


六、备注

           第一种方式需要赋予文件可执行权限,第二种方式则不要,只要有shell(或python命令)的执行权限就行了。注意python、perl脚本的执行的方式都是类似的哦。

原创粉丝点击