How to check if multiple variables are defined or not in bash

前端 未结 3 1198
情话喂你
情话喂你 2021-01-31 08:19

I want to check, if multiple variable are set or not, if set then only execute the script code, otherwise exit.

something like:

if [ ! $DB==\"\" &&a         


        
相关标签:
3条回答
  • 2021-01-31 08:51

    If you are ok with writing a function for this purpose, it can be pretty convenient.

    This solution uses the ${!VAR_NAME} syntax to check whether the variable is empty and has the added benefit of telling you which variable names are empty.

    check_vars()
    {
        var_names=("$@")
        for var_name in "${var_names[@]}"; do
            [ -z "${!var_name}" ] && echo "$var_name is unset." && var_unset=true
        done
        [ -n "$var_unset" ] && exit 1
        return 0
    }
    
    # Usage for this case
    check_vars DB HOST DATE
    echo "You are good to go" 
    
    0 讨论(0)
  • 2021-01-31 08:53

    You can use -z to test whether a variable is unset or empty:

    if [[ -z $DB || -z $HOST || -z $DATE ]]; then
      echo 'one or more variables are undefined'
      exit 1
    fi
    
    echo "You are good to go"
    

    As you have used the bash tag, I've used an extended test [[, which means that I don't need to use quotes around my variables. I'm assuming that you need all three variables to be defined in order to continue. The exit in the if branch means that the else is superfluous.

    The standard way to do it in any POSIX-compliant shell would be like this:

    if [ -z "$DB" ] || [ -z "$HOST" ] || [ -z "$DATE" ]; then
      echo 'one or more variables are undefined'        
      exit 1
    fi
    

    The important differences here are that each variable check goes inside a separate test and that double quotes are used around each parameter expansion.

    0 讨论(0)
  • 2021-01-31 08:59

    You can check it also by put the variables name in a file

    DB=myDB
    HOST=myDB
    DATE=myDATE
    

    then test them if currently empty or unset

    #!/bin/bash
    while read -r line; do
        var=`echo $line | cut -d '=' -f1`
        test=$(echo $var)
        if [ -z "$(test)" ]; then 
            echo 'one or more variables are undefined'
            exit 1
        fi
    done <var.txt
    echo "You are good to go"
    
    0 讨论(0)
提交回复
热议问题