【问题标题】:Bash Script with if, elif, else带有 if、elif 和 else 的 Bash 脚本
【发布时间】:2015-10-05 22:03:48
【问题描述】:

好的,这是一个作业,所以我不会在此处输入确切的脚本,但此时我真的很绝望,因为我想不出像这样基本的东西。所以我基本上是在检查命令行中写入的两个参数是否合适(用户需要正确输入),或者它会回显特定的错误消息。但是,当我输入一个具有 100% 正确参数的命令时,我会从第一个条件 ALWAYS 中收到错误回显消息(即使我切换了条件语句)。似乎脚本只是运行第一个回声并无论如何都停止。请帮忙,我理解这可能很难,因为我的代码更像是一个骨架。

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

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

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

done 
fi 

我显然需要最后一个 else 发生,以使我的脚本真正达到其预期目的。但是,我的 if-fy 问题妨碍了我。 if 和 elif 需要返回 false 以便脚本针对适当的参数运行。 if 和 elif 检查人员是否正确键入了命令行。

【问题讨论】:

  • 你可能需要展示你正在做的测试,因为如果有效的参数意味着你没有到达 else 块,这可能意味着你已经把你的测试颠倒了(你需要查看if arg1 is invalid then echo blah blah 1 elif arg2 is invalid then echo blah bletch 2 else … fi
  • 您在显示... 的位置运行的实际代码是什么?这确实是这里最相关的细节。

标签: bash shell if-statement


【解决方案1】:

elif 的意思是 else-if。所以只有当第一个语句返回 false 时才会检查它。因此,如果您想检查两者是否正确。

if [ ... ] then
...
fi

if [ ... ] then
...
fi

【讨论】:

  • 您在这些语句正文中的... 中做了什么? ifelifelse 具有比这更好的属性,除非您在 ... 正文语句中退出脚本。最好在 [] 周围留出空格,因为它们在 shell 编程中至关重要
  • @jonathan 我同意,就他的目的而言,您建议的结构是最好的,但这样做您将无法回应这两个论点都是错误的。
【解决方案2】:

当您关心 both 检查 firstsecond 命令行参数的 single 条件(即它们都必须满足一组条件才能使条件成立),那么您将需要一个复合测试结构,例如:

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

也可以写

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

注意:[ .... -a .... ] 语法仍受支持,但建议使用[ .... ] && [ .... ] 语法进行新开发。

您还可以通过将-o 用于OR 条件或|| 在第二种形式中来改变它们的测试方式(真/假)。您可以使用不同的测试表达式(即=!=-gt 等)进一步改变您的测试。

【讨论】:

  • 应该写成[ ... ] && [ ... ]-a 受历史原因支持,但不建议用于新代码。
  • 同意,这就是给出两个版本的原因。我想重点应该更清楚。
猜你喜欢
  • 2015-06-21
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多