Функции в bash
вызываются точно так же, как команды, а не как функции в других языках. Вместо isInstalled ('node', 'nodejs')
выполните:
isInstalled 'node' 'nodejs'
И условие if
будет выглядеть так:
if ! isInstalled 'node' 'nodejs';
then
...
Вывод wc -l sedtest1
будет примерно таким::
21 sedtest1
Таким образом, тест станет чем-то вроде a <= 21 sedtest1
, что является недействительным.
Кроме того, это означает, что команда wc
будет выполняться для каждой итерации цикла. Если содержимое файла sedtest1
не меняется между каждой итерацией, было бы лучше сначала сохранить это количество строк в переменной вне цикла:
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
Я также подозреваю, что вы пытаетесь использовать цикл для обработки текста неэффективным и не -способом оболочки. Вы можете прочитать Почему использование цикла оболочки для обработки текста считается плохой практикой? . Перебирать каждую строку файла таким образом — неправильный путь.
Неважно, я просто был невероятно глуп... wc -l file
выводит как "x файл".
Все, что мне нужно было сделать, это :for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done