Shell-Abfrage: if user

DarkRaver

Erfahrenes Mitglied
Hallo!
Wie kann man in einer Shell-Datei soetwas festlegen;
Code:
if(user(xyz))
{
COMMAND
}
else
{
su xyz
COMMAND
}
Dies würde denke ich mal so nicht funktionieren. Wie sollte man es so machen?
Der user "xyz" soll etwas ausführen. Wenn er auszuführende User aber nicht "xyz" ist soll sich der User wechseln.
Oder gar besser:
Ist es möglich diesen Command von einem root-user von diesem user aus auszuführen ohne ihn direkt zu wechseln?

Vielen Dank schonmal :D
 
Ich kenne mich mit shell-scripten eigentlich kaum aus, aber folgendes funktioniert:
Code:
if test `whoami` = 'xyz'
then
	echo "ja"
else
	echo "nein"
fi
 
Nur Schönheitskorrekturen:

Code:
if [ $(whoami) = "$USER" ]
then
  $DO
else
  $DOSOMETHINGELSE
fi

If-Abfragen und Command-Substitutions würde ich der Übersichthalber deutlicher kennzeichnen. Das tut der Funktionalität keinen Abbruch ;)
 
Hallöchen ich bins noch einmal
Ich habe das nun so:
Code:
if [ $(whoami) = "css" ]
then
  cd /home/server/counter-strike-source/27015_war
  screen -A -m -d -S 27015_war ./srcds_run -game cstrike -secure +map de_dust2 -maxplayers 13 -port 27015 -ip 85.214.90.108 -tickrate 100 -autoupdate
else
  su css
  cd /home/server/counter-strike-source/27015_war
  screen -A -m -d -S 27015_war ./srcds_run -game cstrike -secure +map de_dust2 -maxplayers 13 -port 27015 -ip 85.214.90.108 -tickrate 100 -autoupdate
fi

Aber laufen tut das nicht...
Kann mir da bitte einer helfen? Die Commands sind die die ausgeführt werden sollen.

Danke schonmal
 
Mh ... whoami ist ein Programm, dass dir auswirft, als welcher User du eingeloggt bist ...

die Variable $LOGIN kann dir das auch sagen ...
 
Die Zeile
Bash:
if [ $(whoami) = "css" ]
braucht ein ;
Bash:
if [ $(whoami) = "css" ];

Zusaetzlich finde ich in Scripts auch noch pushd und popd, als Alternativen zu cd, ganz angenehm.
 
Hi.
Die Zeile
Bash:
if [ $(whoami) = "css" ]
braucht ein ;
Bash:
if [ $(whoami) = "css" ];
Nein, braucht es nicht. Ein Semikolon muss man nur setzen, wenn man keinen Zeilenumbruch zwischen dem ] und dem then hat.

Allerdings führt su ja nur die Login-Shell aus -- und da passiert dann nichts weiter.

Ich würde das Skript einfach rekursiv aufrufen. Und externe Programme aufzurufen würde ich vermeiden:
Bash:
if [[ "$USER" != 'css' ]]; then
  if [[ -n "$TRY_AS_USER_CSS" ]]; then 
     echo "could not execute script." >&2
     exit 1
  fi
  TRY_AS_USER_CSS=1 exec su -c "$0 $@" css
fi

cd /home/server/counter-strike-source/27015_war
screen -A -m -d -S 27015_war ./srcds_run -game cstrike -secure +map de_dust2 -maxplayers 13 -port 27015 -ip 85.214.90.108 -tickrate 100 -autoupdate
Gruß
 
Zuletzt bearbeitet:
Zurück