gpt4 book ai didi

linux - 无法在 bash Linux 中为整数赋值

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:38 26 4
gpt4 key购买 nike

我几天前询问了一个 bash 脚本中的错误。与此同时,我重建了代码,但现在我仍然有 1 个问题。我想在 if 循环中将“waarde”的值分配给“vorigewaarde”,看看你的分数是多少。当我试图找到 bash -x(文件名)的问题时,它说“vorigewaarde”的值是空的是,但我不明白这是怎么发生的。

代码(我已经标出了错误所在的行,在until代码行之后)

#!/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"

最佳答案

正如 gniourf_gniourf 所指出的,您的问题是您将 undefined variable 分配给 vorigewaarde。你这样做:

vorigewaarde=$waarde2

但是为 waarde2 赋值的情况在代码的更下方,因此此时在您的代码中未定义。如果你想直接看到它,添加

echo $waarde2 

就在你的分配之前,它会显示和空行

您可以分配 $waarde,因为它是在您的第一个案例中定义的,但可能不是您想要的,或者您需要将第二个案例向上移动,以便 waarde2 在您尝试赋值时具有值。您也可以在第二种情况之后移动您的分配,但话又说回来,这可能不是您想要做的

关于linux - 无法在 bash Linux 中为整数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41301716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com