ubuntuusers.de

Zu viele Argumente (if)

Status: Gelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

ConzT

Anmeldungsdatum:
7. März 2015

Beiträge: Zähle...

Erstmal ein Hi an alle, freut mich Teil eurer Community zu werden.. 😉

Ich bin noch ein relativer Neuling was Unix und Shellprogrammierung angeht und wollte daher mal mit etwas einfachem anfangen.

Ich wollte ein kleines Script schreiben, dass einen User in der Datei ../passwd sucht und wenn es ihn gibt soll er mir die Einträge dazu ausgeben. Wenn ein User nur die ganze Zeit nur die Eingabetaste drückt, soll er weiterhin nach einem Usernamen gefragt werden.

Die Sinnhaftigkeit dieses Programmes ist mal Nebensache ;-P Will einfach mal bisschen, if und while Schleifen üben..

Hier mein bisheriges Script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
read -p "Welcher User soll überprüft werden?:" SEARCH_USER          ## User wird nach einer Eingabe gefragt, diese wird in der Variable SEARCH_USER gespeichert


if [ -z $SEARCH_USER ]                                              ## Wenn keine Eingabe(z.b. nur Enter) erfolgt ist, geht es in der while-Schleife weiter. Ansonsten bei der Variable zwischen.
then
	while [ -z $SEARCH_USER ]                                   ## Solange wie keine Eingabe erfolgt, soll nachfolgender Befehl durchgeführt werden.
do

      read -p "Welcher User soll überprüft werden?:" SEARCH_USER    ## User wird solange nach einer Eingabe gefragt bis diese eine Wert hat der nicht leer ist

done
fi

zwischen=$(grep $SEARCH_USER /etc/passwd)                           ## in der Variable 'zwischen' soll die Ausgabe von grep $SEARCH_USER /etc/passwd gespeichert werden, damit diese später auf seine Richtigkeit                                                                         ##                                                                  ## geprüft werden kann. (Hier bin ich mir nicht sicher ob das eine vernünfige Lösung ist) 

if [ -z $zwischen ]                                                 ## Hier soll geprüft werden, ob der übergebene Wert an die Variable SEARCH_USER in der Datei passwd vorhanden ist. Wenn dies nicht der Fall ist
then

	echo "User nicht vorhanden "                                ## wird dieses Echo ausgegeben.
else

	echo "User ist mit folgenden Einträgen vorhanden: "         ## Wenn der übergebene Wert an die Variable SEARCH_USER in der Datei passwd vorhanden ist, wird dieses echo ausgegeben mit Einträgen(zwischen)
	echo $zwischen
fi

Nun erhalte ich, wenn ich nicht schon bei der ersten Eingabe einen richtigen Wert übergebe, die Meldung:"

Zeile 16: [: Zu viele Argumente.

Die Befehle danach werden trotzdem korrekt ausgeführt..

Das ist die Zeile " if [ -z $zwischen ] "

Das Argument wäre in diesem Fall ja -z $zwischen. Hat hier die Variable 'zwischen' zu viele Eingaben erhalten? Wie kann man das lösen? Wird die Variable SEARCH_USER in der while-Schleife bei jedem "Enter" befühlt und dies gilt als Argument? Macht es Sinn, dass man den Inhalt der Variable vorher löscht, sodass diese nur einen Wert hat?

Danke schonmal für eure Hilfe!

Lg und einen schönen Tag

EDIT: Code in Codeblock geschrieben

EDIT2: Ersten zwei Zeilen wurden gelöscht, damit die Meldung: Zeile 16: [: Zu viele Argumente." auch hier korrekt zu sehen ist 😉

Niualj

Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: 116

Was bewirk noch man "-z" ich habe das nirgends gefunden.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11258

Wohnort: München

"-z" testet, ob ein String leer ist (vgl. http://tldp.org/LDP/abs/html/comparison-ops.html):

-z

string is null, that is, has zero length

Ich denke man müsste dafür sorgen, dass $zwischen als ein einzelner String rauskommt:

1
if [ -z "$zwischen" ] 

ConzT

(Themenstarter)

Anmeldungsdatum:
7. März 2015

Beiträge: Zähle...

  • z String, prüft ob die Länge des String 0 ist

ConzT

(Themenstarter)

Anmeldungsdatum:
7. März 2015

Beiträge: Zähle...

seahawk1986 schrieb:

"-z" testet, ob ein String leer ist (vgl. http://tldp.org/LDP/abs/html/comparison-ops.html):

-z

string is null, that is, has zero length

Ich denke man müsste dafür sorgen, dass $zwischen als ein einzelner String rauskommt:

1
if [ -z "$zwischen" ] 

Genial, danke seahawk, hat funktioniert ☺)

Niualj

Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: 116

Also bei mir geht alles super, wenn man den Text als script Speichert und über

1
bash script.sh

ausführt.

ConzT

(Themenstarter)

Anmeldungsdatum:
7. März 2015

Beiträge: Zähle...

Niualj schrieb:

Also bei mir geht alles super, wenn man den Text als script Speichert und über

1
bash script.sh

ausführt.

Aber nur wenn man $zwischen als String übergibt oder? Perfekte Lösung, thx!

ConzT

(Themenstarter)

Anmeldungsdatum:
7. März 2015

Beiträge: Zähle...

Hi nochmal 😉

Hätte eine weiter Frage.. und zwar wollte ich das Script ein bisschen erweitern...

Ich will, die Gruppen zu den/dem User(n) ausgeben, die aus der passwd Datei ausgelesen werden.

Bei mir habe ich z.B. mehrere Benutzer die ähnlich heißen. Wenn ich z.b.

con eingebe,werden mir alle benutzer in denen con enthalten ist angezeigt. in meinem Fall

constantin constanti

Jetzt will ich das Script erweitern, dass abfragen soll, von welchem User ich die Gruppen sehen will.

Angefangen habe ich so...

1
grep $SEARCH_USER /etc/passwd | cut -d: -f1 | cut -f1 > anzUsr    #passwd wird nach String SEARCHUSER durchsucht, und nur die Benutzernamen werden ausgegeben. Die ausgegeben Zeilen werden in der Datei anzUsr gespeichert

Nun will eine Abfrage an den User machen, für welchen Benutzer die Gruppen ausgegeben werden soll. Dafür zähle ich erstmal die Zeilen in der Datei anzUsr. Den Wert weise ich dann der variable anz zu.

anz=$(wc -l anzUsr)

Nun meine Frage wie ich weitermachen kann/soll.

Die einzelnen Usernamen hätte ich mit dem Befehl

grep XXX /etc/passwd | cut -d: -f1 | head -1l | cut -f1

ausgelesen.

Für XXX die Variable SEARCH_USER und die Zeilen mit head -xl wobei x für die jeweilige Zeile stehen soll.

Kann man mit einer while-Schleife, Variablen in der Höhe anz erstellen? und den Variablen die Zeile mit head -1,2,3,4,5,6,7,8,9,10-n l zuweisen? Oder brauche ich dafür ein Array?

Hoffe ihr wisst was ich meine 😉

Freue mich über jeden Tipp!

Danke euch

Niualj

Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: 116

Mach das ganze doch einfach über /etc/group und dann über Muster.

Jetzt will ich das Script erweitern, dass abfragen soll, von welchem User ich die Gruppen sehen will.

Habe ich nicht ganz verstanden.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13194

Niualj schrieb:

Jetzt will ich das Script erweitern, dass abfragen soll, von welchem User ich die Gruppen sehen will.

Habe ich nicht ganz verstanden.

Das steht in der anderen Diskussion.

Antworten |