-1

シェル スクリプトを作成する必要がありますが、その方法がわかりません。基本的に、ファイルを見つけるスクリプトを作成する必要があります (名前が異なる可能性があります)。いずれかのファイルが存在する場合は実行する必要があり、0 (エラーなし) を返す場合はビルドを続行し、0 でない場合 (エラーを返す) は終了する必要があります。いずれかのファイルが見つからない場合は、ビルドを続行する必要があります。

見つけなければならないファイルは、file.1 または file.2 のいずれかである可能性があるため、(file.1) または (file.2) という名前にすることができます。

より明確にするためのいくつかの条件。1) いずれかのファイルが存在する場合は、実行する必要があります。エラーがある場合は終了し、エラーがない場合は続行します。2) 何も存在しない可能性があります。その場合は、ビルドを続行する必要があります。3) 両方のファイルが同時に存在することはありません (追加情報)

スクリプトを作成しようとしましたが、探しているものにさらに近いとは思えません。

[-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 に答える