だから私がしたいのは、ファイルセットを見つけて、見つかったファイルをエコーすることです。たとえば、これが私が持っているものです。
#!/bin/bash
LaunchDaemon="LaunchDaemon.plist"
launchAgent="LaunchAgent"
mobileLaunchDaemon="MobileDaemon.plist"
mobileAgent="MobileAgent"
if [ -f "$LaunchDaemon" ] || [ -f "$launchAgent" ] || [ -f "$mobileLaunchDaemon" ] || [ -f "$mobileAgent" ]
then
echo "<result>Found</result>"
else
echo "<result>Not Found</result>"
fi
だから、これはそのうちの1つを見つけることができるかどうかを教えてくれますが、何を探しているのかわかりません。そのステートメントを含む別のステートメントを作成してelif
動作しますが、最初のステートメントを見つけると、そこで停止し、他のステートメントもあるかどうかを知らせません。したがって、これが意味があることを願っています。私はどのファイルが見つかったかを表示する方法を見つけようとしています。
ベストアンサー1
if
テストを複数に分割する必要があります。
if [ -f "$LaunchDaemon" ]
then
echo $LaunchDaemon found
elif [ -f "$launchAgent" ]
then
echo $launchAgent found
elif [ ...
...
else
echo Not found
fi
構造を入力してください。 (空白は直接記入してください。)
一致するものをすべて見つけるには、複数のテストで実行し、変数を設定して見つかったものがあるかどうかを確認してください。
found=0
if [ -f "$LaunchDaemon" ]
then
echo $LaunchDaemon found
found=1
fi
if [ -f "$launchAgent" ]
then
echo $launchAgent found
found=1
fi
...
if [ $found == 0 ]
then
echo Not found
fi
今では、どの変数が見つかったのかを知るために変数を設定したい場合があります。これは、一致するプログラムまたはファイルを検索しようとしたときによく発生します(たとえば、以前はオペレーティングシステムのディストリビューションがあるか、それに依存していた可能性があるため、それを見つける/usr/lib/sendmail
ため/usr/sbin/sendmail
に検索する必要がありました)。
found=
for f in "$LaunchDaemon" "$launchAgent" "$mobileLaunchDaemon" "$mobileAgent"
do
[[ -f "$f" ]] && found="$f"
done
これで$found
見つかった項目を指定してテストできます。
if [ -n "$found" ]
then
echo Found: $found
else
echo Nothing found
fi
2番目のループも見つけることができますみんなマイナーな変更があるバージョン:
found=
for f in "$LaunchDaemon" "$launchAgent" "$mobileLaunchDaemon" "$mobileAgent"
do
[[ -f "$f" ]] && found="$found $f"
done
これの欠点は、前にスペースがある可能性があるため、それらを削除する必要があることです。
found="${found# }"