因此,我要尝试的是寻找一组文件,然后让其回显已找到的文件。例如,这就是我所拥有的
#!/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
内部语句的语句,该语句的工作原理类似,但是如果找到了第一个语句,它将停在那里,并且不会告诉我其他语句是否也在那里。所以,我希望这是有道理的,我只是想找到一种方法来显示找到了哪些文件。
您需要将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
依赖于OS发行版,因此我们需要进行搜索以找到它)。
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# }"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句