Per shell script chmod-h

H

hsg32

Grünschnabel
Hallo Community,

ich such mich wund und hoffe Ihr könnt mir helfen.

ich möchte in einem shell-skript bei einigen symlinks den benutzer und die Gruppe ändern. Also mit: chmod -h

Bisher habe ich:
Code:
#!bin/sh

echo
echo "Hiermit wird der Besitzer und die Gruppe der Symlinks angepasst!!!"
echo
echo "Wie lautet der neue Besitzer"

read besitzer

echo
echo "Wie lautet die neue Gruppe"

read gruppe

echo "Der neue Besitzer und die neue Gruppe werden wie folgt eingesetzt:"
echo
echo "$besitzer:$gruppe"
echo
echo "Sollen die Ordner nun angepasst werden? (ja - nein)"

read antwort

if [ $antwort = "ja" ]

then

chown -h $besitzer:$gruppe ./erster.symlink
chown -h $besitzer:$gruppe ./zweiter.symlink
chown -h $besitzer:$gruppe ./dritter.symlink
chown -h $besitzer:$gruppe ./vierter.symlink

Hab' viel versucht, doch nehmen die s-links die Eingaben nicht an.
Ich arbeite als "root" mit SuSE 11.

Frage mich mittlerweile, ob das per script überhaupt geht?
Ich bin - wie ihr sicherlich bemerkt - noch am Anfang meiner "Skript-Karriere" :)


Danke für jeden Tipp.
 
Hi,

du solltest vor allem versuchen etwas sorgfaeltiger zu arbeiten, du schreibst (auch im Titel des Threads) chmod, meinst aber chown, wie es auch richtig im Skript steht. ;)

Ausserdem fehlt das "fi" am Ende der If-Abfrage, koennte aber ein copy-paste Fehler sein. Ansonsten wuerde ich noch drauf achten vernuenftig einzuruecken.

Ahja, und mit der Option -e fuer echo kannst du auch Zeilenumbrueche mit in die Strings einbauen, ist IMHO besser zu lesen (z.B. echo -e "\nHallo Welt!\n").

Ich musste erstmal nachgucken wofuer chown -h benutzt wird. Kann dein System denn Symlinks anderen Benutzern zuordnen? Ich wusste gar nicht dass das geht, und in der manpage steht auch, dass -h nur auf Systemen einen Effekt hat, die das ueberhaupt unterstuetzen.

Im Skript funktioniert im Allgemeinen alles, was in der Konsole (sh in deinem Fall) auch geht. (Ich meine es gibt ein paar wenige Ausnahmen, aber das sind wenn dann Grenzfaelle.)

mfg,
bytepool
 
Zuletzt bearbeitet:
Ausserdem fehlt das "fi" am Ende der If-Abfrage, koennte aber ein copy-paste Fehler sein.

Ich denke es ist kein Copy/Paste Fehler, mit dem fi klappt das hier™ zumindest problemlos.

BTW:

Bei read den Parameter -e mitgeben, ist sicherlich auch keine dumme Idee.
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank!

@bytepool

Danke für den berechtigeten Tadel, ich sollte wirklich sorgfältiger arbeiten.
"fi" hat tatsächlich gefehlt, und ich hab's einfach nicht gecheckt! :think:

@Rain_Maker

Danke für Dein Vertrauen in meine Fähigkeiten. Leider war es kein Copy/Paste-Fehler :(!
Bei mir funktioniert's mit "fi" jetzt auch super!

Danke auch noch für die anderen Tipps. Es ist einfach gut, wenn noch jemand, der sich auch auskennt, über den Code schaut. Und sei er noch so winzig :D!!!

Grüße hsg32
 
Bei read den Parameter -e mitgeben, ist sicherlich auch keine dumme Idee.
Ah, praktisch, die Option kannte ich auch noch nicht, wieder was gelernt. :)

Die if-Abfrage kann man eigentlich auch besser in ein case statement umwandeln, dann gehen naemlich auch so schoene Sachen wie das hier:
Code:
read -e foo
case $foo in
    j|ja|J|Ja)
        echo jawoll
        ;;
    *)
        echo noe
        ;;
esac

mfg,
bytepool
 
Die if-Abfrage kann man eigentlich auch besser in ein case statement umwandeln, dann gehen naemlich auch so schoene Sachen wie das hier:

Ansonsten könnte das auch so aussehen:
Code:
read -e foo
case "$foo" in
    [jJ]*)
        echo jawoll
        ;;
    *)
        echo nö
        ;;
esac

:)
 
Und wenn dann jemand "jetzt nicht" tippt? ;)

edit:
Na gut,
Code:
   [Jj]a|[Jj])
ist vielleicht doch eleganter, aber dann werden wir echt spitzfindig. ;)
 
Zuletzt bearbeitet:

Ähnliche Themen

Windows clients können nicht mehr auf lange laufendes System zugreifen

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

Datum,Name & Uhrzeit in einem Shell Script!

sed im script per crontab

Mein erstes größeres Skript.

Zurück
Oben