错误:[参数过多|外壳脚本

时间:2018-12-29 01:38:29

标签: shell terminal

好吧,我需要将所有字符串作为此shell脚本的参数进行比较,并说出它们是否相等,所以我尝试一下

#!/bin/bash
#Ejercicio_4
if [ $# -ne 6 ]
  then
        echo Número de argumentos incorrecto
  else
        if [ $1 == $2 == $3 == $4 == $5 == $6 ]

                then
                        echo Son iguales
                else
                        echo No todas las palabras son iguales
        fi
fi

我也尝试过像$ @ == $ 1一样,但这没用:(

2 个答案:

答案 0 :(得分:0)

字符串相等的运算符通常为=。这样的链条也不可能。检查您的man test

通常,您将-a用作“和”并分别检查每个参数。

...
if [ $1 = $2 -a $1 = $3 -a $1 = $4 -a $1 = $5 -a $1 = $6 ]; then
...

答案 1 :(得分:0)

只要您正在使用bash并比较文本字符串, [[..]] 测试就更安全,更灵活。您可以在其中将 && || 用于和/或运算符。这样就可以了:

#!/bin/bash
#Ejercicio_4
if [ $# -ne 6 ]
then
    echo Número de argumentos incorrecto
else
    if [[ "$1" == "$2" && "$1" == "$3" && "$1" == "$4" && "$1" == "$5" && "$1" == "$6" ]]

    then
        echo Son iguales
    else
        echo No todas las palabras son iguales
    fi
fi

还请注意,尽管bash接受了“ ==” 在旧的“ [” 测试中实际上不是有效的语法。您应该只在单括号测试中仅使用单字符“ =” 。 但是,如果要比较整数,则应改用((..))

但是我强烈建议您不要使用此方法,因为当参数数量增加时,您将不得不在if语句中包含更多条件,这可能会变得很麻烦。因此,首选循环,并与其他所有参数一起检查第一个参数,看看它们是否相等,如下所示:

#!/usr/bin/env bash
if [ $# -ne 6 ]
then
    echo "Number of arguments are lesser than required number 6"
else
    number_of_elements=$#
    arguments=("$@")
    first=("$1")
    for (( i=1; i<number_of_elements; i++ )); do
        if [[ "$first" != ${arguments[i]} ]];then
            break
        fi
    done
    if [[ $i -eq $number_of_elements ]];then
        echo "All the argument strings are equal"
    else
        echo "Not equal"
    fi
fi