Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash脚本中的增量编号(变量)_Linux_Bash_Shell - Fatal编程技术网

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

Linux bash脚本中的增量编号(变量),linux,bash,shell,Linux,Bash,Shell,我需要在bash脚本的变量中增加一个数字。 但是在脚本完成后,变量应该以新的编号导出,并且在下次脚本运行时可用 IN MY SHELL set x=0 不能在两个进程之间在内存中持久化变量;该值需要存储在某个位置,并在下次启动时读取。最简单的方法是使用文件。支持通用变量的fish shell使用一个单独的进程,该进程在新shell启动和退出时始终运行以与它们通信。但即使这个主进程在退出时也需要使用文件来保存值 导出变量只是一种方法。导出的变量对于shell的所有子进程都具有正确的值,

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

IN MY SHELL

    set x=0

不能在两个进程之间在内存中持久化变量;该值需要存储在某个位置,并在下次启动时读取。最简单的方法是使用文件。支持通用变量的fish shell使用一个单独的进程,该进程在新shell启动和退出时始终运行以与它们通信。但即使这个主进程在退出时也需要使用文件来保存值


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

这是件好事。由于所有子进程都可能更改导出变量的值,因此如果更改值是双向的,则可能会将其他子进程的情况弄糟

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

让脚本在退出之前将值保存到文件中,然后 启动时从文件中读取它 使用源代码your-script.bash或。您的-script.bash。这边,你的 shell不会创建子进程,并且变量会在中更改 同样的过程
持久变量称为文件。将状态保存在文件中并将其读回。例如,若要保存,请使用echo$x>myfile,若要加载,请使用x=$cat myfile
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
# 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