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

答え2

ここでは配列が最善のアプローチです。

#!/bin/bash
#Store the filenames in an array, also less management overhead
arry=( "LaunchDaemon.plist" "LaunchAgent" "MobileDaemon.plist" "MobileAgent" )
#Optioinally if you wish to add one more file to check you could
#uncomment the below line
#arry+=("$1") #One more file added from the command line
for i in "${arry[@]}" #Iterate through each element using a for loop
do
 if [ -f "$i" ]
 then
  echo "<result> $i Found</result>" 
 else
  echo "<result> $i Not Found</result>"
 fi
done

答え3

この試み

#!/bin/bash
search_LaunchDaemon="LaunchDaemon.plist"
search_launchAgent="LaunchAgent"
search_mobileLaunchDaemon="MobileDaemon.plist"

for filex  in ${!search_*}
do
found=${!filex}
#echo  -e "${filex}=${!filex}"
#we remove the prefix "search_"
IFS="_" read part1 part2 <<< "${filex}"

if [[ -f $found ]];
then
echo "I have found ${part2}"
else
echo "${part2} not found!"
fi
done

関連情報