# Shell-Abfrage: if user



## DarkRaver (30. Dezember 2009)

Hallo!
Wie kann man in einer Shell-Datei soetwas festlegen;

```
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


----------



## CPoly (30. Dezember 2009)

Ich kenne mich mit shell-scripten eigentlich kaum aus, aber folgendes funktioniert:

```
if test `whoami` = 'xyz'
then
	echo "ja"
else
	echo "nein"
fi
```


----------



## Navy (30. Dezember 2009)

Nur Schönheitskorrekturen:


```
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


----------



## DarkRaver (30. Dezember 2009)

Hey 
Okay danke schonmal aber was meint ihr mit dem 

```
whoami
```
?


----------



## DarkRaver (30. Dezember 2009)

Hallöchen ich bins noch einmal
Ich habe das nun so:

```
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


----------



## Laudian (30. Dezember 2009)

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

die Variable $LOGIN kann dir das auch sagen ...


----------



## Dennis Wronka (31. Dezember 2009)

Die Zeile

```
if [ $(whoami) = "css" ]
```
braucht ein ;

```
if [ $(whoami) = "css" ];
```

Zusaetzlich finde ich in Scripts auch noch pushd und popd, als Alternativen zu cd, ganz angenehm.


----------



## deepthroat (6. Januar 2010)

Hi.





Dennis Wronka hat gesagt.:


> Die Zeile
> 
> ```
> 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:

```
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ß


----------

