bash запустить скрипт с параметром

Основы BASH. Часть 1

Введение

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

Что необходимо знать с самого начала

1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

Результат выполнения скрипта:

После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:

Условия

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
#!/bin/bash
source=$1 #в переменную source засовываем первый параметр скрипта
dest=$2 #в переменную dest засовываем второй параметр скрипта

Условия. Множественный выбор

esac #окончание оператора case.

Результат работы:
ite@ite-desktop:

UPD: Исправил некоторые ошибки
UPD: Обновил часть про условия if-then-else

Источник

Запуск скрипта sh в Linux

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

Как работают скрипты

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

Запуск скрипта sh в Linux

Сначала рассмотрим пример небольшого sh скрипта:

#!/bin/bash
echo «Hello world»

bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 28 42. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 28 42. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 28 42. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

chmod ugo+x script.sh

bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 29 45. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 29 45. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 29 45. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 30 07. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 30 07. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 30 07. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 30 13. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 30 13. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 30 13. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Или полный путь от корня:

bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 30 28. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 30 28. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 30 28. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

cp script.sh /usr/local/bin/script.sh

Теперь вы можете выполнить:

bash запустить скрипт с параметром. otussysadmin. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-otussysadmin. картинка bash запустить скрипт с параметром. картинка otussysadmin. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 31 15. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 31 15. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 31 15. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

bash запустить скрипт с параметром. Snimok ekrana ot 2017 09 08 21 31 25. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-Snimok ekrana ot 2017 09 08 21 31 25. картинка bash запустить скрипт с параметром. картинка Snimok ekrana ot 2017 09 08 21 31 25. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:

Даже запустить процесс linux не так сложно.

Выводы

Источник

Аргументы командной строки Bash

Функциональность интерпретатора Bash позволяет работать не только со статистическими данными, записанными в скриптах. Иногда возникает необходимость добавить сценарию интерактивности, позволяя принимать внешние параметры скрипта для манипуляции ими в коде.

В этой статье будет рассмотрено, как принимать аргументы командной строки bash, способы его обработки, проверка опций, а также известные особенности при работе с ними.

Параметры скрипта Bash

Интерпретатор Bash присваивает специальным переменным все параметры, введённые в командной строке. В их состав включено название сценария, выполняемого интерпретатором. Такие переменные называются ещё числовыми переменными, так как в их названии содержится число:

Ниже приведён пример использования одного параметра скрипта Bash:

#!/bin/bash
factorial=1
for (( number = 1; number

Результат работы кода:

bash запустить скрипт с параметром. test1. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test1. картинка bash запустить скрипт с параметром. картинка test1. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Переменная $1 может использоваться в коде точно так же, как и любая другая. Скрипт автоматически присваивает ей значение из параметра командой строки — пользователю не нужно делать это вручную.

Если необходимо ввести дополнительные параметры, их следует разделить в командной строке пробелами.

Пример работы кода:

bash запустить скрипт с параметром. test2. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test2. картинка bash запустить скрипт с параметром. картинка test2. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Командный интерпретатор присвоил числа 5 и 10 соответствующим переменным — $1 и $2.

Также параметрами могут быть и текстовые строки. Однако, если есть необходимость передать параметр, содержащий пробел (например имя и фамилию), его нужно заключить в одинарные или двойные кавычки, так как по умолчанию пробел служит разделителем параметров командной строки:

Пример работы кода:

bash запустить скрипт с параметром. test3. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test3. картинка bash запустить скрипт с параметром. картинка test3. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

На заметку: кавычки, которые используются при передаче параметров, обозначают начало и конец данных и не являются их частью.

Если необходимо использовать больше 9 параметров для скрипта, то названия переменных немного изменятся. Начиная с десятой переменной, число, стоящее после знака $, необходимо заключать в квадратные скобки (без внутренних пробелов):

Пример работы кода:

bash запустить скрипт с параметром. test4. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test4. картинка bash запустить скрипт с параметром. картинка test4. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Получение названия скрипта Bash

Как уже упоминалось, имя сценария является самым первым параметром скрипта. Чтобы определить название программы, используется переменная $0. Такая необходимость возникает, например, при написании скрипта, который может выполнять несколько функций. Однако при этом возникает одна особенность, которую нужно учитывать на практике:

Пример работы кода:

bash запустить скрипт с параметром. test5. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test5. картинка bash запустить скрипт с параметром. картинка test5. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Как видно, если строкой, фактически переданной в переменную $0, является весь путь к сценарию, то на вывод будет идти весь путь, а не только название программы.

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

Для этого специально предусмотрена небольшая команда. Команда basename возвращает только название скрипта без абсолютного или относительного пути к нему:

Результат работы кода:

bash запустить скрипт с параметром. test5b 1. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test5b 1. картинка bash запустить скрипт с параметром. картинка test5b 1. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Проверка параметров скрипта

Передача параметров Bash вынуждает соблюдать осторожность. Если сценарий написан с применением параметров, но запускается без них, то возникнут проблемы в работе программы.

Если попробовать запустить написанный ранее скрипт test2 без аргументов, то перед выводом команд echo будет отображена ошибка:

bash запустить скрипт с параметром. test2 error. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test2 error. картинка bash запустить скрипт с параметром. картинка test2 error. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Чтобы предотвращать подобные ситуации, необходимо действовать на упреждение — проверять аргументы скрипта на наличие значений. Это настоятельная рекомендация при использовании параметров в командной строке, и только после ревизии стоит пускать их в дело:

Пример работы кода:

bash запустить скрипт с параметром. test7. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test7. картинка bash запустить скрипт с параметром. картинка test7. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

В данном случае использовалась опция -n из предыдущей статьи о сравнении строк в Bash для проверки на наличие значения в переменной, которая считала параметр.

Обработка неизветсного числа параметров

Для начала рассмотрим один из часто используемых инструментов при работе с параметрами Bash — команду shift. Её прямое назначение заключается в сдвиге параметров на одну позицию влево. Таким образом, значение из переменной $3 переместится в $2, а из $2 — в $1. Но из $1 значение просто отбросится и не сместится в $0, так как там неизменно хранится название запущенной программы.

Эта команда является эффективным способом обработки всех параметров, переданных сценарию, особенно, когда нельзя заранее узнать их количество. Достаточно лишь обработать $1, сделать сдвиг и повторить процедуру.

Пример работы кода:

bash запустить скрипт с параметром. test13. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test13. картинка bash запустить скрипт с параметром. картинка test13. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Этот скрипт выполняет цикл while, в условии которого указана проверка первого параметра на длину. И если она равна нулю, цикл прерывает свою работу. При положительном результате проверки команда shift сдвигает все параметры влево на одну позицию.

Ещё один вариант использование shift — смещать на несколько позиций. Для этого достаточно через пробел указать количество, на которое будет смещён ряд параметров скрипта.

Пример работы скрипта:

bash запустить скрипт с параметром. test14. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test14. картинка bash запустить скрипт с параметром. картинка test14. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

На заметку: при использовании shift нужно быть осторожным, ведь сдвинутые за пределы $1 параметры не восстанавливаются в период работы программы.

Обработка опций в Bash

Помимо параметров скрипт может принимать опции — значения, состоящие из одной буквы, перед которыми пишется дефис. Рассмотрим 3 метода работы с ними в скриптах. Сперва кажется, что при работе с опциями не должно возникать каких-либо сложностей. Они должны быть заданы после имени запускаемой программы, как и параметры. При необходимости можно сделать обработку опций командной строки по такому же принципу, как это делается с параметрами.

По примеру выше можно применять shift для обработки простых опций. С помощью инструкции case можно определять, являются ли аргументы Bash опциями:

Пример работы программы:

bash запустить скрипт с параметром. test15. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-test15. картинка bash запустить скрипт с параметром. картинка test15. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Блок case работает правильно вне зависимости от того, как расположены аргументы командной строки bash.

Выводы

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

Команда basename используется для обрезания пути запущенного сценария, что часто необходимо для создания гибких программ. Использование команды shift позволяет эффективно проходить по переданным скрипту параметрам, особенно когда их количество неизвестно.

Источник

Основы Bash-скриптинга для непрограммистов. Часть 2

В первой части статьи мы рассмотрели командные оболочки, профили, синонимы и первые команды. Под спойлером я также рассказал, как развернуть тестовую виртуальную машину.

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

Скрипты

Для выполнения нескольких команд одним вызовом удобно использовать скрипты. Скрипт – это текстовый файл, содержащий команды для shell. Это могут быть как внутренние команды shell, так и вызовы внешних исполняемых файлов.

Перейдем в домашнюю директорию командой cd

и создадим в ней с помощью редактора nano ( nano script.sh )файл, содержащий 2 строки:

Чтобы выйти из редактора nano после набора текста скрипта, нужно нажать Ctrl+X, далее на вопрос «Save modified buffer?» нажать Y, далее на запрос «File Name to Write:» нажать Enter. При желании можно использовать любой другой текстовый редактор.

Проверим права доступа к файлу:

Из вывода команды ls видно, что отсутствуют права на выполнение. Рассмотрим подробнее на картинке:

bash запустить скрипт с параметром. image loader. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-image loader. картинка bash запустить скрипт с параметром. картинка image loader. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Права доступа задаются тремя наборами: для пользователя, которому принадлежит файл; для группы, в которую входит пользователь; и для всех остальных. Здесь r, w и x означают соответственно доступ на чтение, запись и выполнение.

/.profile), либо для всех пользователей в общесистемный профиль (файл /etc/profile).

Чтобы выдать права на чтение и выполнение пользователю и группе:

Чтобы запретить доступ на запись (изменение содержимого) файла всем:

Также для указания прав можно использовать маску. Например, чтобы разрешить права на чтение, запись, выполнение пользователю, чтение и выполнение группе, и чтение – для остальных, нужно выполнить:

Указывая 3 цифры, мы задаем соответствующие маски для каждой из трех групп. Переведя цифру в двоичную систему, можно понять, каким правам она соответствует. Иллюстрация для нашего примера:

bash запустить скрипт с параметром. image loader. bash запустить скрипт с параметром фото. bash запустить скрипт с параметром-image loader. картинка bash запустить скрипт с параметром. картинка image loader. break выход из цикла for, while или until continue выполнение следующей итерации цикла for, while или until echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода exit выход из оболочки export отмечает аргументы как переменные для передачи в дочерние процессы в среде hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении kill посылает сигнал завершения процессу pwd выводит текущий рабочий каталог read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\ return заставляет функцию оболочки выйти с указанным значением shift перемещает позиционные параметры налево test вычисляет условное выражение times выводит имя пользователя и системное время, использованное оболочкой и ее потомками trap указывает команды, которые должны выполняться при получении оболочкой сигнала unset вызывает уничтожение переменных оболочки wait ждет выхода из дочернего процесса и сообщает выходное состояние.

Символ – перед наборами прав доступа указывает на тип файла ( – означает обычный файл, d – директория, l – ссылка, c – символьное устройство, b – блочное устройство, и т. д.). Соответствие числа, его двоичного представления и прав доступ можно представить в виде таблицы:

Источник

Разбираемся с аргументами в Bash-скриптах

Перевод статьи «Handling Arguments in Bash Scripts».

Создание Bash-скриптов для автоматизации набора команд — первый шаг на пути к созданию инструментов, облегчающих вашу жизнь. Даже простые скрипты, читающиеся сверху вниз и запускающиеся по установленному графику, способны сэкономить вам массу времени. Но рано или поздно наступит момент, когда вы захотите настраивать поведение вашего скрипта на лету: создавать директории с нужными вам именами, загружать файлы из определенных git-репозиториев, указывать IP-адреса или порты и т. п. Вот здесь вам и пригодятся аргументы скриптов.

Позиционные и специальные параметры

Bash предоставляет нам переменные, которые присутствуют в любом написанном нами скрипте. Вот несколько самых полезных:

Позиционные параметры содержат значения, которые вы указываете при запуске своего скрипта (в командной строке) в качестве аргументов. Рассмотрим пример. Допустим, у вас есть скрипт, запускающийся следующим образом:

Я использую позиционные параметры в одном из своих простейших скриптов. Этот скрипт я запускаю на работе практически ежедневно (здесь показываю упрощенный вариант):

и все равно все бы прекрасно работало.

Тем не менее, я предпочитаю сохранять позиционные параметры в именованные переменные вверху своего скрипта. Таким образом любой читатель моего скрипта сможет быстро понять, что к чему. Разумеется, это не заменяет хорошую документацию и надежную обработку ошибок, но это приятный маленький бонус в плане читаемости. Подобные вещи хоть немножко, но помогают, так что это хорошая практика.

Когда я запускаю скрипт вот так:

он генерирует структуру директорий:

$0: имя скрипта

Вот что получится при запуске:

$#: число аргументов

$?: последний код возврата

Вот пример использования в скрипте:

Кажется, именно эти переменные вызывают больше всего сложностей у новичков в Bash — и это понятно! Они работают практически одинаково, но разница в их действии может быть очень существенной в каждой отдельной ситуации.

Если вы НЕ берете эти переменные в кавычки, они делают одно и то же: вставляют в указанное место все переданные в скрипт аргументы.

При запуске получим следующее:

Переходим к самому интересному: возьмем переменные в кавычки.

Видите? Один аргумент! Хотите самостоятельно реализовать echo?

Итоги

Надеюсь, теперь вы начинаете понимать силу кастомизации. Используя скрипты Bash, вы можете автоматизировать выполнение многих задач. А благодаря возможности передачи аргументов при вызове скрипта вы можете автоматически выполнять даже те задачи, логика которых зависит от ситуации!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *