在if-else语句中使用grep


10

如果输入的字符串不在文件中,为什么我的代码没有输出。当我输入一个字符串但它不在文件中时,没有响应返回,它重新循环回到开头。有人可以告诉我我的代码有什么问题吗?

while :
do
echo "Please enter a string"
read input_string
echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
read input_string1
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done

3
您期望发生什么?
Patrick

它的意思是说您输入的字符串会在文件中查找,并说明是否存在该字符串。我现在意识到,我需要再输入其他代码。谢谢
Adam Poyser 2014年

input_string顺便说一句,它并不是一个真正的口语变量名称:)
玛丽安

Answers:


10
while :
 do
     echo "Please enter a string"
     read input_string
     echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
     read input_string1
     grep -q "${input_string}" "${input_string1}"                                                                 
     if [ $? -eq 0 ] ; then
         echo  "Your string has been found"
     else 
         echo "Your string has not been found"
     fi
 done

1
我刚刚尝试了这段代码,它的工作原理,谢谢!我没有意识到我所有的问题都在于没有其他声明。感谢您的快速反应
亚当Poyser

2
您需要引用grep参数。想想如果我的搜索字符串包含-v,或者文件名中包含空格,会发生什么情况。
安赫尔

0

您找出了您想念的其他分支,但有一个建议:

而不是使用$input_string $input_string1try ${input_string} ${input_string1}来确保您不会$input_string跟随1。


不,您建议的替换与原始替换完全相同。$input_string1是变量的值input_string1(由于未加引号,所以它是分割的和全局的),它不涉及变量input_string
吉尔(Gilles)'“ SO-别再邪恶了”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.