Portál AbcLinuxu, 1. června 2025 21:41
#!/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
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. ;)
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.