背景
需要批量跑一批Linux的样本,通过shell脚本文件完成自动化行为,并需要nohup达到后台运行的目的,避免占用控制器。
代码逻辑
ls $1
:获取当前目录下所有文件名
排除自身(不然会嵌套循环)
获取自身文件名
nameFile=`basename ${BASH_SOURCE}`
或者
`basename $0`
$0
$0 是一个变量,保存了执行文件的文件名,相当于 C 语言中的 argv[0]。
但是
有一种情况$0 会出错,就是 cat abc.sh | bash 一般 $(basename $0) 比如脚本在 /root 目录下 脚本名为 abc.sh 全路径运行 $0 是 /root/abc.sh 当前目录运行时 ./abc.sh basename 取最后一个文件名。 如果是符号链接,$0 也不准 确实没有一种很好的方法来确定脚本自身文件名。 其实原理很简单。 因为维度不一样, shell 脚本运行的时候是无法直接获得比自己高一维度的信息的。 就像虚拟机里面运行的程序不知道自己是在虚拟机里面跑一个道理
${BASH_SOURCE}
当前执行的 shell 文件所在的路径及文件名。
${BASH_SOURCE-$0} 的含义?
nohup:在后台执行
但是
有部分样本如果在后台运行时需要输入,会造成执行流卡住。
只能取消后台执行,暂时没有更好的办法解决。
Shell脚本
#!/bin/bash
########################################
#Author : 建瓯最坏
#Time : 22.10.18
########################################
nameFile=`basename ${BASH_SOURCE}`
function EnumFiles()
{
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
EnumFiles $1"/"$file
else
if [ $file != $nameFile ]
then
nohup $1"./"$file
# echo $1"./"$file
fi
fi
done
}
EnumFiles $1