Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有if、elif和else的Bash脚本_Bash_Shell_If Statement - Fatal编程技术网

带有if、elif和else的Bash脚本

带有if、elif和else的Bash脚本,bash,shell,if-statement,Bash,Shell,If Statement,好的,这是一个作业,所以我不会在这里输入确切的脚本,但我现在真的很绝望,因为我不能像想象的那样理解一些基本的东西。因此,我基本上是在检查命令行中写入的两个参数是否合适(用户需要正确键入),或者它是否会回显特定的错误消息。然而,当我输入一个参数100%正确的命令时,我总是从第一个条件语句(即使我切换了条件语句)得到错误回音消息。似乎脚本只是运行第一个echo,并且不管发生什么都会停止。请帮助我,我明白这可能很难,因为我的代码更像是一个骨架 if [ ... ]; then echo "blah

好的,这是一个作业,所以我不会在这里输入确切的脚本,但我现在真的很绝望,因为我不能像想象的那样理解一些基本的东西。因此,我基本上是在检查命令行中写入的两个参数是否合适(用户需要正确键入),或者它是否会回显特定的错误消息。然而,当我输入一个参数100%正确的命令时,我总是从第一个条件语句(即使我切换了条件语句)得到错误回音消息。似乎脚本只是运行第一个echo,并且不管发生什么都会停止。请帮助我,我明白这可能很难,因为我的代码更像是一个骨架

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

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

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

done 
fi 

为了让我的脚本真正达到预期的目的,我显然需要最后一次。然而,我的if fy问题阻碍了我。if和elif需要返回false,以便脚本为适当的参数运行。if和elif检查人员在命令行中键入的内容是否正确

elif表示其他如果。因此,只有当第一条语句返回false时,才会对其进行检查。所以,如果你想检查两者是否都正确,就去做

if [ ... ] then
...
fi

if [ ... ] then
...
fi

当您关心检查单个条件的第一个和第二个命令行参数时(即,它们都必须满足条件为真的一组条件),那么您将需要一个复合测试结构,如:

if [ "$1" = somestring -a "$2" = somethingelse ]; then
    do whatever
fi
这也可以写

if [ "$1" = somestring ] && [ "$2" = somethingelse ]; then
...
注意:仍然支持
[..-a..]
语法,但建议在新开发中使用
[..]&&&[..]
语法


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

您在这些语句体中的
..
中做什么?除非您在
..
正文语句中退出脚本,否则
if
elifelse具有比此更好的属性。最好在
[
]
之间留空格,因为它们在shell编程中是至关重要的。@jonathan我同意出于他的目的,您建议的结构是最好的,但这样做不会让您重复这两个参数都是错误的。您可能需要显示您正在进行的测试,因为如果有效参数意味着您无法访问
else
块,则可能意味着您的测试被颠倒了(您需要检查
如果arg1无效,那么echo blah blah 1 elif arg2无效,那么echo blah bletch 2 else…fi
。您在显示
的地方运行的实际代码是什么?这确实是最相关的详细信息。应该编写
[…]和[…]
-a
因历史原因而受支持,但不建议用于新代码。同意,这就是为什么给出两个版本的原因。我想重点应该更明确。