Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Bash script met parameters  (gelezen 1257 keer)

Offline w.d

  • Lid
    • WTR-DK
Bash script met parameters
« Gepost op: 2011/09/19, 14:04:44 »
Hoi,

Ik heb een bash-script gemaakt wat bestanden in een map per stuk in een zip-file plaatst en het origineel daarna verwijdert. Dat werkt perfect (beetje van mezelf en een beetje gejat  ;))
#!/bin/bash
echo "zip it!"
for f in "$@"
do
zip -j "$f.zip" "$f"
rm "$f"
done
echo "Finished zip it!"

Ik roep hem aan met:
./zipit ~/directory/*
Nou zou ik graag via een parameter willen meegeven of het oorspronkelijke bestand verwijderd moet worden, alleen krijg ik dat niet voor elkaar. Kan iemand me hier wegwijs in maken?
Dus bijv.
./zipit ~/directory/* maakt .zip bestanden aan en verwijderd de originelen NIET
./zipit ~/directory/* -d maakt .zip bestanden aan en verwijderd de originelen WEL

Thanks voor de hulp!

Re: Bash script met parameters
« Reactie #1 Gepost op: 2011/09/19, 14:19:05 »
Zoek maar eens naar getopts. Dat is een ingebouwde bash commando waarmee je kan doen wat je wil.

Offline w.d

  • Lid
    • WTR-DK
Re: Bash script met parameters
« Reactie #2 Gepost op: 2011/09/19, 14:39:20 »
Thomas,

Bedankt voor je snelle reactie. Ik ben aan het klooien met getopts, maar ik kom er niet uit. Heb jij een idee wat ik fout doe?
Hij zipt keurig, maar delete niet als ik de optie 'y' of '-y' meegeef...

#!/bin/bash
echo "zip it!"
for f in "$@"
do
zip -j "$f.zip" "$f"
while getopts ":y" opt; do
case $opt in
y)
        rm "$f" >&2
        ;;
\?)
echo "originelen NIET verwijderd" >&2
;;
esac
done
done
echo "Finished zip it!"

Re: Bash script met parameters
« Reactie #3 Gepost op: 2011/09/19, 15:55:16 »
Zo werkt het wel (wel eerst opties, en dan bestandsnamen als argument geven):
#!/bin/bash
echo "zip it!"
while getopts "y" opt; do
  case $opt in
    y) delete=y;;
    ?) delete=n;;
  esac
done
shift $(($OPTIND -1))
for f in "$@"; do
    zip -j "$f.zip" "$f"
    case $delete in
y) rm "$f" >&2 ;;
?) echo "originelen NIET verwijderd" >&2 ;;
    esac
done
echo "Finished zip it!"

Offline w.d

  • Lid
    • WTR-DK
Re: Bash script met parameters
« Reactie #4 Gepost op: 2011/09/19, 16:04:20 »
Hoi Thomas,

Ik ben het gelijk gaan proberen, maar helaas geen succes...
In het geval dat ik geen 'y' meegeef komt de volgende melding:
"zip error: Nothing to do!"

Als ik wel 'y' meegeef volgt deze melding:
zip warning: name not matched: y

Ik voer het script uit met ./zipit y ~/*.*

Klopt dat?
Thanks again

Re: Bash script met parameters
« Reactie #5 Gepost op: 2011/09/19, 16:15:41 »
Een optie geef je met een '-' ervoor aan. Dus -y ipv y, dan zou het moeten werken. Bij werkt het in ieder geval wel.
« Laatst bewerkt op: 2011/09/19, 16:19:24 door Thomas de Graaff »

Offline w.d

  • Lid
    • WTR-DK
Re: Bash script met parameters
« Reactie #6 Gepost op: 2011/09/19, 16:22:36 »
Duh... Mijn oorspronkelijke haarkleur speelt weer op door het grijs heen!  ;)
Het werkt nu prima.
Dank voor je (snelle) hulp, weer veel wijzer geworden!

Re: Bash script met parameters
« Reactie #7 Gepost op: 2011/09/19, 16:26:35 »
Tijd voor een grijze haarspoeling dan. :D