运行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。但我仍然得到同样的错误。有人可以帮我解决这个问题吗?
答案 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
中应该有一个程序(bash内部或外部)运行,它返回一个退出代码。如果是0
则if为true,否则为false。您可以使用grep
或任何其他实用程序,例如test
或/usr/bin/[
。但bash有内置的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