Проблемы при запуске первого shellscript

#linux #bash #shell #scripting

#linux #bash #оболочка #сценарии

Вопрос:

Я пытаюсь создать свой первый сценарий оболочки в bash. Я создал код, и мне удалось сохранить скрипт в моем домашнем каталоге, но он не запускается. Сначала я пытаюсь запустить его из домашнего каталога с помощью: ./testscript.sh с «отказано в разрешении» в качестве ответа, затем я попробовал sudo ./testscript.sh , а затем «команда не найдена«.

Это мой скрипт:

 #!/bin/bash  

mkdir -p/home/filer
touch /home/filer/fil1
touch /home/filer/fil2
touch /home/filer/fil3
tar-zcvf file.tar.gz /home/filer
  

Итак, я попытался создать скрипт, который создаст каталог с именем «filer» в моем домашнем каталоге, используя touch для создания 3 отдельных файлов в каталоге «filer», а затем создаст tar.archive из всего каталога «filer». Я думаю, что сценарий правильный, я мог бы просто использовать руку, запускающую скрипт.

Комментарии:

1. Вы не забыли дать ему разрешения на выполнение?

2. @ChristianGibbons Я не уверен, я думал, что » #! » сделал это исполняемым?

3. #!<interpreter_path> просто помогает оболочке найти интерпретатор, который должен выполнить скрипт. Сначала скрипт должен иметь права доступа к исполняемому файлу.

4. Нет, это просто говорит ему, с чем его запускать, когда вы пытаетесь выполнить. Требуется разрешение на выполнение в файловой системе, которое вы можете добавить с помощью chmod команды.

5. В противном случае вы всегда можете попробовать вызвать интерпретатор напрямую: bash testscript.sh

Ответ №1:

За исключением пары опечаток ( mkdir -p/path -> mkdir -p /path , tar-zcvf … -> tar -zcvf …), вы должны ссылаться на свой домашний каталог, используя $HOME переменную среды. /home/filer это абсолютный путь к каталогу, который, как я предполагаю, не является вашим фактическим домашним каталогом.

 #!/bin/bash

mkdir -p $HOME/filer
touch $HOME/filer/fil1
touch $HOME/filer/fil2
touch $HOME/filer/fil3
tar -zcvf file.tar.gz $HOME/filer
  

Вы можете выполнить скрипт, ./testscript.sh как bash testscript.sh или ./testscript.sh .

Во втором случае скрипт должен иметь соответствующие права доступа к исполняемому файлу. chmod x ./testscript.sh предоставляет ему полные права на исполняемый файл.

Комментарии:

1. Я изменил это, я все еще получаю » Команда не найдена «, когда пытаюсь запустить ее с помощью. /testscript.sh

2. интервал между -p и -zcvf — это просто опечатка в стеке, она верна в моем сценарии. Спасибо, что предупредили. Как я понял, для запуска этого скрипта все, что нужно, это ввести: » ./ «, поскольку я нахожусь в том же каталоге, что и testscript.sh файл. Однако, как только я пытаюсь запустить его, команда не найдена — это единственный ответ, который я получаю.

3. Запустите bash -xe ./testscript.sh и сообщите нам точный результат