我几天前问过一个bash脚本中的错误。与此同时,我重新编写了代码,现在我还有一个问题。我想将" waarde的值分配给" vorigewaarde"在if循环中,查看您的分数是多少。当我试图用bash -x(文件名)找到问题时,它说" vorigewaarde"空虚,但我不明白这是怎么回事。
代码(我已经标记了故障所在的行,它是在直到代码行之后)
#!/bin/bash
score=0
uitkomst=juist
waardegok=0
Number=$(($RANDOM % 52))
KAARTEN=(Harten1 Harten2 Harten3 Harten4 Harten5 Harten6 Harten7 Harten8
Harten9 Harten10 Harten11 Harten12 Harten13 Klaver1 Klaver2 Klaver3
Klaver4 Klaver5 Klaver6 Klaver7 Klaver8 Klaver9 Klaver10 Klaver11 Klaver12
Klaver13 Schop1 Schop2 Schop3 Schop4 Schop5 Schop6 Schop7 Schop8 Schop9
Schop10 Schop11 Schop12 Schop13 Ruit1 Ruit2 Ruit3 Ruit4 Ruit5 Ruit6 Ruit7
Ruit8 Ruit9 Ruit10 Ruit11 Ruit12 Ruit13)
Gokkaart=${KAARTEN[$Number]}
echo " "
if (( "$Number" >= 0 )) && (( "$Number" <= 12 ));then
case $Gokkaart in
Harten1) waarde=1;;
Harten2) waarde=2;;
Harten3) waarde=3;;
Harten4) waarde=4;;
Harten5) waarde=5;;
Harten6) waarde=6;;
Harten7) waarde=7;;
Harten8) waarde=8;;
Harten9) waarde=9;;
Harten10) waarde=10;;
Harten11) waarde=11;;
Harten12) waarde=12;;
Harten13) waarde=13;;
esac
elif (( "$Number" >= 13 )) && (( "$Number" <= 25 ));then
case $Gokkaart in
##same for Harten only now for Klaveren
esac
elif (( "$Number" >= 26 )) && (( "$Number" <= 38 ));then
case $Gokkaart in
##same for Klaveren only now for Schoppen
esac
elif (( "$Number" >= 39 )) && (( "$Number" <= 52 ));then
case $Gokkaart in
##Same for Schoppen only now for Ruiten
esac
fi
echo "De eerste kaart is een $Gokkaart"
echo " "
echo "$waarde"
until [ $uitkomst != juist ]
do
echo " "
echo -n "hoger of lager? type [H of L] > "
read gok
echo "gok: $gok"
if [ "$gok" = "H" ];then
echo "Uw gok is hoger"
waardegok=14
elif [ "$gok" = "L" ];then
echo "Uw gok is lager"
waardegok=0
fi
if (( "$score" >= 1 ));then
vorigekaart=$Gokkaart2
vorigewaarde=$waarde2
echo "De vorige kaart was een $Gokkaart2"
echo " "
elif (( "$score" == 0 ));then **#Here is the error**
vorigekaart=$Gokkaart
vorigewaarde=$waarde
echo "Laten we beginnen"
echo " "
fi
Number2=$(($RANDOM % 52))
KAARTEN2=(#same that of array as KAARTEN but now for KAARTEN2 and Gokkaart2)
Gokkaart2=${KAARTEN2[$Number2]}
if (( "$Number2"=="$Number" ));then
Number2=$(($RANDOM % 52))
Gokkaart2=${KAARTEN2[$Number2]}
elif (( "$Number2" >= 0 )) && (( "$Number2" <= 12 ));then
echo "De volgende kaart is een harten, namelijk $Gokkaart2"
case $Gokkaart2 in
Harten1) waarde2=1;;
Harten2) waarde2=2;;
Harten3) waarde2=3;;
Harten4) waarde2=4;;
Harten5) waarde2=5;;
Harten6) waarde2=6;;
Harten7) waarde2=7;;
Harten8) waarde2=8;;
Harten9) waarde2=9;;
Harten10) waarde2=10;;
Harten11) waarde2=11;;
Harten12) waarde2=12;;
Harten13) waarde2=13;;
esac
if (( "$waardegok" > "$waarde2" )) && (( "$waarde2" > "$vorigewaarde" ));then
echo "$Gokkaart2"
echo "Goed gegokt!"
score=$((score+1))
echo "Uw score is nu : "$score""
echo " "
elif (( "$waardegok" < "$waarde2" )) && (( "$waarde2" < "$vorigewaarde" ));then
echo "$Gokkaart2"
echo "Goed gegokt!"
score=$((score+1))
echo "Uw score is nu : "$score""
echo " "
else
echo "Fout, maar goed geprobeert!"
uitkomst=false
fi
##this is also the same way for number higher than 12 all the way to 52
done
echo " uw score was $score"
我还编辑了一些代码,现在我检查了所有内容,但它仍然会出现同样的错误。
elif (( "$Number2" >= 39 )) && (( "$Number2" <= 52 ));then
case $Gokkaart2 in
##same as harten but now for Ruiten
esac
controlewaarde=$waarde2
fi
echo " "
echo -n "hoger of lager? type [H of L] > "
read -r gok
echo "gok: $gok"
if (( "$score" >= 1 ));then
vorigewaarde=$waarde2
echo "De vorige kaart was een $Gokkaart2"
echo " "
elif (( "$score" == 0 ));then
vorigewaarde=$waarde
echo "Laten we beginnen"
echo "De eerste kaart is een $Gokkaart"
echo " "
fi
if [ "$gok" = "H" ];then
echo "Uw gok is hoger"
waardegok=14
elif [ "$gok" = "L" ];then
echo "Uw gok is lager"
waardegok=0
fi
if (( "$Number2" >= 0 )) && (( "$Number2" <= 12 ));then
echo "De volgende kaart is een harten, namelijk $Gokkaart2"
elif (( "$Number2" >= 13 )) && (( "$Number2" <= 25 ));then
echo "De volgende kaart is een klaver, namelijk $Gokkaart2"
elif (( "$Number2" >= 26 )) && (( "$Number2" <= 38 ));then
echo "De volgende kaart is een Schoppen, namelijk $Gokkaart2"
elif (( "$Number2" >= 39 )) && (( "$Number2" <= 52 ));then
echo "De volgende kaart is een Ruiten, namelijk $Gokkaart2"
fi
if (( "$waardegok" > "$waarde2" )) && (( "$controlewaarde" > "$vorigewaarde" ));then
echo "$Gokkaart2"
echo "Goed gegokt!"
score=$((score+1))
echo "Uw score is nu : $score"
echo " "
elif (( "$waardegok" < "$waarde2" )) && (( "$controlewaarde" < "$vorigewaarde" ));then
echo "$Gokkaart2"
echo "Goed gegokt!"
score=$((score+1))
echo "Uw score is nu : $score"
echo " "
else
echo "Fout, maar goed geprobeert!"
uitkomst=false
fi
done
echo " uw score was $score"
答案 0 :(得分:1)
正如gniourf_gniourf所指出的,你的问题是你为vorigewaarde分配了一个未定义的变量。你这样做:
vorigewaarde=$waarde2
但是为waarde2赋值的情况是在代码的下方,因此在代码中当时未定义。如果您希望直接看到它,请添加
echo $waarde2
在您的分配之前,它将显示并清空行
你可以指定$ waarde,因为这个是你的第一个案例中定义的但可能不是你想要的,或者你需要移动你的第二个案例,以便当你尝试值分配时waarde2有一个值。您也可以在第二种情况之后移动您的分配,但是再次,它可能不是您想要做的
答案 1 :(得分:0)
我发现了问题。当我将“ [”替换为(((“时,我看到在Schoppen和Ruiten的if情况下,我检查了Schoppen1或Ruiten1,但不喜欢数组中的Schop1或Ruit1。我已经修复了该问题,并且它现在应该可以正常工作了。– Michael