Shell脚本太多参数if条件

时间:2012-11-15 20:45:57

标签: bash shell terminal

我当前的脚本执行以下操作;

它以整数作为命令行参数,从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

3 个答案:

答案 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
如果参数不是整数,

会给出略有不同的错误消息,但行为相同。

相关问题