2012-10-09 21 views
0

我寫一個shell程序,需要在三個參數:Bourne Shell的編程:處理參數錯誤

  • 一個整數,確定方案
  • 程序所使用的文件的功能

該命令的格式爲myProgram num文件。但是,如果該命令只有0,1個或多於2個參數,我希望程序輸出一個錯誤。也就是說,如果我輸入「myProgram」,「myProgram num」或「myProgram num file anotherWord」,則會在屏幕上顯示錯誤。有誰知道我可以如何將其實現到我現有的代碼?

回答

0

內置變量$#包含傳遞給腳本的參數的數量。您可以使用此功能來檢查是否有足夠的論據,象這樣:

#!/bin/bash 

if [ $# -ne 2 ]; then 
    echo "Usage: myProgram num file" >&2 
    exit 1 
fi 

# The rest of your script. 
+1

錯誤必須在** STDERR **上,請參閱我的文章。 –

+0

謝謝,更新。 – DanielGibbs

0

使用$#中構建的shell來確定傳遞到腳本中的參數的數量。您的程序名稱不計算在內。

+1

'$?'是最後一次命令運行的退出狀態。 '$#'是參數的數量。 – DanielGibbs

+0

感謝您的注意,修正了錯字。 – FamZheng

0

如果你使用bash,那麼你就可以接近它是這樣的:

#!/bin/bash 
if [ $# -lt 2 ] || [ $# -gt 3 ] 
then 
    echo "You did not provide the correct parameters" 
    echo "Usage: blah blah blah" 
fi 

這是一個非常簡單的檢查。您還可以檢查手冊頁的getopt處理,這在評估命令行參數時功能更強大。

很好

+0

如果少於3個參數,這將僅顯示消息,如果超過3個參數會怎麼樣?編輯 – DanielGibbs

+0

以在bash中顯示有條件的if語句。創建一個「和」使用&&而不是|| – CocoaEv

+0

您可以在測試中用OR條件重寫爲'if [$#-lt 3 -o $#-gt -4]'。或者你可以使用'if [$#-ne 3]'做同樣的事情。此外,原始海報只需要2個參數,而不是3個。 – DanielGibbs

1

在bash,使用整數的情況下,(())is more intuitive

#!/bin/bash 

if (($# < 2)); then 
    printf >&2 "There's less than 2 arguments\n" 
    exit 1 
fi 

if (($# > 2)); then 
    printf >&2 "There's more than 2 arguments\n" 
    exit 1 
fi 

if ! (($1)); then 
    printf >&2 "First argument must be a positive integer\n" 
    exit 1 
fi 

if [[ ! -f "$2" ]]; then 
    printf >&2 "Second argument must be an exited file\n" 
    exit 1 
fi 

# -->the rest of the script here<-- 

此外,爲了尊重最佳實踐 &正確編碼,打印錯誤時,它必須是這樣STDERR像我一樣printf >&2