【问题标题】:Using AWK to change a variable located in a script使用 AWK 更改位于脚本中的变量
【发布时间】:2016-10-28 23:19:34
【问题描述】:

这是 bash 脚本。
Counter.sh:

#!/bin/bash
rm -rf home/pi/temp.mp3
cd /home/pi/
now=$(date +"%d-%b-%Y")
count="countshift1.sh"
mkdir $(date '+%d-%b-%Y')


在此脚本的第 5 行,计数变量...我只想知道如何使用 AWK 将整数 1(第 18 个字符,感谢您的回复)更改为 3,然后保存Counter.sh 文件。

【问题讨论】:

  • 恕我直言,您对目标的描述不清楚。如果您将要由countshift.sh 处理的数据样本和该输入的预期输出包括在内,那将是完全un模棱两可的。考虑编辑您的 Q 以包含这些定义。另外,我猜你想要count=$(countshift1.sh),它是命令替换,并允许将任何返回的输出从countshift1.sh 分配给变量count。祝你好运。
  • 这是一个糟糕的主意。脚本中的代码应该是静态的。不过,您可以让它从外部文件中读取一个值。
  • 为了记录,现在也见stackoverflow.com/questions/38044884/…
  • 我删除了解释,以便问题更清楚。其他脚本无需处理,因此未发布。 Countshift1.sh 只是一个计数器,每次运行此脚本时都会递增。我只希望文件名使用一个变量,但我需要 awk 来更改变量名,因为按时间跟踪统计信息太复杂,我目前无法弄清楚。谢谢你的建议。
  • 1 是count="countshift1.sh" 中的第 18 个字符,而不是第 17 个字符。

标签: bash variables awk sed scripting


【解决方案1】:

我不认为 awk 是理想的工具。有很多方法可以做到这一点。

我会使用 Perl。

perl -pi -e 's/countshift1/countshift3/' Counter.sh

【讨论】:

  • 使用 GNU Awk,您可以使用 --inline 做同样的事情
【解决方案2】:

这基本上是http://mywiki.wooledge.org/BashFAQ/050——假设你的脚本实际上在更远的地方对$count做了一些事情,你可能应该重构它以避免这种反模式。有关此主题的更多信息,请参阅链接的常见问题解答。

话虽如此,在不更改实时代码的情况下执行您在此处要求的操作并不难。考虑类似

awk 'END { print 5 }' /dev/null > file

cron 工作或类似工作中(使用 Awk 只是因为您的问题需要它,而不是因为它是这项工作的最佳工具),然后在您的主脚本中,使用该文件;

read index <file
count="countshift$index.sh"

虽然这从表面上消除了即时更改脚本的要求(这是一个很大的胜利),但您仍然有另一个令人讨厌的问题(变量中的代码!),您可能应该找到更好的方法来解决它。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2014-07-28
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2023-04-02
    • 2022-01-18
    相关资源
    最近更新 更多