shell if-else问题无法跳转到else块

时间:2017-12-07 07:42:40

标签: shell if-statement

#!/bin/bash
read -p "Enter your MO or attribute name: " name
grep -q $name *.txt      #judge the input whether exists or not. if it exists , $? will equal 0, if not , $? will equal 1. 
echo $?
if [ $? -eq 0 ];then
  echo "Send to file 2"
  echo $name >> 2.txt
else
  echo "Send to file 1"
  echo $name >> 1.txt
fi

以下是计划进度

Enter your MO or attribute name: sssqq
1                 #means no file contains "sssqqq"
Send to file 2

Enter your MO or attribute name: chenghuang
0                  #means some file contains "chenghuang"
Send to file 2

如您所见,无论输入是否存在于文件中,它们都将被发送到2.txt。但我的目的是如果输入存在于文件中,输入将被发送到文件2,如果没有,它将被发送到文件1。 if-else有什么问题?

2 个答案:

答案 0 :(得分:0)

将结果保存到变量并使用它进行操作:

res=$?
echo $res
if [ $res -eq 0 ];then
  echo "Send to file 2"
  echo $name >> 2.txt
else
  echo "Send to file 1"
  echo $name >> 1.txt
fi

问题在于,您调用的echo $?会将之前的结果$?替换为自己的新结果。

答案 1 :(得分:0)

您的问题是使用$?$?始终保存最后一个命令的返回值。运行echo $?后,if语句中的$?保留了返回值echo