Убедитесь, что сценарий является исполняемым, и запустите сценарий, просто набрав команду, включая ее путь. Например, если сценарий называется foo
и находится в текущем каталоге, запустите
./foo
. Получив сообщение об ошибке, вы делаете что-то вроде sh foo
. Это запускает сценарий под sh
, а не под bash
. sh
на вашем компьютере - это другая оболочка, возможно, dash, которая не поддерживает синтаксис цикла for, который вы использовали. Запустив ./ foo
, ваш сценарий будет выполняться оболочкой, упомянутой в первой строке, то есть bash.
Ваш сценарий выглядит странно в нескольких местах:
«$ 1»
, «$ f»
и т. Д. ] Этот цикл while ["$ *"! = ""]…
- очень окольный способ перебора аргументов скрипта.Простой идиоматический способ -
для x; do
count_lines "$ x"
done
или
для x в "$ @"; сделать
count_lines "$ x"
готово
title = $ (grep -oPm1 "( ? ) [^ ; «$ 0»
- это путь к сценарию, поэтому вы ищите регулярное выражение (? ) [^ в пути к сценарию, который не имеет особого смысла.
Начните изучать контейнерные технологии Linux, такие как LXC, Docker или systemd -nspawn. Все они используют одни и те же средства ядра (пространства имен ), но предоставляют разные уровни абстракции и разные инструменты.