У вас может быть непечатный символ.Вы, вероятно, сохранили этот файл в Windows с окончаниями строк "\ r \ n" вместо обычных окончаний UNIX "\ n".Используйте dos2unix, чтобы исправить это.Кроме того, только некоторые вещи ....
Вы, кажется, не заключаете в кавычки "$ file" или любую из этих других переменных ... так что ваш скрипт может работать, если в какой-либо из них нет пробеловимена файлов, но вы можете поспорить, что он сломается, если есть пробелы.Всякий раз, когда вы используете переменную, очень важно убедиться, что она остается правильно заключенной в кавычки.
В отличие от C ++ и Java, точка с запятой в сценариях оболочки используется для разделения, а не завершения операторов.Вы не должны ставить точки с запятой в конце утверждений;Вы должны использовать только точки с запятой, если вы хотите использовать более одного оператора в строке.
Есть несколько разных переводчиков.Если вы используете /bin/sh
, вам гарантированы только те минимальные функции, которые требуются POSIX.Если вы планируете использовать специфичные для BASH функции, используйте /bin/bash
.Как правило, я использую #! /bin/bash
, если только мне абсолютно не нужно нацеливаться на /bin/sh
, и в этом случае я также делаю очень тщательный анализ своего кода, чтобы убедиться, что я не использую какие-либо функции, кроме /bin/sh
.
Я исправил часть вашего сценария оболочки следующим образом:
#! /bin/bash
for file in *.wav; do
filebasename=`basename "$file" .wav`
filemp3="$filebasename.mp3"
nice lame -b 16 -m m -q 9 --resample 8 "$file" "$filemp3"
#....
done
Я не совсем уверен, что вы пытались делать с остальным.