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

그래서 이것은 그 중 하나를 찾을 수 있는지 알려줄 것이지만 어떤 것을 찾고 있는지는 알려주지 않을 것입니다. 해당 명령문을 포함하는 다른 명령문을 만들었고 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

두 번째 루프도 찾을 수 있습니다모두사소한 변경이 있는 버전:

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

관련 정보