shell找到一个文件,执行它 - 如果'错误'则退出,如果'没有错误'则继续

时间:2012-07-21 21:07:41

标签: linux bash shell find

我必须编写一个shell脚本,我不知道如何去做。 基本上我必须编写一个脚本,我会找到一个文件(可能有不同的命名)。如果任一文件存在则必须执行,如果它返回0(无错误),它应该继续构建,如果它不等于0(返回错误),它应该退出。如果找不到任何一个文件,它应该继续构建。

我必须找到的文件可以是file.1或file.2,因此可以命名为(file.1)或(file.2)。

使其更清晰的一些条件。 1)如果任一文件存在,它应该执行 - 如果它有任何错误它应该退出,如果没有错误它应该继续。 2)没有可能存在,如果是这种情况那么它应该继续构建。 3)两个文件不会同时出现(附加信息)

我试过写一个脚本,但我怀疑它更接近我正在寻找的东西。

if [-f /home/(file.1) or (file.2)]
then 
  -exec /home/(file.1) or (file.2)
   if [ $! -eq 0]; then
   echo "no errors continuing build"
   fi
   else
   if [ $! -ne 0] ; then
   exit ;
   fi
else 
   echo "/home/(file.1) or (file.2) not found, continuing build"
fi

非常感谢任何帮助。

提前致谢

2 个答案:

答案 0 :(得分:2)

DOIT=""
for f in file1.sh file2.sh; do
  if [ -x /home/$f ]; then DOIT="/home/$f"; break; fi
done
if [ -z "$DOIT" ]; then echo "Files not found, continuing build"; fi
if [ -n "$DOIT" ]; then $DOIT && echo "No Errors" || exit 1; fi

对于那些对我的语法感到困惑的人,请尝试运行:

true && echo "is true" || echo "is false"
false && echo "is true" || echo "is false"

答案 1 :(得分:0)

只需放行

file.sh
如果您将脚本设置为在出错时退出,则脚本中的

应该可以正常工作。

例如,如果您的脚本是

#!/bin/bash -e
echo one
./file.sh
echo two

然后,如果file.sh存在且可执行,它将运行并且您的整个脚本将运行。如果不是,则在尝试执行不存在的文件时脚本将失败。

如果要执行一个文件或另一个文件,请将想法扩展到以下内容:

#!/bin/bash -e
echo one
./file1.sh || ./file2.sh
echo two

这意味着如果file1.sh不存在,它将尝试file2.sh,如果存在,它将会运行并且您的整个脚本将会运行。

这当然会优先考虑file1,这意味着如果它们都存在,那么只有file1会运行。