好吧,我需要将所有字符串作为此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一样,但这没用:(
答案 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