2016-11-18 60 views
-1

我從來沒有使用過bash,但我試圖理解這段代碼。該腳本應該顯示所有登錄名,全名和用戶ID。但是,每當我運行時,我都無法越過第一條if語句,如果我刪除了該語句,則不起作用。Bash - 沒有足夠的參數

#!/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

那麼,腳本至少需要一個參數。 – Biffen

+1

它檢查參數的數量,如果沒有參數,它將退出。你是如何運行腳本的? –

+0

我不知道它是否重要,但第一個半列';'不是必需的。它受傷了嗎? – Djee

回答

3

$#意思是「的參數與當前擊程序數」,和$1裝置「的第一個參數的當前擊程序」。

所以你的問題是你沒有傳遞任何參數給程序;例如,而不是像這樣:

./foo.sh 

你需要寫的是這樣的:

./foo.sh USERNAME 

如你是新來猛砸,我強烈建議略讀和書籤的猛砸參考手冊,http://www.gnu.org/software/bash/manual/bashref.html。它全部在單個頁面上,因此您可以使用瀏覽器的「在頁面查找」功能(通常爲Ctrl+F)搜索內容。

相關問題