2015-10-05 72 views
0

好吧,这是一个任务,所以我不会在这里确切的脚本,但我真的很绝望在这一点上,因为我不能像一样基本的东西。所以我基本上检查在命令行中写入的两个参数是否合适(用户需要正确键入)或者它会回显特定的错误消息。但是,当我输入一个具有100%正确参数的命令时,我会从第一个有条件的ALWAYS(即使我切换条件语句)中收到错误回显消息。看起来脚本只是运行第一个回声,不管怎样都停下来。请帮忙,我知道这可能很难,因为我的代码更像是一个骨架。bash脚本与if,elif,其他

if [ ... ]; then 
echo "blah" 

elif [ ... ]; then 
echo "blah2" 

else for file; do 
#change file to the 1st argument 

done 
fi 

我明显需要最后一个才会发生,以便我的脚本实际服务于其预期目的。但是,我的问题正在困扰着我。 if和elif需要返回false才能让脚本运行适当的参数。 if和elif检查是否正确输入了命令行中的人员。

+3

您可能需要显示您正在进行的测试,因为如果有效参数意味着您没有达到'else'块,这可能意味着你的测试已经倒过来了(你需要检查'如果arg1是无效的,那么echo echo blah blah 1 elif arg2 is invalid then echo blah bletch 2 else ... fi'。 –

+0

什么是实际的代码你运行的地方显示'......'这是真正最相关的细节 – chepner

回答

2

elif mean else-if。所以它只会被检查,如果第一个语句返回false。所以如果你想检查两者是否正确的话。

if [ ... ] then 
... 
fi 

if [ ... ] then 
... 
fi 
+0

你在这些语句的'''中做了什么?'if' ...'elif' ...'else'除非你在'''body声明中退出脚本,并且''''''''后面留有空格,因为它们在shell中是_crucial_ ogramming。 –

+0

@jonathan我同意为了他的目的,你建议的结构是最好的,但是你不能通过这样做来回应这两个论点是错误的。 – geokavel

0

当你在乎检查第一命令行参数的状态(即它们必须满足一系列标准的条件为真),那么你将需要一个复合测试结构,如:

if [ "$1" = somestring -a "$2" = somethingelse ]; then 
    do whatever 
fi 

这也可以写成

if [ "$1" = somestring ] && [ "$2" = somethingelse ]; then 
... 

注:[ .... -a .... ]语法仍然支持,但建议使用[ .... ] && [ .... ]语法新的发展。

您也可以改变它们由在第二形式使用-o用于OR条件或||测试(或者真/假)的方式。您可以使用不同的测试表达式进一步改变您的测试(例如=,!=,-gt等)。

+1

*应该写* [&] [...]。 '-a'由于历史原因而受支持,但不建议用于新代码。 – chepner

+0

同意,这就是两个版本都给出的原因。我想重点应该更清楚。 –