shell 自定义的变量,计算后如何永久保存 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
KeepingNow
V2EX    Linux

shell 自定义的变量,计算后如何永久保存

  •  
  •   KeepingNow 2018-02-19 11:39:14 +08:00 5412 次点击
    这是一个创建于 2873 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #设置一个变量 number=0 #计算+1 let number++; #此时变量 number 等于 1 

    我想实现的是:当我 再次 运行此脚本后,number 是从 1 开始计算的

    给个关键词也行,当然如果给出具体的大概的实现过程更好了

    我没搜到,网上是一些永久存储 环境变量 的例子

    提前谢谢!

    第 1 条附言    2018-02-19 13:18:54 +08:00
    讨论结束,调用外部文件,文件前加,再次感谢各位!
    第 2 条附言    2018-02-19 20:00:14 +08:00

    已接收 9omph 修改后的脚本,该脚本主要加入了 AWK。另外谢谢各位的提供的思路,包括调用外部文件、数据库等等。主要是我是一个非常小的测试,所以更倾向于单脚本内完成。如果有更好的脚本修改我会参考。再次感谢各位!

    第 3 条附言    2018-02-20 09:03:05 +08:00

    更新:十五楼有 SED 方法可作参考。

    16 条回复    2018-02-20 09:01:21 +08:00
    AEANWspPmj3FUhDc
        1
    AEANWspPmj3FUhDc  
       2018-02-19 11:40:41 +08:00   2
    输出到 文本?
    下次执行再读取这个文本?
    KeepingNow
        2
    KeepingNow  
    OP
       2018-02-19 11:43:53 +08:00
    @ivlioioilvi 哦,好想法,我没想到,我先记下,如果没有其他更好的我就用这个。我更希望在该脚本内实现,这样就不用再多一个文件了
    ik
        3
    ik  
       2018-02-19 12:05:50 +08:00 via iPhone
    @KeepingNow 文件前加 . 眼不见心不烦
    hsuan
        4
    hsuan  
       2018-02-19 12:32:37 +08:00 via Android
    环境变量
    aice114
        5
    aice114  
       2018-02-19 12:55:26 +08:00 via Android
    把 number 加脚本名后面呗,运行的时候读取,运行完了重新保存一下就是了
    rrfeng
        6
    rrfeng  
       2018-02-19 12:57:21 +08:00 via Android
    环境变量也并不能。只能借助外部资源。
    KeepingNow
        7
    KeepingNow  
    OP
       2018-02-19 13:16:17 +08:00
    @aice114 嗯,我想了想还是调用外部文件吧。
    KeepingNow
        8
    KeepingNow  
    OP
       2018-02-19 13:17:30 +08:00
    @ik
    omph
        9
    omph  
       2018-02-19 13:52:31 +08:00   2
    改自己
    ```
    number=5
    let number++
    cd "$(dirname "$0")"
    awk '/^number=[0-9]/{gsub("[0-9]+",num)} {print >file}' num=$number file="$0" "$0"
    ```
    msg7086
        10
    msg7086  
       2018-02-19 15:22:56 +08:00
    主要原因是程序退出以后环境变量就会被销毁了。
    所以只能保存到外部存储中,简单点就是文件,复杂点可以读写 redis 等数据库。
    KeepingNow
        11
    KeepingNow  
    OP
       2018-02-19 19:51:04 +08:00
    @omph 非常感谢!已发送十枚 V2EX 铜币作为感谢,请查收。
    KeepingNow
        12
    KeepingNow  
    OP
       2018-02-19 19:51:46 +08:00
    @msg7086 谢谢,这是一个新思路。
    pkookp8
        13
    pkookp8  
       2018-02-20 02:49:37 +08:00 via Android
    给个思路
    先判断存不存在,不存在付初值并 source 到环境变量,存在直接拿来用
    pkookp8
        14
    pkookp8  
       2018-02-20 02:52:06 +08:00 via Android
    @pkookp8 没注意不能用环境变量,那就读写文件吧,格式用 key=val 的话,加载的时候 source 一下就行,也很方便
    assrt
        15
    assrt  
       2018-02-20 04:43:14 +08:00   1
    9 楼的方法保险一点可以用注释来做锚点,只匹配语句的话要非常注意写正则
    比如
    ```
    number=5 #SAVE_NUMBER
    let number++
    sed -i "0,/.*#SAVE_NUMBER/s/.*#SAVE_NUMBER/number=$number #SAVE_NUMBER/" $0
    ```
    macOS 请用 gsed
    KeepingNow
        16
    KeepingNow  
    OP
       2018-02-20 09:01:21 +08:00
    @assrt 感谢,已发送十枚 V2EX 铜币作为感谢,请查收,sed,新思路。我觉得需要花点时间学学 AWK 和 SED 了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     804 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:08 PVG 06:08 LAX 14:08 JFK 17:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86