• 这篇文章主要介绍了Linux执行shell脚本的4种方法总结,即在Linux运行shell脚本的4种方法,需要的朋友可以参考下bash shell脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为hello.sh,文件...

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下bash shell脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。

    方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:

    代码如下:


    cd /data/shell

    ./hello.sh

    ./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

    方法二:以绝对路径的方式去执行bash shell脚本:

    代码如下:


    /data/shell/hello.sh


    方法三:直接使用bash 或sh 来执行bash shell脚本:

    代码如下:


    cd /data/shell

    bash hello.sh

    代码如下:


    cd /data/shell

    sh hello.sh

    注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊,呵呵……。


    方法四:在当前的shell环境中执行bash shell脚本:

    代码如下:


    cd /data/shell

    . hello.sh

    代码如下:


    cd /data/shell

    source hello.sh

    几种方法的对比:
    前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。
    方法四则是在当前shell中执行的。

    展开全文
  • Linux执行shell脚本的4种方法总结,即在Linux运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码代码如下: cd /data/shell ./hello.sh ./的意思...

    Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法:

    方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:

    复制代码 代码如下:

    cd /data/shell
    
    ./hello.sh


    ./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录 (/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

     

    方法二:以绝对路径的方式去执行bash shell脚本:

    复制代码 代码如下:

    /data/shell/hello.sh

     

    方法三:直接使用bash 或sh 来执行bash shell脚本:

    复制代码 代码如下:

    cd /data/shell
    
    bash hello.sh


    复制代码 代码如下:

    cd /data/shell
    
    sh hello.sh


    注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三 是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用 指定bash路径自然也好理解了啊,呵呵……。

     

    方法四:在当前的shell环境中执行bash shell脚本:

    复制代码 代码如下:

    cd /data/shell
    
    . hello.sh


    复制代码 代码如下:

    cd /data/shell
    
    source hello.sh


    前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。

    方法五:在shell中启动另外的shell

    在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh)、source(source script.sh)、fork(./script.sh) 
    1、exec(exec /home/script.sh): 
    使用exec来调用脚本,被执行的脚本会继承当前shell的环境变量。但事实上exec产生了新的进程,他会把主shell的进程资源占用并替换脚本内容,继承了原主shell的PID号,即原主shell剩下的内容不会执行。

    2、source(source /home/script.sh)

    使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。

    3、fork(/home/script.sh)

    直接运行脚本,会以当前shell为父进程,产生新的进程,并且继承主脚本的环境变量和声明变量。执行完毕后,主脚本不会保留其环境变量和声明变量。

    总结:这样来看fork最灵活,source次之,exec最诡异。

     

    查看哪个用户用的什么shell登录:

    1.echo $SHELL          #查看当前登录的用户所用的shell
    2.grep username /etc/passwd 看最後一段    #查看想要知道的用户登录所用的shell

    展开全文
  • 执行脚本test.sh:./test.sh 中断脚本test.sh:ctrl+c 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(...

    后台运行脚本

    1. 执行脚本test.sh:./test.sh
    2. 中断脚本test.sh:ctrl+c
    3. 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z
    4. 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid)

    1. 直接在后台运行脚本test.sh:./test.sh &
    2. 查看当前shell环境中已启动的任务情况:jobs
    3. 将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid)
    4. 中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number

    以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。

    1. 不中断的在后台运行test.shnohup ./test.sh &(test.sh的打印信息会输出到当前目录下的nohup.out中)
    2. 使用jobs可看到test.sh处于running状态
    3. 使用ps -ef |grep test.sh可查看到正在运行的test.sh脚本进程
    4. 退出当前shell终端,再重新打开,使用jobs看不到正在运行的test.sh,但使用ps -ef可以看到

    在后台不中断的运行test.sh,可以使用nohup忽略hangup信号,或者使用setsid将其父进程改为init进程(进程号为1)

    1. 不中断的在后台运行test.sh另一个命令setsid ./test.sh &
    2. 使用ps -ef |grep test.sh可看到test.sh进程的父进程id为1

    测试脚本

    #!/bin/bash
    
    int=1
    while(( $int<=100 ))
    do
        echo $int
        let "int++"
        sleep 1
    done
    展开全文
  • linux下如何执行PHP脚本Linux执行 php 脚本时通常是可以使用以下命令:1 #/usr/local/php/bin/php test.php 为简化输入可把此php执行程序 copy到系统命令目录下:1 #cp /usr/local/php/bin/php /usr/sbin/...

    linux下如何执行PHP脚本

    在 Linux 下执行 php 脚本时通常是可以使用以下命令:

    1

    #/usr/local/php/bin/php test.php

    为简化输入可把此php执行程序 copy到系统命令目录下:

    1

    #cp /usr/local/php/bin/php /usr/sbin/

    验证:输入以下命令,如正确获取 php 版本,说明操作成功。

    1

    #php -v

    这样,以后再执行PHP脚本时可直接采用以下输入方式即可。

    1

    #php a.php

     


    展开全文
  • Linux中Shell脚本执行(三种方法)

    Shell 脚本的执行方式通常有如下三种

    (1)bash script-name 或者 sh script-name;(2)path/script-name或者./script-name;(3)sourcescript-name或者. script-name。下面,分别介绍下这三种方式的特点:

    (1)bash script-name或者sh script-name

    这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常使用的方法,或者脚本文件开头没有指定解释器时需要使用的方法推荐使用这种方法。

    (2)path/script-name或者./script-name

    指在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限改为可执行(即文件权限属性为x位)。具体方法为:chmod a+x script-name。然后通过执行脚本绝对路径或者相对路径就可以执行脚本了。
    注意:在生产环境中,运维人员由于忘记为该脚本设置可执行权限,然后直接使用,导致出错。因此,推荐第一种 bashscript-name。

    (3)source script-name或者. script-name

    source或者“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。

    注意:这是和其他几种执行shell方式的最大不同。

    举个栗子:

    新建一个文件test_sh.sh,不给它赋予任何可执行的权限x。


    编辑内容如下:


    文件以及文件中内容与常见的shell不同之处在于,这里的文件没有赋予可执行权限以及在文件内容中的首行中没有添加#!/bin/bash。我们现在用上述介绍的几种方式来测试下效果。

    第二种方式./script-name,执行效果如下:


    报权限拒绝,Permission denied,此时,我们只要更改文件的属性为可执行即可。

    执行第一种bash script-name,效果如下:


    可以成功执行,输出:hello。但是,我们输入命令:echo $name,发现如下:


    name的值是空的。不难理解,bash script-name是产生了一个子进程shell,而我们当前的操作还在父shel中因此得不到该变量值。

    执行第三种方法. test_sh.sh,效果如下:


    可以成功的输出变量的值。这是因为source script-name和. script-name是将script-name中的内容直接加载到当前的shell,因此能够输出当前变量的值。

    刚才第二种方式我们执行失败,现在我们通过chmod a+x script-name,然后再次执行上述命令,查看效果:


    注意:该种方式也是产生了一个子进程Shell,因此echo $name仍然找不到该变量。

    补充知识点:

    一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:

    #!/bin/bash

    #!/bin/sh

    注意:

    (1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。

    (2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。


    展开全文
  • Linux执行Python脚本

    2019-07-04 23:48:33
    1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。安装完毕,可将Python加入环境变量...
  • linux环境中,我们总会有一些命令需要经常用,例如经常跳转到某些目录下或者执行某些命令,输入一连串的命令是很烦的,此时我们可以预先写一些脚本然后根据我们的选择自动执行命令,那岂不是完美,本脚本就是为此...
  • Linux下定时执行脚本

    2016-08-25 10:05:24
    Linux下定时执行脚本 来源:http://www.blogjava.net/decode360/archive/2009/09/18/287743.html   今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置。Linux下的定时执行主要是使用...
  • Python脚本直接运行不需要部署Apache、Nginx等服务器,在拥有Python环境的前提下,直接使用python 文件路径+文件名.py即可运行脚本。* 注意:代码最上方要标明路径 如:#!/user/python 关于参数 Python中sys.argv...
  • 命令执行脚本的内容直接影响到父进程的。所以你source之后,里面配置的变量都会加入到当前环境中! 而./xx.sh 以及 sh xx.sh 是新开一个子shell运行这个脚本,当脚本运行完毕了,sh中设置的变量就不见了!(该子...
  • Linux上面执行定时任务,我们可以利用crontab -e直接编辑定时任务 另外我们还可以写好shell脚本,定时去执行shell脚本,这两个方法都可以起到定时执行的作用 下面我详细说一下入如何执行shell脚本 1.声明一下我...
  • Linux脚本执行方式

    2019-08-14 16:01:25
    直接执行:使用绝对/相对路径,或者bash + script.sh的方式运行脚本脚本会使用一个新的bash环境运行,即该脚本在原bash的子进程中运行,因此脚本中定义的变量不会在原bash中出现 使用source/.的方式执行:使用...
  • 说明:此文针对需要用hive来查询长时间数据的人员,而且是需要按照天来输出查询数据,考虑到如果查询多天的,数据量过大会造成集群拥堵,所以按天输出,最终再做汇总。 需求来源:如果你每天接触的都是日志类数据,...
  • Linux开机的时候,会有一步读取/etc/inittab配置文件,选定系统运行级别,然后进行系统初始化,执行/etc/rc.d/下的rc脚本;而其中/etc/rc.d/rc.local自启动脚本Linux留给用户自定义个性启动项的一个脚本。 你只要...
  • 原文地址:https://blog.csdn.net/timchen525/article/details/76407735Shell 脚本执行方式通常有如下三种:(1)bash script-name 或者 sh script-name;(2)path/script-name或者./script-name;(3)source ...
  • linux定时执行shell脚本

    2018-08-30 20:37:35
    写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据、数据库数据等 不适合人工经常做的一些操作这里简单说下   Shell俗称壳,类似于DOS...
  • linux执行shell脚本,当前用户执行没有问题,设置为定时任务却报错,有可能的原因有主要原因是crontab执行和当前用户的执行权限和配置环境不一样,所以导致你的配置环境在crontab用户上还得重新配置一次,只需要...
  • 在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux运行脚本的时候,需要修改下脚本的的编码格式, vi 脚本,底行模式,输入 set fileformat=unix  ...
  • 最近遇到了一些关于执行脚本环境变量方面的问题,在此总结一下。 linux中有三种执行脚本的方法: 1. souce xxx.sh  . xxx.sh 2. bash xxx.sh  sh xxx.sh 3. ./xxx.sh 这三者的显著区别是第1种在当前...
1 2 3 4 5 ... 20
收藏数 201,259
精华内容 80,503