我当前的脚本执行以下操作;
它以整数作为命令行参数,从1到N开始,它检查数字是否可以被三个,五个或两个整除。它简单地打印X为三,Y为五,XY为三,五。如果命令行参数为空。
我遇到这个错误“第11,15和19行的参数太多了。”
以下是代码:
#!/bin/bash
if [ (statement) ]; then
for ...
do
if [ statement ]; then
echo "s1"
elif [ statement2 ]; then
echo "s2"
elif [ statement3 ]
then
echo "s3"
else
echo "$i"
fi
done
elif [ statement ]
then
for ...
do
if [ statement ]
then
echo ""
elif [ statement2 ]
then
echo ""
elif [ statement3 ]
then
echo ""
else
echo "$i"
fi
done
else
echo ""
fi
答案 0 :(得分:6)
请注意,[
实际上是shell中test
内置的同义词(在终端中尝试which [
),而不是像其他语言一样的条件语法,所以你不能这样做: / p>
if [ [$i % 3] -eq 0 ]; then
此外,请务必确保[
,]
之间至少有一个空格,以及构成逻辑条件的变量。
评估表达式(如modulo)的语法是$((...))
的封闭,而内部的变量名称不需要$
作为前缀:
remainder=$((i % 3))
if [ $remainder -eq 0 ]; then
答案 1 :(得分:3)
你应该使用类似的东西:
if [ $(($i % 3)) -eq 0 ]
而不是
if [ $i % 3 -eq 0 ]
if [ [$i % 3] -eq 0 ]
答案 2 :(得分:1)
您的脚本可以大大简化。例如:
#!/bin/sh
n=0
while test $(( ++n )) -le ${1:-20}; do
t=$n
expr $n % 3 > /dev/null || { printf Uc; t=; }
expr $n % 5 > /dev/null || { printf Bes; t=; }
echo $t
done
如果参数不是整数,会给出略有不同的错误消息,但行为相同。