2016-08-13 90 views
0

我有一些代碼不起作用。它說,「沒有這樣的文件或目錄」,並在第27行崩潰:Bash:雖然循環錯誤「沒有這樣的文件或目錄」

while [ $i < $amount] 

但我不知道爲什麼。任何人?

#!/bin/bash 
#WWGEN Aleandro 

small=$(echo "abcdefghijklmnopqrstuvwxyz") 
big=$(echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ") 
C=$(echo "\"") 
D=$(echo '!') 
E=$(echo ",[email protected]#$%^&*()][{};:?-_+=") 
F=$(echo "") 

characters=$(echo $small$big$C$D$E$F) 

while getopts ":cl:p:" opt; do 
    case "$opt" in 
    c) characters=$(echo $big$C$D$E$F);; 
    l) length=$OPTARG ;; 
    p) amount=$OPTARG ;; 
    esac 
done 
shift $((OPTIND - 1)) 

i=0 

echo "amount: $amount" 
echo "length: $length" 

while [ $i < $amount] 

do 

echo "test" 
echo $characters | sed 's/\(.\)/\1\n/g ' | sed 's/^$//g'| shuf -n $length | paste -sd '' 

i=$[$i+1] 

done 

輸出:

bash wwgen.sh -l 6 -p 5 
amount: 5 
length: 6 
wwgen.sh: line 27: [: 0: binary operator expected 

求購輸出: 5與6這樣長度的隨機生成的密碼。

bash wwgen.sh -l 6 -p 5 
amount: 5 
length: 6 
69:AY 
O7H;= 
64]Z 
]^NL! 
(&NW5 
+0

由於運行[帶參數的'$ i'和''命令]',重定向從'$ aantal'標準輸入'。 – melpomene

+1

將文字發佈爲文字,而不是文字圖片。 – melpomene

+0

更新,+英文代碼 – Aleandro

回答

1
while [ $i < $aantal ] 

試圖做涉及採取從文件$ aantal這也解釋了消息輸入一些東西。

劣質測試使用:

while [ $i -lt $aantal ] 

簡單的例子來證明我的觀點:

#!/bin/bash 
i=0 
a=2 
while [ $i -lt $a ] 
do 
    i=$[i+1] 
    echo $i 
done 

輸出:

1 
2 

但是,如果我沒有定義a我得到:

./test.sh: ligne 3 : [: 0 : opérateur unaire attendu 

(我會讓你從法國進行翻譯:))

+0

while [$ i -lt $ aantal],不起作用。我得到錯誤「wwgen.sh:第27行:[:0:二元運算符預期」。 $ aantal是一個數字,如6或7,.... – Aleandro

+0

可能是因爲這次你沒有通過向你的腳本傳遞適當的選項來定義'$ aantal'(在我做這個工作的簡單測試中)。請按照melpomene的要求,將我們幽默併發布爲文本。你的截圖傷害了我的眼睛,我甚至無法複製/粘貼來完全測試。 –

+0

Oke我更新了帖子! – Aleandro

相關問題