Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
mehiktso
Člen
Avatar
mehiktso:24.4.2015 14:54

Zdravím,

zkouším si scriptování v bashi a narazil jsem na věc, kterou neumím.

mým cílem je udělat přes Case seznam, kdy uživatel při vstupu zadá jmeno, poté další parametr, řekněme věk, poté přes echo se na výstupu ukáže odpověd.

mým problémem je, že nevím jak dát dohromady case s dvojitím vstupem přiklad

#!/bin/bash
echo "Jméno"
echo -n "Zadejte Jméno: "
read jmeno
echo
case $jmeno in

toto je v pohodě, ale nevím zde za to přidat jěště

echo -n "zadejte věk: "

read vek ?

zde je můj celý skript jak to myslím, oboje na sebe navazuje

#!/bin/bash
echo "Jméno"
echo -n "Zadejte Jméno: "
read jmeno
echo
case $jmeno in
Franta Hruška|starej) echo "Ale notak, zadej číslo" ;;
Franta Hruška|18) echo "Pěkně lžeš" ;;
Franta Hruška|35) echo "Toto je správně staříku" ;;
esac

jde mi o to aby zadal nejdřív jméno,poté věk a podle toho se zobrazí přes echo nějaká prkotina.

prosím o radu, nebo jestli aspoň jsem na dobré cestě, jsem samouk přivítám každou pomoc.

Děkuji :)

 
Odpovědět
24.4.2015 14:54
Avatar
kxmx
Tvůrce
Avatar
kxmx:24.4.2015 15:22

přečtení těch dvou vstupů samozřejmě funguje v pořádku

#!/bin/bash

echo -n "zadejte jméno: "
read jmeno

echo -n "zadejte vek: "
read vek

pak si to spoj

např.

jmenoAvek="${jmeno}|${vek}"

case $jmenoAvek in
"franta|5") echo "franta 5" ;;
"pepa|8") echo "pepa 8" ;;
esac
Editováno 24.4.2015 15:24
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
24.4.2015 15:22
Avatar
mehiktso
Člen
Avatar
Odpovídá na kxmx
mehiktso:24.4.2015 15:36

Děkuji moc! važím si tvé pomoci, mohl by jsi mi jěště prosím říct jak se říká tomu spojení které jsi udělal ? funkce? procedura? učím se to sám, tudíž chci vědět co co znamená a ne hloupě používat rady :-)

jěště jednou děkuji

 
Nahoru Odpovědět
24.4.2015 15:36
Avatar
kxmx
Tvůrce
Avatar
Odpovídá na mehiktso
kxmx:24.4.2015 16:24

To je prostě spojení řetězců. Možná ti ta syntaxe příjde divoká (mně teda jo), mohl by jsi to zapsat i takto

jmenoAvek=$jmeno"|"$vek

což je o něco blíž klasickým jazykům

Editováno 24.4.2015 16:25
 
Nahoru Odpovědět
24.4.2015 16:24
Avatar
mehiktso
Člen
Avatar
Odpovídá na kxmx
mehiktso:24.4.2015 16:51

už tomu začínám rozumět , díky.
jen menší otázečka když se to teď tím řetězcem spojilo a chci tam dát chybovou hlášku funguje mi to trošku jinak, dal jsem na konec scriptu před esac toto

*) echo Zadali jste neznamy parametr, nesprávné jméno či věk
         exit 1;;

ale potřebuju aby mi to hodilo chybu už při zadání prvního vstupu tj. jméno aby to vyhodilo, hned když někdo napíše třeba karel, a ne až špatně ten věk

poradíš mi jěště s tímto?

 
Nahoru Odpovědět
24.4.2015 16:51
Avatar
kxmx
Tvůrce
Avatar
Odpovídá na mehiktso
kxmx:24.4.2015 17:27

To uděláš velmi jednoduše. Čtení uživatelského vstupu dáš do cyklu, který ukončíš ve chvíli kdy uživatel zadá validní vstup. Tímto způsobem si pak ošetříš cokoliv. Např. aby jméno byly 2 slova, aby věk byl číslo apd.

while true; do
   echo -n "zadejte jméno: "
   read jmeno
   if [ ! -z "${jmeno}" ]; then
      break
   fi
done

kdyby jsi něčemu nerozuměl tak si pročti články o cyklech a podmínkách. Pěknej souhr jak se dá testovat v bashi je zde
http://www.linuxexpres.cz/…/bash-11-dil

Editováno 24.4.2015 17:30
 
Nahoru Odpovědět
24.4.2015 17:27
Avatar
mehiktso
Člen
Avatar
Odpovídá na kxmx
mehiktso:25.4.2015 18:26

Děkuji ti, ale stále mě to pouští když píšu uplný blbosti až ke druhýmu vstupu. dělám něco špatně?

echo "xxxxxx"
echo "Jména: Kamil,Ondra,Thomas.."
while true; do
echo -n "zadejte jméno: "
read jmeno
if [ ! -z "${jmeno}" ]; then
      break
fi
done
while true; do
echo -n "zadejte věk: "
read predmet
if [ ! -z "${věk}" ]; then
      break
fi
done
jmenoAvek="${jmeno}|${vek}"
 
Nahoru Odpovědět
25.4.2015 18:26
Avatar
kxmx
Tvůrce
Avatar
Odpovídá na mehiktso
kxmx:25.4.2015 23:20

Co jsou ty úplný blbosti? -z testuje jestli je proměnná prázdná. Jestli chceš aby uživatel zadal jméno z nějakého předdefinovaného seznamu tak na to budeš muset jinak.

 
Nahoru Odpovědět
25.4.2015 23:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.