Portál AbcLinuxu, 27. dubna 2024 02:06


Dotaz: Shellový skript nepracuje, jak by měl

20.3.2004 13:51 Begleiter | skóre: 47 | blog: muj_blog | Doma
Shellový skript nepracuje, jak by měl
Přečteno: 83×
Odpovědět | Admin

Napsal jsem primitivní skriptík "zkoušení násobilky":

 vstup=''
 i=2
 j=1
 until [ ${vstup:0:1} == 'q' ]; do
  j=$((j+1))
  read -p "${i} * ${j} = ?" vstup
  case ${vstup:0:1} in
   (d)
    if [[ ${vstup:1:1} == [[:digit:]] ]]; then
     i=${vstup:1:1}; else
     i=$((i+1))
    fi
    j=1
   ;;
   ([[:digit:]])
    if [ ${vstup} -eq $((i*j)) ]; then
     echo "Spravny vysledek"; else
     echo "Spatne! Spravne je: $((i*j))"
    fi
   ;;
   (q)
   ;;
   (*)
   ;;
  esac
 done

Skript by měl zkoušet násobilku (d[n] "skočí" na číslo o jedničku větší nebo na číslo n).

Místo toho: 'q' ukončí skript teprve, až když ho zadám několikrát (výjimkou je, když ho zadám jako první vstup). j se nezvyšuje o jedničku.

Bash 2.05b na Slackware 9.1. Dík za jakoukoli radu.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.3.2004 14:06 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Shellový skript nepracuje, jak by měl
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ugh. Napsal bych tam asi tak třetinu kulatých, složených a hranatých závorek.

Krom toho to musí chcípnout na řádku 4, protože v tu chvíli je vstup prázdný, takže tam dostaneš

until [ == 'q' ]; do

Ale když dám od uvozovek, co mám, tak mi to normálně funguje, q<Enter> to ukončí.

(Webserver v PostScriptu a interpret BASICu v TeXu už byly napsány, a ty asi tak snadno nepřekonáš.)
20.3.2004 14:56 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Shellový skript nepracuje, jak by měl

Dík. On totiž Bash při "Word splitting" ten prázdný řetězec odstraní. "${vstup:0:1}" pomůže.

(Ten skriptík jsem napsal jenom tak na zkoušku, abych si prakticky vyzkoušel to, o čem jsem teoreticky četl v manuálové stránce.)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.