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

安德鲁·纽比(Andrew Newby)

我正在努力解决这个问题。我有一个基本的Bash脚本:

#!/bin/bash

do_exit=0

while [ "$do_exit" == 0 ] ; do

        echo $do_exit

        do_exit=1

done

这有效。但是,当我想do_exit=1if条件设置时

#!/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 ...所以永远不存在。我究竟做错了什么?当我想杀死脚本时,我遇到“ breaking”和“ exit 0”相同的问题-它只是继续!)

我一定会误会变量在Bash中如何工作?在Perl(我的常规编程语言)中,您可以在任何地方设置变量(在函数中显式设置它们除外)

河口

有几个错误。

  1. do_exit设置为1之前先回声
  2. 您拥有fi & sleep 5;将if语句作为子进程的条件,因此您无法在父进程中使用该值
  3. -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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章