无法在bash Linux中为整数赋值

时间:2016-12-23 12:39:56

标签: linux bash scripting

我几天前问过一个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"

2 个答案:

答案 0 :(得分:1)

正如gniourf_gniourf所指出的,你的问题是你为vorigewaarde分配了一个未定义的变量。你这样做:

vorigewaarde=$waarde2

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

echo $waarde2 

在您的分配之前,它将显示并清空行

你可以指定$ waarde,因为这个是你的第一个案例中定义的但可能不是你想要的,或者你需要移动你的第二个案例,以便当你尝试值分配时waarde2有一个值。您也可以在第二种情况之后移动您的分配,但是再次,它可能不是您想要做的

答案 1 :(得分:0)

我发现了问题。当我将“ [”替换为(((“时,我看到在Schoppen和Ruiten的if情况下,我检查了Schoppen1或Ruiten1,但不喜欢数组中的Schop1或Ruit1。我已经修复了该问题,并且它现在应该可以正常工作了。– Michael