-1

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

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

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

我曾尝试编写一个脚本,但我怀疑它是否更接近我正在寻找的内容。

if [-f /home/(file.1) 或 (file.2)]
然后
  -exec /home/(file.1) 或 (file.2)
   如果 [ $! -eq 0];然后
   echo "没有错误继续构建"
   菲
   别的
   如果 [ $! -ne 0] ; 然后
   出口 ;
   菲
别的
   echo "/home/(file.1) 或 (file.2) 未找到,继续构建"
菲

任何帮助深表感谢。

提前致谢

4

2 回答 2

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"
于 2012-07-21T21:20:19.410 回答
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 会运行。

于 2012-07-21T21:16:09.317 回答