热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

去年自己参与的一个项目中,有这样的一个需求:在多个目录下都有php脚本,需要去执行这行目录下的所有php脚本。
去年自己参与的一个项目中,有这样的一个需求:在多个目录下都有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 &#39;please input some dirs&#39;
    echo &#39;Usage ${0} dir1 dir2 ...&#39;
    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 &#39;*.php&#39;)
    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 &#39;please input some dirs&#39;
    echo &#39;Usage ${0} dir1 dir2 ...&#39;
    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 &#39;*.php&#39;)
    for file in $files
    do
        $PHPBIN $file >/dev/null 2>&1 
    done
done

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

  • 条件判断以及循环执行

  • [ -d 文件名 ]来检测该文件是否为一个目录

  • find命令来查找目录下以.php为后缀的文件

  • shell编程的预定义变量

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


推荐阅读
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • VSCode与Gitee集成:项目提交的高效实践
    本文介绍如何利用VSCode内置的Git工具将项目提交到Gitee,简化Git命令的使用,提升代码管理效率。同时分享一些常见的踩坑经验和解决方案。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文详细探讨了如何在Docker环境中实现单机部署Redis集群的方法,提供了详细的步骤和配置示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍如何在MSYS2环境中将Zsh设置为默认Shell,通过修改msys2.ini、mingw32.ini和mingw64.ini文件实现。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
author-avatar
神秘的穿越火线99_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有