2012-01-20 3 views
1

Стараюсь выполнил некоторые как этотНе удается запустить простой Баш скрипт

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

От человека ш

while *list*;do *list*;done 

sh version 3.2 

ответ

2

Есть несколько мест в вашем сценарии должен быть исправлен:

  1. Как chepner сказал, что вы не можете присвоить значение оцениваемого результата, как ${postid}, вместо этого использовать postid непосредственно в левой руке сторона вашего задания

  2. В вашем скрипте должны быть невидимые символы. Попробуйте запустить dos2unix myscript.sh или попробовать свои силы набрав следующий код в новый файл

https://gist.github.com/1651190

  • жаль, что я не могу форматировать код правильно, поэтому, пожалуйста, проверьте суть в https://gist.github.com/1651190
+1

Большое спасибо за ваши решения. Я должен использовать vi: set ff = unix. И знаю, что все сработало !!! –

1

Возможно, вы хотите

for((postid=41930;postid<42000;++postid)) do 
node title.js $postid 
done 
+0

#!/ Бен/Баш для ((= 41930 сообщения дан; <41940 сообщений дан; ++)) сообщения дан сделать узел title.js $ сделал сообщений дана $ ш run.sh «un.sh: ошибка синтаксиса вблизи: строка 2 неожиданный токен 'do 'un.sh: строка 2:' for ((postid = 41930; postid <41940; ++ postid)) do –

+0

@ v.tsurka, вопрос помечен 'bash', а не' sh'. –

2

Другим быстрым способом, используя только функцию Баша:

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

+0

bc-c8-d8-eb-65: googlecache macbookpro $ sh run.sh run.sh: строка 3: ошибка синтаксиса: неожиданный конец файла –

+1

За исключением случаев, когда в вашем файле есть скрытые символы, я не знаю, что неправильно. Вы вручную вводили код? – Karolos

+0

i установлен в vi fs = unix и все работает) –

1

Других ответов являются, вероятно, что вы хотите использовать. FYI, вот откуда взялись ваши ошибки.

${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 
Смежные вопросы