我有一段脚本:
set ${DB_TYPE:='mysqli'}
echo $DB_TYPE
if [ $DB_TYPE -eq "mysqli" -o $DB_TYPE -eq "mariadb" ]; then
#Do some stuff
else
echo >&2 "This database type is not supported"
echo >&2 "Did you forget to -e DB_TYPE='mysqli' ^OR^ -e DB_TYPE='mariadb' ?"
exit 1
fi
但这段剧本不知何故失败了:
if [ $DB_TYPE -eq "mysqli" -o $DB_TYPE -eq "mariadb" ]; then
那么如何比较$ DB_TYPE id" mysqli"或" mariadb"?
答案 0 :(得分:2)
B value = optB.orElseThrow(missingBException);
表示等于。它适用于整数,而不是字符串。对于字符串,请使用.icon {
font-family: 'Open Sans';
font-size: 48;
}
,例如:
-eq
答案 1 :(得分:2)
知道 如何失败会很有用,但以下几点显然有问题:
if [ $DB_TYPE -eq "mysqli" -o $DB_TYPE -eq "mariadb" ]; then
[
内的危险)-eq
用于比较整数,=
应该用于字符串(有关差异的详细讨论,请参阅this question)当你标记bash时,你应该知道改进的[[
,它允许你写这个:
if [[ $DB_TYPE = mysqli || $DB_TYPE = mariadb ]]; then
在[[
内,您无需引用变量,可以将||
用作逻辑或。
您也可以考虑使用它:
case $DB_TYPE in
mysqli|mariadb)
# do one thing
;;
*)
# do other stuff
;;
esac
答案 2 :(得分:1)
如果您有最新版本的bash
,则可以使用equal tilde (=~)
运算符内置的扩展正则表达式匹配。
#!/bin/bash
if [[ "$DB_TYPE" =~ ^(mysqli|mariadb)$ ]]; then