【发布时间】:2020-06-05 22:38:14
【问题描述】:
我能够在单独的脚本上创建 if-elif-then-else 代码块并验证工作正常。但是,当我添加 UNTIL 或 WHILE 逻辑时,我得到了无效的响应。如果我使用 手动创建 VALIDATE.txt 文件,我不希望得到此响应 = “无效操作”继续” 或 “回滚” 在文件中。请检查我下面的代码
WHILE 脚本
#!/bin/bash
FILE=/Users/lagot/Documents/BASH-TEST/VALIDATE.txt
ACTION=`cat /Users/lagot/Documents/BASH-TEST/VALIDATE.txt >>/dev/null 2>&1`
while [ ! -f "$FILE" ]
do
echo "not exist"
sleep 60
done
if [ "${ACTION}" = "proceed" ];
then
echo "performing proceed"
rm -rf $FILE
elif [ "${ACTION}" = "rollback" ];
then
echo "performing rollback"
rm -rf $FILE
else
echo "invalid operation"
rm -rf $FILE
fi
直到脚本
#!/bin/bash
FILE=/Users/lagot/Documents/BASH-TEST/VALIDATE.txt
ACTION=`cat /Users/lagot/Documents/BASH-TEST/VALIDATE.txt >>/dev/null 2>&1`
until [ -f "$FILE" ]
do
echo "not exist"
sleep 60
done
if [ "${ACTION}" = "proceed" ];
then
echo "performing proceed"
rm -rf $FILE
elif [ "${ACTION}" = "rollback" ];
then
echo "performing rollback"
rm -rf $FILE
else
echo "invalid operation"
rm -rf $FILE
fi
我在一个单独的窗口中创建了 VALIDATE.txt 并检查了自己
lagot-pc:BASH-TEST lagot$ echo proceed >> VALIDATE.txt
lagot-pc:BASH-TEST lagot$ pwd
/Users/lagot/Documents/BASH-TEST
lagot-pc:BASH-TEST lagot$ cat /Users/lagot/Documents/BASH-TEST/VALIDATE.txt
proceed
如果我尝试创建 VALIDATE.txt 并回显文件内的“回滚”
lagot-pc:BASH-TEST lagot$ ./while-script.sh
not exist
not exist
not exist
not exist
not exist
invalid operation
【问题讨论】:
-
elif [[ "${ACTION}"= "rollback" ]];应该是elif [[ "${ACTION}" == "rollback" ]];=表示赋值,==表示比较也需要在变量和运算符之间放置空格 -
@DigvijayS 这是不正确的。在
[[ ]]条件表达式中,=和==是等价的。您正在考虑(( ))算术表达式。顺便说一句,在[ ]测试表达式中,只有=是标准比较(尽管有些shell 允许==作为同义词)。 -
@GordonDavisson 谢谢。那么唯一的问题是变量和运算符之间没有空格
-
我刚刚根据 Digvijay S 和 Gordon Davisson 的建议修改了 bash 脚本。我在测试时仍然得到相同的响应
标签: bash while-loop until-loop