我尝试执行类似这样的
#!/bin/bash
${postid=41930}
while ${postid} < 42000;
do
`node title.js ${postid}`
${postid} = ${postid} +1;
done
我有这个错误:
: command not found30
run.sh: line 8: syntax error: unexpected end of file
$ echo $SHELL
/bin/bash
$
来自man sh
while *list*;do *list*;done
sh version 3.2
答案 0 :(得分:2)
另一种快速方法,仅使用bash功能:
#!/bin/env bash
for postid in {41930..41999} ; do node title.js ${postid} ; done
参考文献:http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion
答案 1 :(得分:2)
您的脚本中有几个地方需要修复:
正如chepner所说,您无法为${postid}
等评估结果指定值,而是直接在作业的左侧使用postid
您的脚本中应该有一些不可见的字符。尝试运行dos2unix myscript.sh
或尝试将以下代码输入新文件
https://gist.github.com/1651190
答案 2 :(得分:1)
可能,你想要
for((postid=41930;postid<42000;++postid)) do
node title.js $postid
done
答案 3 :(得分:1)
其他答案可能就是你想要使用的。仅供参考,这是您的错误所在。
${postid=41930}
要将41930分配给posted
,只需使用postid=41930
即可。请注意,等号周围没有空格!
while ${postid} < 42000;
postid
周围的{}是可选的; $postid
也可以。你需要在命令中包含条件扩展,因为while循环不能使用裸表达式。像while [ $postid < 42000 ];
这样的东西。请注意,在这种情况下,您必须有空格将[
和]
与表达式的其余部分分开。
do
`node title.js ${postid}`
${postid} = ${postid} +1;
为了给变量赋值,bash不允许等号周围的空格。对于空格,它通过扩展$postid
并将其视为要运行的命令来解释此行,并将=
作为第一个参数。使用postid=$postid + 1;
。在左侧,不需要美元符号,因为您没有扩展变量的值,而是指定名称。在右侧,您需要美元符号才能获得posted
的值。
done