bash脚本中的增量编号(变量)

时间:2017-01-20 13:25:38

标签: linux bash shell

我需要在bash脚本中增加一个变量。 但是在脚本完成之后,应该使用新编号导出变量,并在下次脚本运行时可用。

IN MY SHELL

    set x=0
SCRIPT

" If something is true.. do"
export x=$(($x+1)) //increment variable and save it for next time
if [ $x -eq 3 ];then 
    echo test
fi
exit

2 个答案:

答案 0 :(得分:3)

您无法在两个进程之间将变量保留在内存中;该值需要存储在某处并在下次启动时读取。最简单的方法是使用文件。 (支持"通用"变量的fish shell使用一个单独的进程,它始终在启动和退出时与新shell进行通信。但即便如此,#34; master"当 it 退出时,进程需要使用文件来保存值。)

# Ensure that the value of x is written to the file
# no matter *how* the script exits (short of kill -9, anyway)
x_file=/some/special/file/somewhere
trap 'printf '%s\n' "$x" > "$x_file"' EXIT

x=$(cat "$x_file")   # bash can read the whole file with x=$(< "$x_file")
# For a simple number, you only need to run one line
# read x < "$x_file"
x=$((x+1))
if [ "$x" -eq 3 ]; then
   echo test
fi
exit

答案 1 :(得分:0)

导出变量只是一种方式。导出的变量将具有shell的所有子进程的正确值,但是当子进程退出时,父进程将丢失更改的值。实际上,父进程只会看到变量的初始值。

这是一件好事。因为所有子进程可能会更改导出变量的值,所以可能会为其他子进程搞乱(如果更改值是双向的)。

你可以做以下两件事之一:

  • 让脚本在退出之前将值保存到文件中,并且 在启动时从文件中读取它
  • 使用source your-script.bash. your-script.bash。这样,你的 shell不会创建子进程,并且变量会被更改 同样的过程