如果[-z $ var1] && [$ var2 ==“ 1”];然后无法按预期工作

时间:2019-05-09 11:35:13

标签: bash if-statement ubuntu-18.04

我正在编写一个bash脚本,我需要在这两个条件中使用&&运算符

var1=value
var2=1

if [-z $var1 ] && [$var2=="1"]; then
   do something
else
   do something else
fi

,但是它总是执行else部分。

我的研究

  1. google给了我这样的bash条件,但它对我不起作用。
if [condition1] && [condition2]; then
 do something
fi
  1. 我尝试过的另一种方法是此方法,但它仍然完全忽略了真实部分
if [[-z $var1 ]] && [$var2=="1"]; then
   do something
else
   do something else
fi
  1. 尝试过-a这样的运算符
if [-z $var1  -a $var2=="1" ]; then
  1. 如果嵌套,则尝试
if [-z $var1 ]; then
    if [$var2=="1"]; then
      do something
    fi
else
      do something else
fi

所以我知道我做错了,但是我的目标是我要检查$ var1中的任何值,并且还希望$ var2条件为true并执行真实部分。

更新

我尝试过

#! /bin/bash 
set -o nounset
#set -o errexit
set -o pipefail
set -o xtrace
var1=pop
var2=1

if test -z "$var1" && test "$var2" -eq 1; then
    echo Y1
fi

if [ -z "$var1" ] && [ "$var2" -eq 1 ]; then
    echo Y2
fi

这是输出

root@c847b6423295:/# ./test.sh 
+ var1=pop
+ var2=1
+ test -z pop
+ '[' -z pop ']'
root@c847b6423295:/# 

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您要编码“ $var1不为空且$var2等于1”,可以执行以下操作:

if test -z "$var1" && test "$var2" -eq 1; then
    echo Y
fi

等效于:

if [ -z "$var1" ] && [ "$var2" -eq 1 ]; then
    echo Y
fi

如果要比较字符串,请使用单个等号:

if test "aaa" = "aaa"; then
    echo Y
fi