如何在bash中的if语句中使用多个条件?

时间:2015-06-29 18:49:13

标签: bash if-statement conditional-statements

实际上我是一名新的bash学习者。我可以在bash命令中使用一个条件。但是如何在bash中使用多个条件?我可以像这样使用if statement

read a
if [ $a = "y" ] ; then
   echo "YES"
elif [ $a = "Y" ] ; then
   echo "YES"
else
   echo "NO"
fi

我发现了这样的事情:

read a b c

if [ $a -eq $b and $b -eq $c ] ; then
    echo "EQUILATERAL"
elif [ $a -eq $b or $b -eq $c ] ; then
    echo "ISOSCELES"
else
    echo "SCALENE"
fi

我只是想知道,使用什么而不是andor

4 个答案:

答案 0 :(得分:1)

&&使用and || or

read a b c

if [ "$a" == "$b" ] && [ "$b" == "$c" ] ; then
    echo "EQUILATERAL"
elif [ "$a" == "$b" ] || [ "$b" == "$c" ] ; then
    echo "ISOSCELES"
else
    echo "SCALENE"
fi

答案 1 :(得分:1)

使用&&||有多个条件。此外,将方括号更改为括号。此外,将-eq更改为==,因为您需要比较数字而不是字符串。这有效:

#!/bin/bash

read a b c

if (( $a == $b )) && (( $b == $c )); then
    echo "EQUILATERAL"
elif (( $a == $b )) || (( $b == $c )) ; then
    echo "ISOSCELES"
else
    echo "SCALENE"
fi

答案 2 :(得分:1)

除了先前的答案之外,在单个[test(它们是相同的)子句中使用复合表达式的正确方法是使用-a(对于{{ 1}})和and(适用于-o)。

(例如,测试orfile1是否可读):

file2

使用if [ -r "$file1" -a -r "$file2 ] then # do something with the files fi 本身:

test

答案 3 :(得分:1)

test括号内执行此操作的便携方式是使用-a-o。但请注意,-eq是数字比较,因此在比较它们之前,您需要确保变量是数字。像这样:

#! /bin/sh

read a b c
expr "$a" : '[0-9][0-9]*$' \& "$b" : '[0-9][0-9]*$' \& "$c" : '[0-9][0-9]*$' >/dev/null || exit

if [ $a -eq $b -a $b -eq $c ] ; then
    echo "EQUILATERAL"
elif [ $a -eq $b -o $b -eq $c ] ; then
    echo "ISOSCELES"
else
    echo "SCALENE"
fi