if thenステートメントで見つかった結果をどのように表示できますか?

if thenステートメントで見つかった結果をどのように表示できますか?

だから私がしたいのは、ファイルセットを見つけて、見つかったファイルをエコーすることです。たとえば、これが私が持っているものです。

    #!/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# }"

おすすめ記事