if else语句中出现意外的文件结束错误

时间:2013-06-17 20:13:41

标签: linux bash shell if-statement end-of-life

运行if else语句时,我一直收到意外的文件错误

#! /bin/bash
echo -e "1: Proband\n 2: mincount\n Enter an option:"
read promin
echo $promin
if ($promin == 1) then
echo -e "Enter the proband file name\n"
read proband_file
echo "$proband_file"
endif
if ($promin == 2) then
echo -e "enter the min count number\n"
read mincount
echo "$mincount mincount"
endif

我尝试过fi而不是elseif。但我仍然得到同样的错误。有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:5)

这是你在bash中编写if语句的方法:

if - then - fi

if [ conditional expression ]
then
    statement1
    statement2
fi

if - then - else - fi

If [ conditional expression ]
then
    statement1
    statement2
else
    statement3
    statement4
fi

if - then - elif - else - fi

If [ conditional expression1 ]
then
    statement1
    statement2
elif [ conditional expression2 ]
then
    statement3
    statement4
else
    statement5
fi

条件表达式的示例:

#!/bin/bash
count=100
if [ $count -eq 100 ]
then
  echo "Count is 100"
fi

答案 1 :(得分:2)

<强>改进

if是语法不正确。在if中应该有一个程序(内部或外部)运行,它返回一个退出代码。如果是0则if为true,否则为false。您可以使用grep或任何其他实用程序,例如test/usr/bin/[。但有内置的test[

如果[ "$var" -eq 1 ]等于1,$var会返回0;如果$var不等于1,则返回1。

在您的情况下,我建议您使用case代替if-then-elif-else-fi符号。

case $x in 
1) something;;
2) other;;
*) echo "Error"; exit 1;;
easc

甚至使用select。例如:

#!/bin/bash

PS3="Enter an option: "
select promin in "Proband" "mincount";do [ -n "$promin" ] && break; done
echo $promin

case "$promin" in
  Proband) read -p "Enter the proband file name: " proband_file; echo "$proband_file";;
  mincount) read -p "Enter the min count number: " mincount; echo "$mincount mincount";;
  *) echo Error; exit 1;;
esac

这将打印“输入选项:”提示并等到呈现正确的答案(1或2或^ D - 完成输入)。

1) Proband
2) mincount
Enter an option: _

然后它检查case部分的答案。同时$promin包含字符串,$REPLY包含输入的答案。它也可以在case中使用。

答案 2 :(得分:0)

我刚刚更改了您的代码,我认为它现在可以正常运行。

我认为问题是你应该 fi 而不是 endif ......

#!/bin/sh
echo "1: Proband\n2: mincount\nEnter an option:"
read promin
echo $promin
if [ $promin -eq "1" ]
then
    echo "Enter the proband file name\n"
    read proband_file
    echo "$proband_file"
elif [ $promin -eq "2" ]
then
    echo "enter the min count number\n"
    read mincount
    echo "$mincount mincount"
fi

答案 3 :(得分:0)

#! /bin/bash
echo -e "1: Proband\n2: mincount\nEnter an option:"
read promin
echo $promin
if (($promin == 1)); then
echo -e "Enter the proband file name\n"
read proband_file
echo "$proband_file"
elif (($promin == 2)); then
echo -e "Enter the min count number\n"
read mincount
echo "$mincount mincount"
fi

我不知道你是否需要一个if-else语句或两个语句。上面有一个if-else。 如果你需要两个if语句,那么在“echo”$ proband_file“”行下面插入一行代码:

fi

然后将“elif(($ promin == 2));”替换为“使用以下代码:

if (($promin == 2)); then