本文摘自PHP中文网,作者齐天大圣,侵删。
去年自己参与的一个项目中,有这样的一个需求:在多个目录下都有php脚本,需要去执行这行目录下的所有php脚本。拿个这个需求,我的考虑是,将目录作为参数传递给shell脚本而不是写死在程序中。这里需要补充个知识点:shell脚本程序的预定义变量
1 2 | /path/to/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
|
$0表示脚本文件名,$1表示第一个参数,依次类推。除此之外,$#表示参数的个数,$*表示所有的参数。
按照我的想法就是:
想拿到所有的目录名就非常的简单了,执行使用$*即可。但是,对于程序的健壮性,我们肯定需要对目录名就校验,检查是否输入了目录名以及该目录是否存在。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 检查是否输入了参数
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为后缀名的文件就行了。
1 2 3 4 5 6 7 8 9 | # 执行目录下的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脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/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
|
最后,我们来总结下该脚本用到了哪些知识:
条件判断以及循环执行
[ -d 文件名 ]来检测该文件是否为一个目录
find命令来查找目录下以.php为后缀的文件
shell编程的预定义变量
以上就是shell编程实战之执行多个目录下的php程序的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
adb shell是什么意思
linux中什么是shell
shell脚本高级编程的详细讲解
shell脚本实现的乘法表实例
linux怎么运行shell程序
通过几个案例掌握shell编程条件分支结构
linux默认使用的shell是什么
linux中如何利用shell判断文件或目录是否存在
linux终端执行shell脚本时提示权限不足
linux中如何运行shell程序
更多相关阅读请进入《shell》频道 >>
转载请注明出处:木庄网络博客 » shell编程实战之执行多个目录下的php程序