【问题标题】:Creating while loop in bash that would run for specific time在 bash 中创建将运行特定时间的 while 循环
【发布时间】:2016-06-21 21:47:24
【问题描述】:

我有兴趣在 上运行的 bash (version: 3.2.57(1)-release) 中创建一个 while 循环,该循环将运行特定的秒数/分钟数。

示例

例如,我想在 5 秒期间创建 n 个文件,每个文件都有当前日期和时间。

方法

我的循环结构相当基本:

i=$cmd(date %ss)
j=$i + 10
while [ $i -lt $j ]
do
fileName=$cmd(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)
date > $fileName
i=date %ss
done

问题

当我尝试执行脚本时,出现以下错误:

loop.sh: line 1: syntax error near unexpected token `('
loop.sh: line 1: `i=$cmd(date %ss)'

期望的结果:

  • i 计数器反映秒数,循环在 10 秒后停止
  • 在当前工作目录中创建以当前日期为唯一内容的随机*.txt文件

【问题讨论】:

  • 先尝试shellcheck.net 清理不需要人工反馈的语法问题
  • @thatotherguy 我尝试了另一个错误,已更新。
  • 以下是如何将命令输出分配给变量:var=$(mycommand) 例如var=$(date +%s)
  • @Konrad,SO 是一个节奏如此快的论坛,我通常会阅读更多帖子而不是回答,即使我知道答案,核心小组总是发布这么快,我没有机会到。无论如何,虽然我能够为您提供帮助,但我想说的是,我通过您选择获取 fileName 的方法学到了一些新东西,并将您的技术添加到我的代码库中。谢谢!

标签: osx bash shell loops datetime


【解决方案1】:

以下将产生您在“期望结果”下所述的内容。

#!/bin/bash

i="$(date +%s)"
j="$(( i + 10 ))"

while [ $i -lt $j ]; do
    fileName="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
    date > "${fileName}.txt"
    i="$(date +%s)"
done

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多