如何正常在 git 操作的 sh 中随机运行 for 循环?

Posted

技术标签:

【中文标题】如何正常在 git 操作的 sh 中随机运行 for 循环?【英文标题】:How can I randomly run for loop in sh of git action normally? 【发布时间】:2021-12-26 13:52:13 【问题描述】:

如何在git action的sh中正常随机运行for循环?

这里有一个每天提交的 github 存储库。

用于 github 操作

下面的yml文件存在。

name: planting-grass

on:
   schedule:
     - cron: '0 0 * * *'

jobs:
  task:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set current date
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: Execute commands
        run: sh ./task.sh $ steps.date.outputs.date 
      - name: Commit files
        run: |
          git config --global user.name "$(git --no-pager log --format=format:'%an' -n 1)"
          git config --global user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
          git add date.txt
          git commit -m $ steps.date.outputs.date 
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: $ secrets.GITHUB_TOKEN 
          branch: $ github.ref 

这个 yml 运行 task.sh。 task.sh 看起来像这样:

#!/bin/bash

echo "DATE: $1" >> date.txt

一切正常。

但在data.txt中,每天累计一行。

我想在 data.txt 中累积 1 到 100 之间的行。

我可以在哪里编辑以使用上述功能?

然后我尝试了以下方法:

#!/bin/bash

range=100
number=$((RANDOM % range))

while [ "$i" -le "$number" ]; do
    echo "DATE: $1" >> date.txt
done
#!/bin/bash

range=100
number=$((RANDOM % range))
i=0

while (( i <= number )); do
    echo "DATE: $i" >> date.txt
    i=$((i+1))
done
#!/bin/bash

range=100
number=$((RANDOM % range))

for i in $(seq 0 $number); do
    echo "DATE: $i" >> date.txt
done

但都失败了。

它输出以下错误消息:

./task.sh: 7: [: Illegal number:
./task.sh: 7: [[: not found
./task.sh: 7: i: not found

我想知道如何运行正常的随机 for 循环。

最好的问候!

编辑)

#!/bin/bash

range=100
number=$((RANDOM % range))
i=0

while (( i <= number )); do
     echo "DATE: $i" >> date.txt
     i=$((i+1))
done

上面的代码运行良好,但它只运行一次。 与想在 1 到 100 之间随机运行 echo "DATE: $i" &gt;&gt; date.txt 不同,它总是只执行一次。我们该如何解决这个问题?

【问题讨论】:

最后一个应该有效。 [[: not foundi: not found -> 你不是在运行 bash,而是在运行 sh。 sh ./task.sh。重击!= sh。 [: Illegal number: 变量 i 未在第一个代码 sn-p 中设置。 您可以将 run: sh ./task.sh 更改为 run: bash ./task.sh 以使用 bash 运行您的脚本。您的 cron 计划 (0 0 * * *) 设置为每天运行。您可以将其更改为0,30 * * * *,每半小时运行一次(但日期将全天相同,除非您包括时间,例如date + '%Y-%m%d_%H:%M:%S')。我不确定你的目标是什么。 @dan 请回复答案,而不是评论用运行替换run: sh ./task.shbash ./task.sh 解决了它。非常感谢。 【参考方案1】:

您可以将run: sh ./task.sh 更改为run: bash ./task.sh 以使用bash 运行您的脚本,而不是sh

如果你的脚本是可执行的(chmod a+x task.sh,并提交文件),并且你有正确的 shebang (#!/bin/bash),你也可以执行run: ./task.sh

您的 cron 计划 (0 0 * * *) 设置为每天运行。如果你想更频繁地运行,你可以改变它。例如0,30 * * * * 将每半小时运行一次(除非您包括时间,否则日期将全天相同,例如date + '%Y-%m%d_%H:%M:%S')。

【讨论】:

以上是关于如何正常在 git 操作的 sh 中随机运行 for 循环?的主要内容,如果未能解决你的问题,请参考以下文章

在 Git Bash 中运行 .sh 脚本

Windows环境下使用Pycharm运行sh文件

如何在Windows下运行linux shell脚本

在 mac OS 上从 crontab 运行 git pull 命令问题

shell脚本获取随机数

如何从 bitbucket-pipelines.yml 执行 git push?