无法运行简单的bash脚本

时间:2012-01-20 23:44:41

标签: bash

我尝试执行类似这样的

#!/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

4 个答案:

答案 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)

您的脚本中有几个地方需要修复:

  1. 正如chepner所说,您无法为${postid}等评估结果指定值,而是直接在作业的左侧使用postid

  2. 您的脚本中应该有一些不可见的字符。尝试运行dos2unix myscript.sh或尝试将以下代码输入新文件

  3. 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
相关问题