如何在bash脚本中检查读取输入的有效性



我需要在if-then语句中根据预先确定的服务器列表检查用户输入的5个字符,以确保then语句只对正确的输入起作用。

这是我的代码

printf "please select a system (serv1, serv2, serv3 or serv4):"
read -e -n 5 input
if [[ $input == "serv1" || "serv2" || "serv3" || "serv4" ]]
then
execute some code with $input value
else
echo "$input is an invalid selection"
fi

我遇到的这个问题是,无论用户输入如何,它的行为都像是一个有效的条目。

条件要求重复$input变量,如:

if [[ $input == "serv1" || $input == "serv2" || $input == "serv3" || $input == "serv4" ]]
then
execute some code with $input value
else
echo "$input is an invalid selection"
fi    

@Zlemini已经说过,您需要修复if语句的语法,因为没有比较/运算符的字符串总是会返回true。

您还可以做以下操作:

VALID_SERVERS="serv1 serv2 serv3 serv4"
if [[ "${VALID_SERVERS}" == *"$input"* ]]; then
echo "execute some code with $input value"
else
echo "$input is an invalid selection"
fi  

上面的代码将检查提供的值是否是VALID_SERVERS的子字符串。

另一种方法是使用case语句:

#!/bin/bash
printf "please select a system (serv1, serv2, serv3 or serv4): "
read -e -n 5 input
case $input in
serv1 | serv2 | serv3 | serv4) echo "execute some code with $input value";;
*) echo "$input is an invalid selection";;
esac

最新更新