Shell Scripting中的多个条件

时间:2011-04-26 04:49:01

标签: linux shell

这是我的Shellscript

echo "IsInteractive"
read IsInteractive
if [ "$IsInteractive" == "true" ]; then
 echo "Name"
 read name
 echo "Password"
 read password
 if [ "$name" == "abcd" & "$password" == "pwd" ]; then
  echo "correct username and password"
 else
  echo "wrong username or password"
 fi
elif [ "$IsInteractive" == "false" ]; then
 echo "Everything working fine.But no logic given yet"
else
 echo "Give proper input"
fi

第二个if条件是否有问题?我试过把&&在条件,但没有工作

4 个答案:

答案 0 :(得分:4)

您不使用方括号内的多个条件&,而是使用-a。或者你使用多个括号if [ $a = "a" ] && [ $b = "c" ] 您也可以使用case/esac构造,例如

case "$name$password" in
 "abcdpwd" ) echo "correct" ;;
  *) echo "not correct";;
esac

这比if/else IMO更清洁。

答案 1 :(得分:3)

方括号内-a相当于&&

此外,您应该使用=而不是==。阅读shell的联机帮助页。

答案 2 :(得分:1)

if [ "$name" == "abcd" -a "$password" == "pwd" ]; then echo true; else echo false; fi

这个以及更多“基本”问题可以快速得到解答,而且不需要在大多数系统上使用命令man bash的论坛帖子;如果它不存在只是google“man bash”并选择一个看起来最接近你系统的那个...它们都“几乎相同”,特别是在基本级别。

干杯。基思。


编辑:FWW:[]构造是“test”的捷径,这是一个内置于所有“标准”shell(sh,csh,ksh和bash)中的函数......所以以下代码完全等效:

$ a=a
$ b=c
$ if test "$a" = "a" && test "$b" = "c"; then echo true; else echo false; fi
true

if then构造只是评估test函数的返回值。您可以使用$?显示上一个shell命令的返回值...但要注意,echo也设置$?

$ true
$ echo $?
0

$ false
$ echo $?
1
$ echo $?
0

真正有趣的分支是if then构造可以评估返回成功的任何东西= 0 =真或失败=任何但是0(通常是1 =假)...是内置的shell函数,用户定义的函数,unix实用程序或您自己编写的程序。因此,以下代码大致等效:

$ if echo "$a:$b" | fgrep -s "a:c"; then echo true; else echo false; fi
a:c
true

注意:看起来我的系统的fgrep不接受-s用于静默切换。叹息。

请注意,在上面的示例中,echo的输出管道到标准fgrep实用程序,它是fgrep的返回值(LAST命令为被调用)由if then评估。

祝你好运,也许可以和你在一起。再次干杯。基思。

答案 3 :(得分:0)

轻微更改将解决此脚本错误[:missing`]'。 在第8行替换'&'用'-a' -a,逻辑AND。如果两个操作数都为真,则条件为真,否则为假

下面的工作代码

echo "IsInteractive"
read IsInteractive
if [ "$IsInteractive" == "true" ]; then
    echo "Name"
    read name
    echo "Password"
    read password
    if [ "$name" == "abcd" -a "$password" == "pwd" ]; then
        echo "correct username and password"
    else
        echo "wrong username or password"
    fi
elif [ "$IsInteractive" == "false" ]; then
    echo "Everything working fine.But no logic given yet" 
else
    echo "Give proper input"
fi