您的位置:首页 > 运维架构 > Shell

笑谈区别之--执行Shell脚本的四种方法

2018-01-29 00:00 337 查看

执行shell脚本方式:

法一、绝对路径方式:

[root@Dasoncheng ~]# cat 2.sh
#!/bin/bash
pstree

[root@Dasoncheng ~]# /root/2.sh
├─sshd───sshd───bash───2.sh───pstree
##需要具有-x执行权限,因为这样执行 没有指定命令解释器、则会使用脚本里面指定的命令解释器(如#!/bin/bash)去执行该脚本.
##如果脚本里面也没有指定,则会调用系统默认的shell解释器(echo $SHELL)查看;
##通过pstree可以看到,是单独启动了2.sh这个子shell来执行脚本里面的命令的;

法二、相对路径方式:

[root@Dasoncheng ~]# ./2.sh
├─sshd───sshd───bash───2.sh───pstree
##同法一,就是路径方式不同;

法三、bash命令调用:

[root@Dasoncheng ~]# sh 2.sh
├─sshd───sshd───bash───sh───pstree
##这里就是指定了命令解释器bash,即单独启动了sh这个子shell来执行命令;

[root@Dasoncheng ~]# which sh
/usr/bin/sh
[root@Dasoncheng ~]# ll /usr/bin/sh
lrwxrwxrwx 1 root root 4 Feb 24  2017 /usr/bin/sh -> bash
[root@Dasoncheng ~]# ll /usr/bin/bas
base64      basename    bash        bashbug     bashbug-64
[root@Dasoncheng ~]# ll /usr/bin/bash
-rwxr-xr-x 1 root root 960472 Dec  7  2016 /usr/bin/bash

法四、". 2.sh"点空格相对路径 或者"./root/2.sh"点空格绝对路径方式:

[root@Dasoncheng ~]# . 2.sh
├─sshd───sshd───bash───pstree
##这个及下面的绝对路径,都是直接在当前shell环境下面 执行了shell脚本;(没有创建子shell)
##其实". "点空格 就是调用了系统里面的一个函数,这里不讲;

[root@Dasoncheng ~]# . /root/2.sh
├─sshd───sshd───bash───pstree

说下几种方式的区别:

第一种和第二种没有什么区别,两种方式都需要提前赋予脚本以执行权限。

第三种是把脚本当做bash的调用来处理,所以,脚本不需要有执行权限就可以执行。

前三种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。

第四种是使脚本内容在当前shell里执行,而不是单独开子shell执行。

开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,不做特殊通道处理的话,父shell是不可见的。

而在当前shell中执行的话,则所有设置的环境变量都是直接生效可用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: