Bash -如何在if[]条件内设置变量并在外部使用



我正在努力理解这一点。我有一个基本的Bash脚本:

#!/bin/bash
do_exit=0
while [ "$do_exit" == 0 ] ; do
echo $do_exit
do_exit=1
done

这工作。但是,当我想在if条件中设置do_exit=1时:

#!/bin/bash
do_exit=0
while [ "$do_exit" == 0 ] ; do
free=`free -m | grep Mem | awk '{print $4}'`
if [ "$free" -gt 0 ]
then
echo $do_exit
do_exit=1
fi & sleep 5;
done

$do_exit总是0…所以永远不存在。我做错了什么?我对"破碎"也有同样的问题。和"退出0";当我想终止脚本时,它会继续运行!)

我一定是误解了变量在Bash中的工作方式?在Perl(我常用的编程语言)中,可以在任何地方设置变量(在函数中显式设置变量除外)

有几个错误。

  1. 在设置为1之前回显do_exit
  2. 您有fi & sleep 5;使if语句成为子进程,因此您不能在父进程
  3. 中使用该值
  4. -gt用于数字比较,而不是字符串。

#!/bin/bash
do_exit=0
while [ "$do_exit" == 0 ] ; do
free=`free -m | grep Mem | awk '{print $4}'`
if [[ $free -gt 0 ]]; then
do_exit=1
echo ${$do_exit}
fi
sleep 5;
done

你也可以breakwhile循环。检查:

#!/bin/bash
while true; do
free=$(free -m | grep Mem | awk '{print $4}')
if [[ $free -gt 0 ]]; then
break;
fi
sleep 5;
done

最新更新