Nieuws:

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

Auteur Topic: Is deze test juist geschreven.  (gelezen 1770 keer)

Online bart85

  • Lid
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
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

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 */).

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

Online bart85

  • Lid
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
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Online bart85

  • Lid
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
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.