2016-11-18 6 views
-1

Ich habe noch nie bash verwendet, aber ich versuche, dieses Stück Code zu verstehen. Das Skript soll alle Login-Namen, vollständige Namen und deren Benutzer-IDs anzeigen. Jedoch, wenn ich renne, kann ich nicht über die erste if-Anweisung hinauskommen, und wenn ich die Anweisung lösche, funktioniert es nicht.Bash - nicht genug Argumente

#!/bin/bash 
if [ $# -lt 1 ]; 
    then 
    printf "Not enough arguments - %d\n" $# 
    exit 0 
    fi 

typeset user="" 
typeset name="" 
typeset passwdEntry="" 
while [ $# -ge 1 ]; 
    do 
    user=$1 
    shift 
    name="" 
    passwdEntry=`grep -e ^$user /etc/passwd 2>/dev/null` 
    if [ $? -eq 0 ]; then 
    name=`echo $passwdEntry|awk -F ':' '{print $5}'` 
fi 
echo "$user $name" 
done 
+2

Nun, das Skript will mindestens ein Argument. – Biffen

+1

prüft es die Anzahl der Argumente und wenn es kein Argument gibt, wird es beendet. Wie hast du das Skript ausgeführt? –

+0

Ich weiß nicht, ob es darauf ankommt, aber die erste Halbspalte ';' ist nicht notwendig. Tut es weh? – Djee

Antwort

3

$# bedeutet „die Anzahl der Argumente zu dem aktuellen Schlag-Programm“ und $1 bedeutet „das erste Argument des aktuellen Schlag-Programm“.

Ihr Problem ist also, dass Sie keine Argumente an das Programm übergeben; statt so etwas wie dies zum Beispiel:

./foo.sh 

Sie so etwas schreiben müssen:

./foo.sh USERNAME 

Wie Sie Bash neu sind, ich Skimming sehr empfehlen und bookmarking die Bash Reference Handbuch, http://www.gnu.org/software/bash/manual/bashref.html. Es ist alles auf einer einzigen Seite, so dass Sie die Funktion "In Seite suchen" (typischerweise Ctrl+F) Ihres Browsers verwenden können, um nach Dingen zu suchen.

Verwandte Themen