Как запустить скрипт Shell или .sh в macOS

Прочитав эту статью, вы узнаете что такое bash (стандартный командный интерпретатор линукс), научитесь обращаться со стандартными командами: ls, cp, mv… поймете назначение инодов, жестких и символических ссылок и многое другое.

Скрипт тестовой оболочки

Чтобы проверить это, вам понадобится скрипт Shell, который вы хотите запустить. Вы можете использовать тот, который у вас есть, или вы можете использовать пример сценария ниже. Откройте текстовый редактор, например, TextEdit, и вставьте в него следующее. Сохраните файл с расширением #!/bin/bash

Скрипт тестовой оболочки

echo «Stay Home» Запустить скрипт Shell на macOS Откройте Терминал на macOS. Используйте команду cd для перемещения в папку, в которой находится скрипт. Расположение в команде ниже — только пример. Убедитесь, что вы изменили его на папку, в которой находится ваш скрипт.cd ~/DownloadsКак только вы попали в папку, вам нужно дать разрешение на запуск скрипта. Используйте приведенную ниже команду, но замените имя примера фактическим именем сценария, для которого вы хотите дать разрешение на запуск.chmod + x test_

Скрипт тестовой оболочки

После предоставления разрешения на выполнение сценария используйте приведенную ниже команду для его запуска. Не забудьте изменить имя скрипта перед запуском команды.sh test_ Почему shell-скрипты проще запускать в macOS Скрипты оболочки легче запускать в macOS по сравнению с Windows 10, потому что macOS основан на UNIX. Это то, что система имеет общее с системой Linux. Команды оболочки будут выполняться без проблем, и вы также сможете использовать несколько избранных приложений для приложений Linux, хотя их версия MacOS принесет больше пользы, если они будут сценария, который мы дали для тестирования этого процесса, будет просто отображать текст в терминале, но сценарий, который вы хотите запустить, будет делать что-то еще, и для его запуска могут потребоваться другие приложения/утилиты, установленные на вашем Mac. Если вы разбираетесь в написании сценариев оболочки, вы всегда можете изменить имеющийся сценарий и дать ему указание использовать приложения или утилиты, которые уже установлены на вашем Mac.

Читайте также:  Как установить Ubuntu на планшет с Андроид?

Почему возникает ошибка «bash: ./….sh: Отказано в доступе»

Вы могли заметить, что некоторые файлы можно запустить и без указания bash в начале команды. Для этого необходимо соблюдение двух условий:

  • в разрешения файла должно быть разрешение на выполнение
  • в самом файле вверху должен быть шебанг

Проверить, есть ли разрешения на исполнение файла можно командой ls:

ls -l /путь/до/

Должно быть что-то вроде такого (должны быть x):

-rwxr-xr-x 1 root root 415 Apr 26 2018 /root/bin/vpn_

Чтобы установить права на выполнение файла выполните команду вида:

chmod +x /путь/до/

Смотрите также статью «Команда chmod: как поменять права доступа к файлам и директориям».

Ещё одна возможная причина, в начале файла *.sh пропущен шебанг:

#!/bin/sh

Строка шебанга имеет следующий формат:

#!interpreter [optional-arg]

interpreter должен быть абсолютным путём к исполняемому файлу программы (если интерпретатором является скрипт, он тоже должен начинаться с шебанга). Необязательный optional-arg должен иметь формат единственного аргумента (по причинам переносимости он не должен содержать пробелы). Пробел после #! является опциональным.

Связанные статьи:

  • Как использовать echo вместе с sudo (96.5%)
  • sudo: cd: command not found (РЕШЕНО) (96.5%)
  • Решение проблемы с ошибкой fatal error: stdlib.h: Нет такого файла или каталога (53.5%)
  • Решение проблемы с ошибкой make: x86_64-w64-mingw32-gcc: Команда не найдена (53.5%)
  • Решение проблемы с ошибкой fatal error: ffi.h: Нет такого файла или каталога (53.5%)
  • Google Chrome не сохраняет пароли (РЕШЕНО) (RANDOM — 3.5%)

Просмотр текстового файла в Linux полностью

Чтобы вывести содержимое всего текстового файла, в Linux используют команду cat. Она отлично походит для вывода небольших текстовых файлов, к примеру, конфигурационных файлов. Синтаксис прост:

Читайте также:  Ubuntu Studio — обзор и установка мультимедийного дистрибутива

cat [опции] <путь_к_файлу/имя_файла>

Представьте, что надо посмотреть содержимое файла с названием :

Просмотр текстового файла в Linux полностью

cat

Также можно вместо имени прописать адрес (путь) к файлу:

cat /etc/passwd

Если нужно посмотреть несколько файлов сразу, это тоже не вызовет проблем:

Кроме того, при просмотре текстового файла в Linux мы можем отобразить номера строк. Для этого потребуется всего лишь использовать опцию -n:

Просмотр текстового файла в Linux полностью

cat -n

Команда nl функционирует аналогично команде cat с опцией -n, выводя номера строк в столбце слева.

nl

При необходимости вы можете сделать так, чтобы при выводе текстового файла в конце каждой строки отображался символ $:

cat -e test

Просмотр текстового файла в Linux полностью

Вывод будет следующим:

hello everyone, how do you do?$ $ Hey, am fine.$

Кроме cat, для вывода содержимого текстового файла в Linux используется команда tac. Её разница заключается в том, что она выводит содержимое файла в обратном порядке.

Для чего нужен Bash

Основные преимущества

На данный момент разработано множество различных вариаций Bourne-Shell. Но, по сравнению с ними, командный интерпретатор Bash обладает рядом преимуществ.

  • Позволяет работать со структурами «[[» (в sh доступна только «[» с ограничениями).
  • Поддерживает работу с массивами в Линуксе.
  • Доступно множество расширений, выполненных по стандартам C, включая циклы с тремя аргументами «for((i=0;i<=3;i++))», возможность присваивать инкремент «+=» и многое другое.
  • Поддерживает синтаксис «<<<‘here strings’».
  • Работает с расширениями «.{png,jpg}».
  • Доступны алиасы для перенаправления, подобно «Csh», подобно «&|» для «2>&1 |» и «&>» для «> … 2>&1».
  • Поддерживает сопроцессы с перенаправлением «<>».
  • Огромный комплект расширений нестандартных конфигураций, включая изменение регистра.
  • Существенно увеличены возможности арифметики (правда, нет поддержки чисел с плавающей точкой).
  • Переменные «$RANDOM», «$SECONDS», «$PIPESTATUS[@]» и «$FUNCNAME» в Bash являются расширениями.
  • Доступно огромное количества функций, обеспечивающих работу в интерактивном режиме. Хотя на поведение скриптов они не влияют.
Для чего нужен Bash

Примечание. Чем новее интерпретатор, тем больше функций он предоставляет. Узнать версию Bash в Linux можно командой:

$SHELL —version

Примеры применения

  • Вывести указанное количество строчек из лога.
  • Найти и составить выборку ключевых слов, сохранив их в новом файле.
  • Очистить экран терминала.
  • Приостановить работающие задачи и перезапустить ранее приостановленные.
  • Создать архив директории с файлами и отправить его на другой компьютер в одной сети через определенный сетевой протокол.
  • Произвести настройку системы создания резервных копий файлов баз данных, используя дампинг.
  • Послать запрос о конфигурации других компьютеров в сети. Отправить файл с собранной информацией на электронную почту.
  • Найти на диске дублированные файлы, отобразить их список и выполнить запрос их удалить.
  • Рекурсивно заменить владельцев указанных файлов и папок.
Читайте также:  Удалённый рабочий стол Ubuntu: возможные варианты подключения

Управляющие конструкции в скриптах

Создание bash скрипта было бы не настолько полезным без возможности анализировать определенные факторы, и выполнять в ответ на них нужные действия. Это довольно-таки сложная тема, но она очень важна для того, чтобы создать bash скрипт.

В Bash для проверки условий есть команда Синтаксис ее такой:

Управляющие конструкции в скриптах

if команда_условие then команда else команда fi

Эта команда проверяет код завершения команды условия, и если 0 (успех) то выполняет команду или несколько команд после слова then, если код завершения 1 выполняется блок else, fi означает завершение блока команд.

Но поскольку нам чаще всего нас интересует не код возврата команды, а сравнение строк и чисел, то была введена команда [[, которая позволяет выполнять различные сравнения и выдавать код возврата зависящий от результата сравнения. Ее синтаксис:

Управляющие конструкции в скриптах

[[ параметр1 оператор параметр2 ]]

Для сравнения используются уже привычные нам операторы ,=,!= и т д. Если выражение верно, команда вернет 0, если нет — 1. Вы можете немного протестировать ее поведение в терминале. Код возврата последней команды хранится в переменной $?:

Теперь объединением все это и получим скрипт с условным выражением:

Управляющие конструкции в скриптах

!/bin/bash if [[ $1 > 2 ]] then echo $1″ больше 2″ else echo $1″ меньше 2 или 2″ fi

Конечно, у этой конструкции более мощные возможности, но это слишком сложно чтобы рассматривать их в этой статье. Возможно, я напишу об этом потом. А пока перейдем к циклам.