如何检查变量是否有" mysqli"或" mariadb"值

时间:2016-11-17 16:20:07

标签: bash

我有一段脚本:

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"?

3 个答案:

答案 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

当你标记时,你应该知道改进的[[,它允许你写这个:

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