• 技术文章 >运维 >linux运维

    shell编程实战之执行多个目录下的php程序

    齐天大圣齐天大圣2020-09-27 11:09:10原创575
    去年自己参与的一个项目中,有这样的一个需求:在多个目录下都有php脚本,需要去执行这行目录下的所有php脚本。

    拿个这个需求,我的考虑是,将目录作为参数传递给shell脚本而不是写死在程序中。这里需要补充个知识点:shell脚本程序的预定义变量

    /path/to/scriptname  opt1  opt2  opt3  opt4 
       $0            $1    $2    $3    $4

    $0表示脚本文件名,$1表示第一个参数,依次类推。除此之外,$#表示参数的个数,$*表示所有的参数。

    按照我的想法就是:

    shell脚本 目录名1  目录名2 ……

    想拿到所有的目录名就非常的简单了,执行使用$*即可。但是,对于程序的健壮性,我们肯定需要对目录名就校验,检查是否输入了目录名以及该目录是否存在。

    # 检查是否输入了参数
    if (( $# < 1));then 
        echo 'please input some dirs'
        echo 'Usage ${0} dir1 dir2 ...'
        exit 1
    fi
    
    # 检查目录
    for dir in $*
    do
        if [ ! -d $dir ];then
            echo "$dir is not a dir"
            exit 2
        fi
    done

    首先,我们检查用户是否输入了参数,通过预定义变量$#来判断,$#如果小于1则表示没有输入参数。然后,进行目录的检测,查看输入的参数是否是一个目录。这里用[ ! -d $dir ] 来检测 。

    验证性的代码完成后,接下来就是要执行目录下的php脚本了。其实主要的一点就是获取目录下的php文件名。一般的我们都以.php结尾的文件名作为php的脚本名。所以,这里我们只要执行以.php为后缀名的文件就行了。

    # 执行目录下的php脚本
    for dir in $*
    do
        files=$(find $dir -name '*.php')
        for file in $files
        do
            $PHPBIN $file >/dev/null 2>&1 
        done
    done

    这里我们使用了两层循环,外循环遍历出所有目录,内层循环遍历目录下的所有php文件。

    下面,贴出完整的shell脚本

    #!/bin/bash
    # 执行多个目录下的php脚本程序
    PHPBIN=/usr/local/php/bin/php
    
    if (( $# < 1));then 
        echo 'please input some dirs'
        echo 'Usage ${0} dir1 dir2 ...'
        exit 1
    fi
    
    # 检查目录
    for dir in $*
    do
        if [ ! -d $dir ];then
            echo "$dir is not a dir"
            exit 2
        fi
    done
    
    # 执行目录下的php脚本
    for dir in $*
    do
        files=$(find $dir -name '*.php')
        for file in $files
        do
            $PHPBIN $file >/dev/null 2>&1 
        done
    done

    最后,我们来总结下该脚本用到了哪些知识:

    以上就是shell编程实战之执行多个目录下的php程序的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:shell
    上一篇:全面整理linux下shell中各种括号的作用及用法 下一篇:shell编程实战之内存检查超过设定值杀死php-fpm进程
    线上培训班

    相关文章推荐

    • 详解php命令行写shell实例• 一起看看PHP执行普通shell命令流程• 一文读懂shell编程三剑客之一的sed命令• 全面整理linux下shell中各种括号的作用及用法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网