实际上我是一名新的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
?
答案 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
)。
(例如,测试or
和file1
是否可读):
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