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: Is deze test juist geschreven.  (gelezen 958 keer)

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Is deze test juist geschreven.
« Gepost op: 2016/01/07, 13:16:03 »
Is onderstaande regel juist? Het gaat om de echo en exit opdracht.

([ -e $dir ] && [ -d $dir ]) || echo "$dir is geen map" && exit 1

Offline Paul Matthijsse

  • Lid
  • Steunpunt: Ja
Re: Is deze test juist geschreven.
« Reactie #1 Gepost op: 2016/01/07, 22:52:40 »
Moeilijk te zeggen, mijn terminal stopt/eindigt onmiddellijk. Beter is om even te zeggen wat je van plan bent met die code, wat het zou moeten doen dus, volgens jou.

(Terzijde. Het grootste probleem met programmeurs is dat ze hun code niet documenteren. Gaan ze met pensioen en hun opvolgers begrijpen vierkant de ballen van hun code. Achter elke regel moet commentaar: /* dit hiero doet dat daaro, misschien, en wel hierom */).

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: Is deze test juist geschreven.
« Reactie #2 Gepost op: 2016/01/08, 09:23:09 »
-d (bestaat en is een map) impliceert sowieso al -e (bestaat ongeacht type), dus dat heb je niet extra nodig. Je kan ook rechtstreeks in het test-commando and or, en not gebruiken: (zie ook man test)

[ -e $dir -a -d $dir ]

Deze regel code wordt meteen ook leesbaarder als je een if/else-constructie gebruikt. Ook zou ik $dir ook nog tussen dubbele quotes zetten, zodat dit ook nog werkt als $dir spaties bevat.

if [ -d "$dir" ]; then
    exit 1
else
    echo "$dir is geen map"
fi
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Re: Is deze test juist geschreven.
« Reactie #3 Gepost op: 2016/01/08, 09:49:33 »
Hieonder volgt de volledige code met comments. Ik wil eraan toevoegen dat het programma de reden meld van het afsluiten, bij de volgende regels.

[ -d $mountpoint ] || exit 1  # afsluiten als mountpoint geen map is
[ -d $dir ] || exit 1 # afsluiten als dir geen map is..

Bovenstaande wijze wou ik gebruiken, dus zonder de if then statement.

#!/bin/bash

dir=$1
mountpoint=/mnt/loop

[ -e $mountpoint ] || mkdir -p $mountpoint # map aanmaken als het er nog niet is
[ -d $mountpoint ] || exit 1  # afsluiten als mountpoint geen map is.

[ -e $dir ] || mkdir -p $dir # map aanmaken als het er nog niet is
[ -d $dir ] || exit 1 # afsluiten als dir geen map is.

if ls -A  $mountpoint > /dev/null # afsluiten als mountpoint niet leeg is.
then
echo "$mountpoint is not empty"
exit 1
fi

if mount | grep $mountpoint > /dev/null # controleren of map al als mountpoint word gebruikt.
then
echo "mountpoint $mountpoint already mounted"
exit 1
fi

for file in *.img # alle images uit de map waar dit script staat uitpakken.
do
sudo mount -o loop $file $mountpoint # image koppelen
sudo cp -pR $mountpoint/* $dir && echo "file $file extracted" # copy van image / weergeven dat file is extracted
sudo umount $file # image afkoppelen

done

group=$(id -g -n $USER)

sudo chown -R $USER.$group $dir # eigenaar instellen
sudo chmod -R 0770 $dir # permissies instellen

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Re: Is deze test juist geschreven.
« Reactie #4 Gepost op: 2016/01/08, 18:33:04 »
Script werkt niet goed. Het zit hem in de eerste regels. controleren van het bestaan van een map en aanmaken als hij er niet is.

Code aangepast:
#!/bin/bash

dir=$1
mountpoint=/mnt/loop

# afsluiten als mountpoint geen map is, maar wel als ander bestand bestaat.
[ -e $mountpoint ] && [ -d $mountpoint ] || exit 1

# map aanmaken als het er nog niet is
[ -d $mountpoint ] || sudo mkdir -p $mountpoint


# afsluiten als dir geen map is, maar wel als ander bestand bestaat
[ -e $dir ] && [ -d $dir ] || exit 1
# map aanmaken als het er nog niet is
[ -d $dir ] || sudo mkdir -p $dir

# afsluiten als mountpoint niet leeg is.
if ls -A  $mountpoint > /dev/null
then
echo "$mountpoint is not empty"
exit 1
fi

# controleren of map al als mountpoint word gebruikt.
if mount | grep $mountpoint > /dev/null
then
echo "mountpoint $mountpoint already mounted"
exit 1
fi


# alle images uit de map waar dit script staat uitpakken.
for file in *.img
do
sudo mount -o loop $file $mountpoint # image koppelen

# copy van image / weergeven dat file is extracted
sudo cp -pR $mountpoint/* $dir && echo "file $file extracted"
sudo umount $file # image afkoppelen

done


#eigenaar en permissies instellen.
group=$(id -g -n $USER)
sudo chown -R $USER.$group $dir
sudo chmod -R 0770 $dir