2013-06-12 24 views
0

我試圖得到一個腳本輸入像-9數字時呼應的消息。錯誤的傳遞參數少於1,我在做什麼?

的參數必須在命令行

傳遞這是我現在有。

#!/bin/bash 
#Assign1part1 

if (($# != 1)); then 
    echo "Error: Must only enter one argument" >&2 
    exit 1 
fi 

if (($1 -lt 1)); then 
    echo "Error: Argument must be a positive integer" >&2 
    exit 1 
fi 

seq -s, $1 -1 1 

回答

0

您需要使用[[]],不(())。前者是測試,後者是表情評估其允許!=但不-lt

最重要的是,你的第一個錯誤消息是稍微偏離,使得它聽起來像是你輸入的參數比你應該有,即使在你不輸入任何情況。這會更好的表述爲"Must enter exactly one argument"

而且,由於$#是數字,我更喜歡在這種特殊情況下使用數字比較-ne而不是!=

換句話說:

#!/bin/bash 
#Assign1part1 

if [[ $# -ne 1 ]]; then 
    echo "Error: Must enter exactly one argument" >&2 
    exit 1 
fi 

if [[ $1 -lt 1 ]]; then 
    echo "Error: Argument must be a positive integer" >&2 
    exit 1 
fi 

seq -s, $1 -1 1 

運行與特定測試數據給出:

pax> testprog 5 
5,4,3,2,1 

pax> testprog 9 
9,8,7,6,5,4,3,2,1 

pax> testprog 
Error: Must enter exactly one argument 

pax> testprog 1 2 
Error: Must enter exactly one argument 

pax> testprog -7 
Error: Argument must be a positive integer 
+1

bash的喜歡'(('和'))'。但是'(('不喜歡'-lt'。 –

+0

嗯..你的意思是{{或[因爲[什麼也不做對我來說,似乎。 – Looking2learned

+0

沒有,@ Looking2learned,絕對'[['和。?']' – paxdiablo

2

((...))不是test

$ ((-1 < 1)) ; echo $? 
0 
$ ((-1 > 1)) ; echo $? 
1 
相關問題