2016-08-13 88 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

相关问题