我正在尝试根据文件中没有的某些文本做出某些决定,但问题是当我的shell脚本在其中执行grep时文件将被修改。
#!/bin/bash
grep -q "decision" /home/tejto/test/testingshell
ret_code=$?
while [ $ret_code -ne 0 ]
do
echo $ret_code
grep -q "decision" /home/tejto/test/testingshell
echo 'Inside While!'
sleep 5
done
echo 'Gotcha!'
案文"决定"在启动此shell脚本时,文件中不存在该文件,但是当我通过其他某个bash提示修改此文件并将文本放在文本“#39; decision'在它,在这种情况下,我的脚本没有采取这种改变,它继续循环,所以这是否意味着我的shell脚本缓存该特定文件?
答案 0 :(得分:1)
因为您只在外部循环中设置ret_code
变量,而在下一个grep -q
命令之后不再在循环内设置它。
要解决此问题,您需要:
grep -q "decision" /home/tejto/test/testingshell
ret_code=$?
while [ $ret_code -ne 0 ]
do
echo $ret_code
grep -q "decision" /home/tejto/test/testingshell
ret_code=$?
echo 'Inside While!'
sleep 5
done
echo 'Gotcha!'
或者你可以这样缩短你的脚本:
#!/bin/bash
while ! grep -q "decision" /home/tejto/test/testingshell
do
echo $?
echo 'Inside While!'
sleep 5
done
echo 'Gotcha!'
即。无需使用变量并在grep -q
条件下直接使用while
。
[编辑:Tejendra]
#!/bin/bash
until grep -q "decision" /home/tejto/test/testingshell
do
echo $?
echo 'Inside While!'
sleep 5
done
echo 'Gotcha!'
最后一个解决方案不会使用ret_code并将所需结果作为第一个解决方案。