如何在 Bash 脚本条件表达式中测试 A 是否不等于 B 或 C
How to test if A is not equal to B or C in Bash Script conditional expression
我希望强制用户输入正确的变量以完成脚本。
var_hadoop="y"
read -p "Install Hadoop after reboot? [y/n]: " var_hadoop
while ! [ $var_hadoop = "y" ] || ! [ $var_hadoop = "n" ]; do
echo "Only enter either \"y\" or \"n\"."
read -p "Install Hadoop after reboot? [y/n]: " var_hadoop
done
我尝试了多种不同的布局并四处搜索,但没有找到任何内容:
!((A == B) or (A == C))
或
((A <> B) and (A <> C))
传统的、惯用的、POSIX 兼容的方法是使用 case
语句:
case $var_hadoop in
y) : handle "y" here ;;
n) : handle "n" here ;;
*) echo 'Either enter "y" or "n"' ;;
esac
也就是说,以下内容适用于 bash 或其他 ksh 扩展为 POSIX 的 shell:
if ! [[ $var_hadoop = [yn] ]]; then
echo 'Either enter "y" or "n"'
fi
...以下适用于所有 POSIX 外壳:
if ! { [ "$var_hadoop" = y ] || [ "$var_hadoop" = n ]; }; then
echo 'Either enter "y" or "n"'
fi
以 POSIX 兼容的方式,您还可以使用 expr string : regex
测试来强制执行 y/n
答案:
#!/bin/sh
printf "Install Hadoop after reboot? [y/n]: "
read var_hadoop
while [ $(expr "x$var_hadoop" : "x[yn]") -eq 0 ]; do
printf "Only enter either \"y\" or \"n\".\n"
printf "Install Hadoop after reboot? [y/n]: "
read var_hadoop
done
我希望强制用户输入正确的变量以完成脚本。
var_hadoop="y"
read -p "Install Hadoop after reboot? [y/n]: " var_hadoop
while ! [ $var_hadoop = "y" ] || ! [ $var_hadoop = "n" ]; do
echo "Only enter either \"y\" or \"n\"."
read -p "Install Hadoop after reboot? [y/n]: " var_hadoop
done
我尝试了多种不同的布局并四处搜索,但没有找到任何内容:
!((A == B) or (A == C))
或
((A <> B) and (A <> C))
传统的、惯用的、POSIX 兼容的方法是使用 case
语句:
case $var_hadoop in
y) : handle "y" here ;;
n) : handle "n" here ;;
*) echo 'Either enter "y" or "n"' ;;
esac
也就是说,以下内容适用于 bash 或其他 ksh 扩展为 POSIX 的 shell:
if ! [[ $var_hadoop = [yn] ]]; then
echo 'Either enter "y" or "n"'
fi
...以下适用于所有 POSIX 外壳:
if ! { [ "$var_hadoop" = y ] || [ "$var_hadoop" = n ]; }; then
echo 'Either enter "y" or "n"'
fi
以 POSIX 兼容的方式,您还可以使用 expr string : regex
测试来强制执行 y/n
答案:
#!/bin/sh
printf "Install Hadoop after reboot? [y/n]: "
read var_hadoop
while [ $(expr "x$var_hadoop" : "x[yn]") -eq 0 ]; do
printf "Only enter either \"y\" or \"n\".\n"
printf "Install Hadoop after reboot? [y/n]: "
read var_hadoop
done