Emil.s skrev:
Kod: Markera allt
if [ ! $1 ]; then
echo No database found
fi
if [ $1 ]; then
mysqldump -f --password="XXX" --opt "$1" > $DESTINATION/$1-$DATUM.sql
fi
if [ $2 ]; then
mysqldump -f --password="XXX" --opt "$2" > $DESTINATION/$2-$DATUM.sql
fi
if [ $3 ]; then
mysqldump -f --password="XXX" --opt "$3" > $DESTINATION/$3-$DATUM.sql
fi
I stället för
[ ! $1 ] för att se om $1 är tom eller odefinierad kan man testa med -z (eller ! -n). Att tolka vilket värde som helst som boolean på ovanstående sätt kan bli väldigt fel om värdet ser ut som en operator (t.ex börjar med minus) eller om det innehåller space. Därför också citat runt $1. Alltså, första testet kan skrivas
[ -z "$1" ]. Alternativt ha ett test som kollar antal argumenten
[ $# -eq 0 ].
Felmeddelandet
"No database found" kan feltolkas. Programmet har ännu inte kollat om nån databas finns, och användaren har inte angivit nån databas som programmet försökt hitta. Felet är att ett obligatorisk argument på kommandoraden saknas. Har ändrat till
"Missing argument" nedan. Vanligen avlutar man program med en status skild från 0 när man upptäcker fel.
I stället för att upprepa med $1, $2, $3 kan du loopa direkt över argumenten:
for f in "$@". Har även placerat $f inom citat på alla ställen nedan.
Kod: Markera allt
if [ -z "$1" ]; then
echo "Missing argument: database name(s)"
exit 1
fi
for f in "$@"; do
mysqldump -f --password="XXX" --opt "$f" > $DESTINATION/"$f"-$DATUM.sql
done
EDIT: som Konservburk tydligen redan förklarat. Men felmeddelandet kan jag väl få äran för
