Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

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

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

Offline w.d

  • Lid
    • WTR-DK
  • Steunpunt: Nee
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!

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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!"

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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!

Offline Thomas de Graaff

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