if [ (`grep -R -l "${images}" *` | wc -l) == 1 ]
这不起作用。如果我在命令行执行此操作,那么它会给我一个数字。
grep -R -l "${images}" * | wc -l
我想看看那个数字是否为1.如果它是做某事。如果不做别的事。为什么第一个代码块会给我一个sytax错误?
我已更新了我的代码。 image_count与数字是正确的,但由于某种原因,即使$ image_count真的是1,它总是在做else。所以我的if语句不正确。谁知道为什么?
image_count=`grep -R -l "${images}" * | wc -l`
echo $image_count
if [ $image_count == 1 ]; then
new_name=`grep -R -l "slide[0-9]"`
echo new_name
else
echo "non 1"
fi
答案 0 :(得分:1)
所以我的if语句不对。任何人 知道为什么吗?
嗯,这是测试语句(在[ ]
内)似乎是错误的。
它混合了两种语言:bash的命令语言(命令,可执行文件连接在一起+控制流语法)。
OTOH,在上面的[]
内,它是test
程序的表达式语言,请参阅联机帮助页:$ man test:“(表达式)”。
表达式不是一个任意的shell命令,但是从基元(字符串,数字等)和运算符(-eq,-oe)构建的东西。
这两种语言之间的一个桥接当然是反引号 - 它在其中运行bash命令并将输出替换为字符串,test
然后可以使用它。
所以,正如其他人简要回答的那样,只需将反推出移到左侧的边界,即从:
if [ (`grep -R -l "${images}" *` | wc -l) == 1 ]
到
if [ `grep -R -l "${images}" * | wc -l` = 1 ]
更新:查看您的第二个版本,另一个问题是==
不是test
中的有效运算符(再次参见联机帮助页)。请改用普通=
。
另一方面,bash本身支持==
(在最近的版本中) - 有点令人困惑......
答案 1 :(得分:0)
使用:
if [ `grep -R -l "${images}" * | wc -l` == 1 ]
答案 2 :(得分:0)
foo=`grep -R -l "${images"} * | wc -l`
if [ $? -ne 0 ]; then
if [ $foo == 1 ]; then
echo "1 file found";
else
echo "$foo files found";
fi
else
echo "no files found";
fi
答案 3 :(得分:0)
试
#!/bin/bash
if [ `grep -R -l "${images}" * | wc -l` == "1" ]; then
echo "hazzar!"
fi
答案 4 :(得分:0)
您可以避免复杂的管道使用,并使用grep的'-c'选项输出匹配行的数量。
if [ $( grep -rlc "${images}" * ) -eq 1 ]; then
这里有多件事,使用'-c'并与数字1比较,与字符串1进行比较。 (-R和-r相当于grep手册)