그래서 제가 하고 싶은 것은 파일 세트를 찾은 다음 발견된 파일을 에코하도록 하는 것입니다. 예를 들어, 이것이 내가 가지고 있는 것입니다.
#!/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