【问题标题】:Bash: While loop-Error " No such file or directory" [duplicate]Bash:虽然循环错误“没有这样的文件或目录”[重复]
【发布时间】:2016-12-20 14:38:09
【问题描述】:

我有一些代码不起作用。它说,“没有这样的文件或目录”,并在第 27 行崩溃:

while [ $i  < $amount]

但我不知道为什么。有人吗?

#!/bin/bash
#WWGEN Aleandro

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

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

【问题讨论】:

  • 因为运行[命令时带有参数$i],从$aantal重定向stdin。
  • 以文字形式发布文字,而不是文字图片。
  • 更新,+英文代码
  • 通过shellcheck.net 运行您的脚本。它会指出你的许多错误。
  • 您为什么要使用命令替换来进行简单的分配? small="abcdefghijklmnopqrstuvwxyz"

标签: bash error-handling while-loop sh


【解决方案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

(我会让你从法语翻译 :))

【讨论】:

  • 虽然 [ $i -lt $aantal ] 不起作用。我收到错误“ wwgen.sh: line 27: [: 0: binary operator expected”。 $aantal 是一个类似 6 或 7 的数字,......
  • 可能是因为这次您没有通过没有将正确的选项传递给脚本来定义$aantal(在一个简单的测试中,我完成了这项工作)。请幽默我们并按照 melpomene 的要求发布文字。你的截图伤了我的眼睛,我什至无法复制/粘贴来完全测试。
  • 好吧,我更新了帖子!
  • 不完全:请发布完整的输出以及建议的更改。
  • 已通过您的网站解决:D
猜你喜欢
  • 2016-02-24
  • 2016-06-25
  • 1970-01-01
  • 2020-11-07
  • 2014-02-13
  • 1970-01-01
  • 2021-09-01
  • 2018-05-25
  • 2013-08-03
相关资源
最近更新 更多