我寫一個shell程序,需要在三個參數:Bourne Shell的編程:處理參數錯誤
- 一個整數,確定方案
- 程序所使用的文件的功能
該命令的格式爲myProgram num文件。但是,如果該命令只有0,1個或多於2個參數,我希望程序輸出一個錯誤。也就是說,如果我輸入「myProgram」,「myProgram num」或「myProgram num file anotherWord」,則會在屏幕上顯示錯誤。有誰知道我可以如何將其實現到我現有的代碼?
我寫一個shell程序,需要在三個參數:Bourne Shell的編程:處理參數錯誤
該命令的格式爲myProgram num文件。但是,如果該命令只有0,1個或多於2個參數,我希望程序輸出一個錯誤。也就是說,如果我輸入「myProgram」,「myProgram num」或「myProgram num file anotherWord」,則會在屏幕上顯示錯誤。有誰知道我可以如何將其實現到我現有的代碼?
內置變量$#
包含傳遞給腳本的參數的數量。您可以使用此功能來檢查是否有足夠的論據,象這樣:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: myProgram num file" >&2
exit 1
fi
# The rest of your script.
使用$#中構建的shell來確定傳遞到腳本中的參數的數量。您的程序名稱不計算在內。
'$?'是最後一次命令運行的退出狀態。 '$#'是參數的數量。 – DanielGibbs
感謝您的注意,修正了錯字。 – FamZheng
如果你使用bash,那麼你就可以接近它是這樣的:
#!/bin/bash
if [ $# -lt 2 ] || [ $# -gt 3 ]
then
echo "You did not provide the correct parameters"
echo "Usage: blah blah blah"
fi
這是一個非常簡單的檢查。您還可以檢查手冊頁的getopt處理,這在評估命令行參數時功能更強大。
很好
如果少於3個參數,這將僅顯示消息,如果超過3個參數會怎麼樣?編輯 – DanielGibbs
以在bash中顯示有條件的if語句。創建一個「和」使用&&而不是|| – CocoaEv
您可以在測試中用OR條件重寫爲'if [$#-lt 3 -o $#-gt -4]'。或者你可以使用'if [$#-ne 3]'做同樣的事情。此外,原始海報只需要2個參數,而不是3個。 – DanielGibbs
在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
錯誤必須在** STDERR **上,請參閱我的文章。 –
謝謝,更新。 – DanielGibbs