Sziasztok!
Van egy baratom, aki az alabbi anomalian tori a fejet:
Van egy egyszeru szkript:
#!/bin/bash
for file in `ls $1`; do
echo $file
if [ -f $file ] ; then
echo "$file egy file"
fi
if [ -d $file ] ; then
echo "$file egy konyvtar"
fi
done
En nem ertek a bash szkriptekhez, a srac problemaja, hogy ha a szkriptnek parameterkent a jelenlegi konyvtarat adja meg, akkor az if-ek rendesen kiirjak, ha vmi konyvtar v. file. Ha barmely mas konyvtarat adunk meg, akkor nem irja ki, hogy konyvtarrol vagy fajlrol van szo.
Meg tudnatok mondani, hogy ez miert van?
Koszonom!
- 1740 megtekintés
Hozzászólások
A haverom tudja, hogy hogyan lehet mukodesre birni a szkriptet (cd $1), viszont az erdekli, es nem talalt meg ra valaszt, hogy a fentebb emlitett szkript miert rossz.
Koszonom
- A hozzászóláshoz be kell jelentkezni
csak igy latatlanban, mert a fajl helye a munkakonyvtarban a "$1/$file".
probald ki ugy jo lesz.
abban a konyvtarban nincs egy masik konyvtar eleme.
bocs ha hulyeseg, de mintha az ls csak a fajlok es konyvtarak neveit listazna es a path pedig igy mas!!!
szép napokat
zsömi
- A hozzászóláshoz be kell jelentkezni
Erről van szó! :D
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
if [ "$1" != "" ]; then
mit=$1
fi
for file in `ls $mit`; do
echo "$mit$file"
if [ -f "$mit$file" ] ; then
echo "$mit$file egy file"
fi
if [ -d "$mit$file" ] ; then
echo "$mit$file egy konyvtar"
fi
done
Ezt próbálja ki a haver! Szintaxis: script.sh konyvtar/
Kell a / a végén!
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
"Ezt próbálja ki a haver! Szintaxis: script.sh konyvtar/
Kell a / a végén!"
Nem tárgya a problémának, de ezt most mééééér?
Ha a $mit és $file közé bekerül a / ($mit/$file), akárhogy is meg lehet hívni, lévén a /-ek száma lényegtelen, ha >=1, vagyis ha konyvtar/ alaku a parameter, az sem art.
- A hozzászóláshoz be kell jelentkezni
Gondolkodj, mielőtt írsz. Mi van, ha nincs $1?
Bocsi, hogy hibakezelőt nem írtam bele...
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Hmmm... nekem az már filozófia, hogy a nem is létező $1 végére tegyünk-e / jelet.
- A hozzászóláshoz be kell jelentkezni
Ez nonszensz volt. De a kedvedért módosítom a scriptet, ok?
#!/bin/bash
if [ "$1" != "" ]; then
mit=`echo "$1/" | sed s/'\/*$'/'\/'/g`
fi
for file in `ls $mit`; do
echo "$mit$file"
if [ -f "$mit$file" ] ; then
echo "$mit$file egy file"
fi
if [ -d "$mit$file" ] ; then
echo "$mit$file egy konyvtar"
fi
Így már nem kell a /
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Köszi!
Eddig csak sejtettem, hogy nem volt világos, hogy mit akartam mondani azzal, hogy a /-jelek száma miatt nem kell aggódni, de most már biztos.
Egy kép, 10ezer szó helyett:
$ test -f ///usr////local///bin///lame && echo van
van
- A hozzászóláshoz be kell jelentkezni
Nem kéne vitába bonyolódnom, de tisztázzunk egy dolgot...
Ha paraméter nélkül futott volna le az 1. verzió, és az általad javasolt "$mit/$file" alakot választjuk, a script a $mit hiányában a "/$file" alakot vizsgálta volna. Ebben az esetben viszont hibás lenne az eredmény.
Mivel nem volt kedvem hibakezelést beleépíteni, példaként anélkül írtam le. A paraméter nélküli futtatáskor így a "$file" nem módosul, tehát nem okoz gondot.
A második verzió azonban kiküszöböli a "/" elhagyhatatlanságát a paraméter esetében. ("/"-rel vagy anélkül: a script helyesen fogja kezelni.)
Remélem, világos volt, és nem kell további köröket futnunk.
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Koszonom a segitseget.
- A hozzászóláshoz be kell jelentkezni
Vajon miért van for file in `ls $1`
ott, ahol for file in "$@"
kellene legyen?
- A hozzászóláshoz be kell jelentkezni
Kötözködünk, kötözködünk? Mert ebben az esetben a ``for file ;'' tökéletesen elég, lévén egyéb "paraméter" híjján az ``in "$@" '' az alapértelmezés.
- A hozzászóláshoz be kell jelentkezni