Forum » Programiranje » [Bash] Preverjanje legalnosti poti
[Bash] Preverjanje legalnosti poti
messi ::
Pozdravljeni ima kdo idejo kako preveriti če je pot legalna in sicer na naslednje načine:
Program naj dejansko preveri, če lahko pišemo v imenik, ki smo ga podali kot ponor, kamor se zapiše drevesna struktura
Mogoče ima kdo kako idejo kako ot naredit, ok uporabit if pa notri nekaj to je jasno, samo kaj nej bo tisto notri.
lp
vaš messi
Program naj dejansko preveri, če lahko pišemo v imenik, ki smo ga podali kot ponor, kamor se zapiše drevesna struktura
Mogoče ima kdo kako idejo kako ot naredit, ok uporabit if pa notri nekaj to je jasno, samo kaj nej bo tisto notri.
lp
vaš messi
sas084 ::
Neki podobnega temu:
TESTDIR=test if [ -w "$TESTDIR" ]; then #direktorij obstaja in ima pravice pisanja fi
messi ::
Veš sas084 direktorij moramo mi ustvarit, samo prej moramo preverit, ali ima ustrezne pravice oz možnost da ke napišemo, sedaj sem razmišljal nekaj takega:
mkdir vaje || echo napaka && exit 2
kar je ok da mi izpiše napaka, ni pa ok da mi izpiše še default napako ..
mkdir vaje || echo napaka && exit 2
kar je ok da mi izpiše napaka, ni pa ok da mi izpiše še default napako ..
BigWhale ::
Seveda preverjas parent direktorij, ce obstaja in ce lahko zapises kaj vanj. Ce lahko, potem lahko tam ustvaris tudi svoj direktorij, v katerega bos potem tako ali tako imel pravico pisanja
To lahko preveris z ukazom test oziroma [, tocno tako kot ti je predlagal sas084. Lahko uporabis tudi mkdir in kar poizkusis narediti direktorij, mkdir bo vrnil error level 1, ce direktorija ne bo moc ustvariti.
To lahko preveris z ukazom test oziroma [, tocno tako kot ti je predlagal sas084. Lahko uporabis tudi mkdir in kar poizkusis narediti direktorij, mkdir bo vrnil error level 1, ce direktorija ne bo moc ustvariti.
messi ::
Jaz potrebujem da mi vrne napako 2,
Nekaj me zanima, zakaj moram enkrat pri ifu napisat [], drugič pa [[]], ker mi napiše pri prvi unary expresion ?
Nekaj me zanima, zakaj moram enkrat pri ifu napisat [], drugič pa [[]], ker mi napiše pri prvi unary expresion ?
messi ::
Sicer imate praw BigWhale in sas84, ena lepa zahvala sedaj skripta deluje tako kot se zagre. Hvala
messi ::
Ja sicer se pa pojvlja sedaj naslednji problem,
./mojbash.sh /home/messi dela ok
./mojbash.sh /home/messi/novamapa ne dela ker novamapa ne obstaja, vendar bi jo jaz želel da mi ne javi napake in da bi obstajala ta pot oz da ustvari novamapa, vendar mi javi napako :S
./mojbash.sh / - pa javi napako kar je ok
./mojbash.sh /home/messi dela ok
./mojbash.sh /home/messi/novamapa ne dela ker novamapa ne obstaja, vendar bi jo jaz želel da mi ne javi napake in da bi obstajala ta pot oz da ustvari novamapa, vendar mi javi napako :S
./mojbash.sh / - pa javi napako kar je ok
sas084 ::
Preveriš če mapa obstaja, če ne obstaja jo nardiš, s tem da pač dodaš še preverjanje ali imaš pravice pisanja oz tko kot je BigWhale napisu, probaš kar z mkdir naredit mapo in gledaš return code. Prilep skripto da bomo vidli kako maš narejeno.
TEST=test if [ ! -e "$TEST" ]; then #mapa ne obstaja else #mapa obstaja fi
messi ::
Emm celo skripto ne žal ne morem, ker je to drugače aktulna naloga, na friju in ostalo sem že vse skoderal, samo pač tale del me zafrkava, ker vem da bodo nalogo pregledovali z algoritmom in ne nočem da nebi naredil letos:
Naloga je sicer takšna:
Moj izsek je za ta del je:
Naloga je sicer takšna:
Navdušeni fotograf Miha nima časa urejati fotografij, zato jih ima raztresene po vsem disku. Pomagaj mu fotografije urediti po datumu in uri.
Napišite skripto v BASHu, ki poišče vse fotografije (datoteke s končnico jpg (ne razlikujemo med velikimi in malimi črkami) in jih uredi v smiselno drevesno strukturo po letnici in mesecu, datoteko pa preimenuje v format: MMDD-HHMMSS. Podatke o nastanku fotografije preberite iz EXIF informacije (DateTimeOriginal) v sliki s pomočjo orodja exiftool različice 8.60. [20%]
- Uporabnik lahko poda dva argumenta: imenik v katerem se išče fotografije in imenik v katerega se zgradi drevesno strukturo. Če poda samo en argument se predpostavi, da se iskanje začne v trenutnem imeniku. Če ne podamo zadostnega števila argumentov, program javi napako na standardni izhod za napake. Napako izpiše v formatu: Uporaba: ime_programa [SOURCE] DEST. Izhodni status pa je 1. [5%]
______________________________________________________________________________________________
Tale del tuki:
- Program naj dejansko preveri, če lahko pišemo v imenik, ki smo ga podali kot ponor, kamor se zapiše drevesna struktura. [2%]
__________________________________________________________________________________________________
- Datotek dejansko ne premikati ali kopirati, ampak ustvarite samo novo ime, ki kaže na iste podatke. [2%]
- Ker lahko iskanje in obdelava trajata dolgo časa, sproti izpisujte, kateri imenik trenutno pregledujete in za vsako sliko v tem imeniku izpišite ".". Pri izpisu bodite natančni in izpisujete natanko to kar naloga zahteva od vas - do presledka natančno (glejte primer). [10%]
- Uspešno izveden program naj se zaključi z izhodnim statusom 0. [1%]
Primer klica:
$./urediFoto.sh
Uporaba: urediFoto.sh [SOURCE] DEST
$./urediFoto.sh Desktop Pictures
Desktop/card/DCIM/111_PANA/..
Desktop/card/DCIM/110_PANA/.
Desktop/slike/..
Desktop/DCIM/100NCD80/...
Desktop/sneg/.
Datotečna struktura v izvornem imeniku pred klicem in stanje v ponornem imeniku po klicu vašega programa:
Moj izsek je za ta del je:
if [ -w $pot ]; then mkdir -p $pot else echo "napačen direktorij" && exit 2 fi
Zgodovina sprememb…
- spremenilo: messi ()
messi ::
Jaz bi sicer rešil na naslednji način, kot sem že zgoraj pokazal in preverjal z stikalom -e samo, ne vem če je pravilno:
if [-e $1 ]; then echo "" else mkdir vaje || echo napaka && exit 2 fi
Zgodovina sprememb…
- spremenilo: messi ()
BigWhale ::
Ce das ti za destination direktorij potem moras preveriti en nivo visje, ce je moc pisati not.
Torej, ce je destination /my/photo/lib/recent moras preveriti ali lahko pises v /my/photo/lib in ce lahko, potem tam ustvaris direktorih recent.
Pravice za pisanje preverjas s switchem -w.
Torej, ce je destination /my/photo/lib/recent moras preveriti ali lahko pises v /my/photo/lib in ce lahko, potem tam ustvaris direktorih recent.
Pravice za pisanje preverjas s switchem -w.
bigwhale@thefish:~$ [ -w / ] bigwhale@thefish:~$ echo $? 1 bigwhale@thefish:~$ [ -w /home/bigwhale ] bigwhale@thefish:~$ echo $? 0
sas084 ::
Potem verjetno neki v tem stilu: če pot ne obstaja in maš pravice pisanja, potle kreiraš mapo.
if [! -e $pot ]; then if [ -w $pot ]; then mkdir -p $pot else echo "napačen direktorij" && exit 2 fi fi
messi ::
Poz, sedaj sem spisal na takle način ali misliš da je pravilno, imam pa še eno vprašanje glede tega basha kako negiram situacijo oz kam moram dati da zanegiram pogoj da ni potrebno napisati echo -n"".
Potem me še zanima kakšna je razlika med if []; then in [[]]; then, ker ko sem primerjal 2 niza hoče imet 2 oklepaje, pa ne vem zakaj. Hvala za vso pomoč
Potem me še zanima kakšna je razlika med if []; then in [[]]; then, ker ko sem primerjal 2 niza hoče imet 2 oklepaje, pa ne vem zakaj. Hvala za vso pomoč
#!/bin/bash pot=$1 cpot=$pot if [ $pot != "/*" ]; then pot=${pot%/*} fi if [ -e $cpot ]; then echo -n"" else if [ -w $pot ]; then mkdir -p $cpot fi fi
piki12 ::
Prosim še meni kak nasvet:
zanima me kako preveriti, ali smo preusmerili na standardni izhod oz na standarni izhod za napke,
Primer kako preusmeriti, recimo:
na izhod za napake in tam izpisati recimo
ter narediti izhod za napake 5
Druga stvar je pa naslednja izpisat je potrebno da nimam pravic za branje in izhod 2 ter preusmerit na 2 izhod za napake:
Tole mislim da mi je uspelo
Lepo prosim za kako obrazložitev, brskal sem že po netu pa mi še ni jasno
lp
piki
zanima me kako preveriti, ali smo preusmerili na standardni izhod oz na standarni izhod za napke,
Primer kako preusmeriti, recimo:
mkdir -p /piki
na izhod za napake in tam izpisati recimo
echo "joj"
ter narediti izhod za napake 5
exit 5
Druga stvar je pa naslednja izpisat je potrebno da nimam pravic za branje in izhod 2 ter preusmerit na 2 izhod za napake:
Tole mislim da mi je uspelo
echo "Nimam pravice za branje iz datoteke" && exit 2 >&2
Lepo prosim za kako obrazložitev, brskal sem že po netu pa mi še ni jasno
lp
piki
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Kako izračunati hash diska.Oddelek: Programiranje | 5141 (3971) | kunigunda |
» | KAteri program za samodejni resize velike količine slikOddelek: Pomoč in nasveti | 1088 (820) | Hayabusa |
» | [bash] Sortiranje fotografij po datumuOddelek: Programiranje | 1450 (1011) | Mike0 |
» | Bash, terminal,ubuntuOddelek: Operacijski sistemi | 1453 (1094) | Zero0ne |
» | [UNIX] arg list too longOddelek: Programiranje | 1940 (1195) | bijonda |