我正在编写一个bash脚本,我需要在这两个条件中使用&&运算符
var1=value
var2=1
if [-z $var1 ] && [$var2=="1"]; then
do something
else
do something else
fi
,但是它总是执行else部分。
我的研究
if [condition1] && [condition2]; then
do something
fi
if [[-z $var1 ]] && [$var2=="1"]; then
do something
else
do something else
fi
if [-z $var1 -a $var2=="1" ]; then
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:/#
我在做什么错了?
答案 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