Portál AbcLinuxu, 13. srpna 2025 17:23


Dotaz: Bash, a trabl s read

David Watzke avatar 19.10.2005 06:00 David Watzke | skóre: 74 | blog: Blog... | Praha
Bash, a trabl s read
Přečteno: 188×
Odpovědět | Admin
Pro představu sem hodím ten scriptík...
#! /bin/bash

echo "Vitej v disko_romu ..."
jakyromky()
{
	echo "Co mas za romky (/dev/hdc):"
	read romka
	echo "To je vse ? [y/n]"
	read vse
	case $vse in
		y) echo "Dobre, dobre ..."
		udelej_disko
		;;
		n) echo "Okay, tak znova ..."
		jakyromky
		;;
		*) echo "Chybna volba zadavejte pouze \"y\" nebo \"n\" !"
		exit 1
		;;
	esac
}
udelej_disko()
{
	echo -e "Muzem zacit ...\nAz te to prestane bavit, zmackni Ctrl+C."
	for((;;))
		do
		echo "Vyjizdim ..."
		eject $romka
		echo "Jsem vyjeta a zajizdim ..."
		eject -t $romka
	done
}
jakyromky
Mám problém (na první pohled zřejmý), že jakmile zadám víc CD-ROMek, tak udělá disko jen s tou poslední. :-D Samozřejmě je tu možnost udělat další a aby to hodil do přoměnný $dalsi, nebo co já vím, ale cítím, že je tu řešení pomocí if, then, else... Myslím tím připsat novou funkci, ale aby uměla zvyšovat číslo u tý proměnný a to tak, že checkne jestli v ní ještě nic není. Uff, určitě to zní divně, když neznám ty odborný výrazy. Tak co, poradíte mi prosím ? :-)

PS: Ano, vím, že je to hloupej script, jen se učím. :-D

“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

David Watzke avatar 19.10.2005 06:04 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash, a trabl s read
Odpovědět | | Sbalit | Link | Blokovat | Admin
Teď mě napadl další způsob, a to ten, že by to mohlo jít tak, že zadám všechny romky oddělený čárkou, nebo třeba jen mezerou a pak tu proměnnou nějak zpracuju, což ale taky neumím. Doufám, že to nebude jednoduchý, jinak se propadnu hanbou. :-D
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.10.2005 08:10 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash, a trabl s read
Např.:
hynek[~]$ ahoj=juju,koko
hynek[~]$ IFS=, 
hynek[~]$ for i in $ahoj; do echo $i; done
juju
koko
hynek[~]$
A vůbec ten design té aplikačky je hnus. Fuj ble, co takhle se nad tím trochu zamyslet?
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
19.10.2005 08:35 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash, a trabl s read
Nebo taky takhle:
#! /bin/bash

echo "Vitej v disko_romu ..."

ctiromky()
{
	echo "Co mas za romky (/dev/hdc):"
	for((;;))
	do
		read romka
		[ -b "$romka" ] && romky=("${romky[@]}" "$romka") || break
	done
}

udelej_disko()
{
	echo -e "Muzem zacit ...\nAz te to prestane bavit, zmackni Ctrl+C."
	for((;;))
		do
		echo "Vyjizdim ..."
		for i in "${romky[@]}"; do eject "$i"; done
		echo "Jsem vyjeta a zajizdim ..."
		for i in "${romky[@]}"; do eject -t "$i"; done
	done
}
ctiromky
[ -n "${romky[*]}" ] && udelej_disko
Hlavně bez té šílené rekurze!
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
19.10.2005 09:34 David Watzke
Rozbalit Rozbalit vše Re: Bash, a trabl s read
Aha.. teprv začínám ;) Díkys.
David Watzke avatar 19.10.2005 17:38 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash, a trabl s read
Zdá se, že to nejde, zkus si to... Spustil jsem to, zadal jednu romku, enter a nic... další romku, enter a zas nic... V tom cos napsal se nevyznám, abych si to zjistil sám, ale hlavně, že je to bez rekurze. :-D
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
20.10.2005 10:27 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash, a trabl s read
Myslíš, že jsem sem poslal něco co jsem neodladil a neozkoušel? Mě to funguje. Na to, že teprv začínám jsi poněkud drzý. Nicméně ti nic nebrání implementvat si jakékoli vlastní řešení. Jinak pokud chceš znát hodnotu proměnné romky stačí napsat na příslušné místo
echo ${romky[*]}
A taky by možná bylo elegantnější pro přidávání do pole použít tvar
romky[${#romky[*]}]="$romka"
místo kostrbatého romky=("${romky[@]}" "$romka") Ale to je stejně házení perel takovému nevděčníkovi. Krom toho RTFM bash(1). Na to tam ten manuál je.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

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.