Bash 脚本不工作,理解变量

Bash 脚本不工作,理解变量

我的bash技能几乎为零。我想出了一个脚本来监控 wifi 接口的数据传输速度。

#!/bin/bash 
rx_old=0
tx_old=0
speed() {
    read rx_bytes < /sys/class/net/wlp9s0f0/statistics/rx_bytes
    read tx_bytes < /sys/class/net/wlp9s0f0/statistics/tx_bytes
    drx=$(((rx_bytes - rx_old) / 1024))
    dtx=$(((tx_bytes - tx_old) / 1024))
   rx_old=$rx_bytes
    tx_old=$tx_bytes
    echo "$drx KB/s $dtx KB/s"  
}
while true;
do
    echo $(speed)
    sleep 1
done

这不起作用,我的意思是变量 rx_old 和 tx_old 似乎没有更新。我认为我无法从函数内部更改这些变量。有人可以给我一些对此的见解吗?

答案1

问题是echo $(speed)。里面的命令$(...)在子 shell 中执行,换句话说,在执行脚本的 shell 的子进程中执行。子 shell 无法更改其父 shell 中的变量。

结果,主 shell 中的rx_oldtx_old确实没有更新。具有相同名称的变量会在子 shell 中更新,但当子 shell 退出时它们会消失。

不需要$(...),因为它所做的只是回显该函数已经回显的文本speed。它可以被替换为“naked” speed,它在主 shell 中运行并因此更新这些变量。

相关内容