Gå til innhold

Linux Shell Script, trenger hjelp


Anbefalte innlegg

Skal lage en skall script i Linux. Vet ikke om at den bør stå her, Linux script er vel ikke samme som PHP eller C++?

 

Altså jeg må en script program som:

Programmet trekker et tilfeldig tall mellom 1 og 100, bruker skal gjette tallet iterativt (om igjen) til

suksess. For hver runde skal programmet rapportere om bruker sitt forslag er mindre eller større enn

det korrekte. Om bruker foreslår 0 skal det tolkes som at han/hun gir opp, og spillet avsluttes da

med melding om det korrekte tallet. Når et spill er over skal programmet spørre bruker om hun vil

fortsette, og i så fall trekke og starte nytt spill.

 

Kan noen det?

Lenke til kommentar
Videoannonse
Annonse

Hvor langt kan skript-definisjonen strekkes? Må det være Bourne Shell, eller kan det være hvilket som helst skript?

Jeg har ikke noe problem med å slenge f.eks Python- eller Tcl-intepreteren først i et skript og skrive hele kalaset i Python eller Tcl. De er fremdeles fullverdige linux-skript. Spesielt Python-interpreteren begynner å bli like vanlig som Bash. Riktig verktøy til jobben er alltid det riktige svaret.

Selv om Bash er defacto interpreter i mange linux-miljø er det på ingen måte den beste interpreteren. Hva med sausen av csh, ksh og alle de andre rare greiene? Får ikke de lov til å være med?

Lenke til kommentar

@endrebjo, det var det som var det første som falt meg inn også, men trådstarter sier jo faktisk "shell script", da tolker jeg det som bash eller tilsvarende.

 

@TS:

Jeg kan, men jeg har ikke så lyst til å servere løsningen på sølvfat her. Prøv selv først, post det du kommer frem til, og spør om hjelp til spesifikke ting du står fast på. Ellers lærer du aldri noe.

Lenke til kommentar
#!/bin/bash

nr=$[($RANDOM % 100) +1]
echo -n "Jeg tenker på et tall mellom 1 og 100."
while read n2; do
if [[ $n2 -eq $n1 ]]; then
break;
else
echo
if [[ $n2 -gt $n1 ]]; then
echo -n "Sorry, er for høy din gjetning."
elif [[ $n2 -lt $n1 ]]; then
echo -n "Sorry, er for lav din gjetning."
fi
fi
done
echo
Jeg kom fram til den her, men funker ikke så bra, kan noen hjelpe meg å få den riktig kanskje?
Lenke til kommentar

Du sammenligner $n2 med $n1, men du deklarerer ikke $n1 noe sted.

 

Den var nok feil, jeg tar utgangspunkt i den her:

 

#!/bin/bash

INT=$RANDOM

guess=-1

while [ "$guess" != "$INT" ]; do

echo -n "Jeg tenker en nummer mellom 1 og 100. Gjett hvilken nummer det er"

read guess

if [ "$guess" = "" ]; then

echo "Du skrev ingen tall"

elif [ "$guess" = "$INT" ]; then

echo -e "Ja! $guess is the correct answer!"

elif [ "$INT" -gt "$guess" ]; then

echo "Nummeret du gjettet skal være større"

else

echo "Nummeret du gjettet skal være mindre"

fi

done

 

Den funker ikke helt som den skal... Og vet du hvordan jeg kan få at hvis bruker foreslår 0 skal det tolkes som at han/hun gir opp, og spillet avsluttes da

med melding om det korrekte tallet. Når et spill er over skal programmet spørre bruker om hun vil

fortsette, og i så fall trekke og starte nytt spill.

Lenke til kommentar

Legg en while-løkke til rundt, så kan du bruke den som en slags meny (starte nytt spill eller avslutte). Den løkka du har håndterer selve gjettingen (gjett eller gi opp).

 

Usikker på hvordan jeg lager en sånn løkke, kan du vise meg eksempel?

Lenke til kommentar

Du har en while-løkke allerede, med noe kode inni, omtrent slik:

// Generate random number 1-100

while guess != number:
   // Input guess and evaluate
endwhile

Edit: Manglet endwhile over.

 

Den legger du inni enda en while-løkke slik:

while true:
  // Generate random number 1-100

  while guess != number:
    // Input guess

    if guess == 0:
      // Output correct number and break

    // Evaluate guess

  endwhile

  echo "Play again or quit?";
  // Break if player wants to quit

endwhile

echo "Goodbye!";

Og med det kan du bryte ut av gjetteprosessen uten at det avslutter hele skriptet, siden du har lyst til å spørre om man vil spille igjen. Ikke se altfor hardt på resten, da det var mest for å illustrere nested loops, pluss et løsningsforslag til guess == 0.

Endret av Imsvale
Lenke til kommentar
Gjest
Dette emnet er stengt for flere svar.
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...