这是我的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条件是否有问题?我试过把&&在条件,但没有工作
答案 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