2016-07-30 62 views
0

我試圖檢查參數的個數是一個,如果我在我的劇本寫了以前的功能是真實的,但它不工作:猛砸在聲明如果多個條件和功能

if [ $# -eq 1 && echo "$1" | lgt && echo "Invalid Length - $1" && echo "$1" | checking_another_function_etc ]; then 
echo "some output" && exit 1 

「lgt」是一個函數名稱。我試圖使用(([[[引號,多個if語句,但它也不工作。也許我應該分開檢查和函數的引用數量,但我不知道該怎麼辦它。我想知道如果它甚至可能通過echo命令if條件。

的事情是我需要一個echo語句的所有功能檢查後,但每個功能後,我需要自己的echo聲明。

回答

3

[是一個普通的命令(也拼寫爲test); [/]對不能簡單地包圍命令列表。只有-eq表達式由[評估;其他的是由shell &&運營商加入的獨立命令。

if [ $# -eq 1 ] && 
    echo "$1" | lgt && 
    echo "Invalid Length - $1" && 
    echo "$1" | checking_another_function_etc; then 
    echo "some output" && exit 1 
fi 

命令的可能的分離可以提供你所期望的:

if [ $# -ne 1 ]; then 
    echo "Wrong number of arguments" 
    exit 1 
elif ! echo "$1" | lgt; then 
    echo "Invalid length: $1" 
    exit 1 
elif echo "$1" | checking_another_function_etc; then 
    echo "some output" 
    exit 1 
fi 

作出echo命令是很少有用的&&運營商的LHS,因爲它的退出狀態總是0.

+0

它顯示每個函數後的每一個輸出,但它仍然沒有顯示條件後的輸出(之後;然後) – Josh

+1

@Josh本答案co正確地將問題中的內容翻譯成有效的shell代碼。但是,這個問題並沒有提供足夠的信息來確定這是否是你想要的。 – John1024

+0

'checking_another_function_etc'的退出狀態(預期和實際)是什麼? – chepner