Portál AbcLinuxu, 1. června 2025 21:41


Dotaz: Promněná for, pomoct ze scriptem

20.11.2010 15:37 goryllaz
Promněná for, pomoct ze scriptem
Přečteno: 230×
Odpovědět | Admin
Potřebuji pomoct dělám si převodník měny ale cyklus for my nechce sebrat všechny hodnoty z proměnný. Prosím poste mi co mam dělat. Děkuji za každou pomoc :)
#!/bun/bash

declare x
declare y
declare z
declare -a vstup

read -p "převod mněny pr. (200 EUR to CZK): " x

z=1
for y in $( echo $x | cut -f$z -d' ' ) ; do 
vstup[$z]=$y && z=$((z+1)) ; 
done

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

Odpovědi

20.11.2010 21:11 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Promněná for, pomoct ze scriptem
Odpovědět | | Sbalit | Link | Blokovat | Admin

Zdravim,

ono by bolo mozno vhodne trochu objasnit, ako to ma cele fungovat. Tvoj skript obsahuje niekolko chyb alebo nepresnosti.

Tak podme rad radom:

 

1. #! /bun/bash zrejme nebude spravne, skus

which bash

a to zadaj za znaky #!

 

2. Cely ten cyklus je zvlastny, ak chces prechadzat kazdu cast textu oddelenu medzerami, tak mozes takto:

for SLOVO in ${x}
do
       # vyraz ${#vstup[@]} vracia pocet poloziek v poli
       # nie je nutne pouzit ziadnu premennu ako index
        vstup[$(( ${#vstup[@]} +1 ))]="$i"
done

Teda ak si to chcel.

 

3. Bolo by vhodnejsie pisat nazvy premennych vystiznejsie. Ak bude skript dlhsi, tak to bude peklo.

 

Tu je moje riesenie, ma chyby a je to len z eur do cz a spat. Ale ako zaklad a ukazka, ako sa to dalo spravit, posluzi:

#! /bin/bash

## Udava kurz
CZKTOEUR="$( echo '1 / 24.72' | bc -l )"
EURTOCZK='24.72'

# nacitanie vstupu od uzivatela
# Myslim si,ze pokial tu nie je ziaden cyklus, tak
# je vhodnejsie zadat hodnotu pre VSTUP priamo v shell
# ako parameter pre skript
read -p "převod mněny pr. (200 EUR to CZK): " VSTUP

# vstup je 200 eur to czk
# Hodnota premennej HODNOTA_VSTUP bude teda 200
# Odstranuje sa najdlhsi nalez od konca hodnoty premennej, ktory zacina medzerou a nasleduje za nou cokolvek
HODNOTA_VSTUP="${VSTUP%% *}"

# Porovnava sa hodnota VSTUP oproti regularnemu vyrazu
# Cely reg. vyraz sa snazi vyhoviet v pripade, ze sa zada Czk to Eur alebo CZk to euR atd.
# a samozrejme dolezitejsie je, ze zisti z ktorej meny do ktorej
if [[ "${VSTUP}" =~ .*[{E,e},{U,u},{R,r}].*[{C,c},{Z,z},{K,k}] ]]
then

HODNOTA_VYSTUP="$( echo "${HODNOTA_VSTUP} * ${EURTOCZK}" | bc )"
# Zaokruhlime vysledne hodnoty na dve desatinne miesta pomocou vyrazu printf %.2f
printf "Za %.2f EUR dostanete %.2f CZK\n" "${HODNOTA_VSTUP}" "${HODNOTA_VYSTUP}"
elif [[ "${VSTUP}" =~ .*[{C,c},{Z,z},{K,k}].*[{E,e},{U,u},{R,r}] ]]
then
HODNOTA_VYSTUP="$( echo "${HODNOTA_VSTUP} * ${CZKTOEUR}" | bc )"
printf "Za %.2f CZK dostanete %.2f EUR\n" "${HODNOTA_VSTUP}" "${HODNOTA_VYSTUP}"
fi

exit 0

 

Kazdopadne, nech ta to neodradza. Ked bude chut a vola, tak to bude dobre vsetko. Kazdy sa nejak uci. A ja niesom vynimkou aj s mojimi chybami. ;)

20.11.2010 21:44 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Promněná for, pomoct ze scriptem

Este ti dam do pozornosti toto:

http://www.gnu.org/software/bash/manual/bashref.html

a troskou snahy najdes aj nieco v tvojom rodnom jazyku.

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.