如何在 bash 中的 if 语句中使用多个条件?
How to use multiple condition in if statement in bash?
其实我是一个新 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
我只想知道,用什么代替 and
和 or
?
对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
使用&&
和||
有多个条件。此外,将方括号更改为圆括号。另外将 -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
除了前面的答案,在单个 [
或 test
(它们相同)子句中使用复合表达式的正确方法是使用 -a
(对于and
) 和 -o
(对于 or
)。
(例如测试 file1
和 file2
是否可读):
if [ -r "$file1" -a -r "$file2 ]
then
# do something with the files
fi
使用test
本身:
if test -r "$file1" -a -r "$file2
then
# do something with the files
fi
在 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
其实我是一个新 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
我只想知道,用什么代替 and
和 or
?
对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
使用&&
和||
有多个条件。此外,将方括号更改为圆括号。另外将 -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
除了前面的答案,在单个 [
或 test
(它们相同)子句中使用复合表达式的正确方法是使用 -a
(对于and
) 和 -o
(对于 or
)。
(例如测试 file1
和 file2
是否可读):
if [ -r "$file1" -a -r "$file2 ]
then
# do something with the files
fi
使用test
本身:
if test -r "$file1" -a -r "$file2
then
# do something with the files
fi
在 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