我试图计算可以“找到”脚本的文件数量,如果它不止一个,请提供一种错误消息,如果它的零给出另一个错误消息。
如果我跑
find procesoSitemap-*.jar -exec printf '.' \;| wc -c
它有效,我可以看到搜索结果的编号,但是如何将其实现到脚本中呢?
##!/bin/bash
FINDPS="find procesoSitemap-*.jar -exec printf '.' \;| wc -c"
if $FINDPS = 1
then
echo "There is ONE procesoSitemap jar file"
else
echo "There should be only ONE procesoSitemap jar file"
fi
谢谢!
答案 0 :(得分:6)
使用反引号;
FINDPS=`find procesoSitemap-*.jar -exec printf '.' \;| wc -c`
还会修复您的if
行;
if [ $FINDPS -eq 1 ]
then
echo "There is ONE procesoSitemap jar file"
else
echo "There should be only ONE procesoSitemap jar file"
fi
答案 1 :(得分:1)
我相信你的脚本有一些小问题。试试这个:
#!/bin/bash
FINDPS=`find . -name "procesoSitemap-*.jar" | wc -l`
if [[ $FINDPS == 1 ]] ; then
echo "There is ONE procesoSitemap jar file"
else
echo "There should be only ONE procesoSitemap jar file"
fi
答案 2 :(得分:1)
您的if
声明应如下所示:
if (( FINDPS == 1 ))
在Bash或POSIX sh
中:
if [ $FINDPS -eq 1 ]
您的变量分配应为:
FINDPS=$(find procesoSitemap-*.jar -exec printf '.' \; | wc -c)
在Bash或任何POSIX shell中。在旧版Bourne sh
中,使用反引号:
FINDPS=`find procesoSitemap-*.jar -exec printf '.' \;| wc -c`
你对Bash的shebang应该是:
#!/bin/bash
你有太多'#'。
答案 3 :(得分:1)
您可以通过避免find ... -exec ... \; | ...
:
- FINDPS="find procesoSitemap-*.jar -exec printf '.' \;| wc -c"
+ FINDPS="$(find . -name "procesoSitemap-*.jar" -print0 | tr -dc '\0' | wc -c)"
答案 4 :(得分:0)
$()
或``
,前者是首选(并且是POSIX),但后者适用于某些较旧的shell。