bash - 循环在 git 操作中无法正常工作
问题描述
循环在 git 操作中无法正常工作。
我的 task.sh 看起来像这样:
#!/bin/bash
range=100
number=$((RANDOM % range))
while [ "$i" -le "$number" ]; do
echo "DATE: $1" >> date.txt
done
上面代码的结果是:
./task.sh: 6: [: Illegal number:
下面的代码工作正常。
echo "DATE: $1" >> date.txt
我尝试了以下方法,但它也给出了错误。
#!/bin/bash
range=500
number=$((RANDOM % range))
for ((run=1; run <= number; run++)); do
echo 'hello'
done
我很好奇您如何使下面的命令正常工作。
while (random(1-100)); do
echo 'hello'
done
最好的祝福!
解决方案
它应该可以正常工作:
while [[ "$i" -le "$number" ]]; do
^^ ^^
这需要 bash,但由于您的shebang是#!/bin/bash
,因此您的t.sh
脚本将使用 bash 运行,无论其 ' .sh
' 扩展名如何。
但以目前的形式,这将是一个无限循环。
您需要添加
i=$((i+1))
这将增加$i
变量,使"$i" -le "$number"
工作正常。
初始化i
为 0 更好/更干净,但是[[ "" -le "$number" ]]
(在第一个循环中,仍然“有效”(因为空字符串被认为“低于或等于”非空“ $number
”字符串,并保留在循环中)
话虽如此,该脚本更正确的形式/用法是(使用算术比较):
#!/bin/bash
range=100
number=$((RANDOM % range))
i=0
while (( i <= number )); do
echo "DATE: ${i}" >> date.txt
i=$((i+1))
done
或者,使用 c 风格的循环
#!/bin/bash
range=100
number=$((RANDOM % range))
for ((i = 0 ; i < number ; i++)); do
echo "DATE: ${i}" >> date.txt
done
所有这一切都是假设bash
的,但正如这里所见,由于for (( ... ))
语法不是 POSIX,它不适用于 Alpine Linux 或其他sh
链接到ash (Almquist shell) 或 Dash的操作系统。
在后一种情况下:
#!/bin/bash
range=100
number=$((RANDOM % range))
for i in $(seq 0 $number); do
echo "DATE: ${i}" >> date.txt
done
推荐阅读
- python - 在 SQL 的“INSERT”命令中使用“WHERE”将数据输入特定字段?(Python)
- r - 不使用ggplot计算probability_trans(distribution="norm")
- svn - svn 库 FileNotFoundError: [WinError 2]
- c# - c#尝试使用WebClient下载文件名中包含特殊字符的文件
- ajax - 如何在我的 React 应用程序中强制获取结果处理的顺序?
- gcc - 如何抑制 GCC 编译器警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z
- php - 从mysql获取数据到textarea
- c - 为什么并行问题的执行时间对于奇数个线程更好?
- python - 如何在不使用 urllib 的情况下从 Selenium 下载源文件
- django - 在谷歌云虚拟机上进行反应部署的 Django