Переменные, связанные с параметрами Когда мы запускаем сценарий, несколько переменных автоматически создаются. Вот некоторые из них:
$0 — содержит имя скрипта.
$1 –$9 — содержат параметры, переданные скрипту: $1 — первый аргумент, $2 — второй и так далее.
$# — содержит количество параметров, переданных скрипту.
$* — содержит все параметры, переданные скрипту.
Существуют и другие переменные, но для начала этих должно быть достаточно.
Разберемся на примере:
1. user@bash: cat morevariables.sh 2. #!/bin/bash
3. # Демонстрация использования переменных
4. # karpaff 22/1/2022
5.
6. echo Меня зовут $0 и мне передали $# параметра(ов)
7. echo Вот они: $*
8. echo А второй параметр вот такой: $2
9. user@bash: 10. user@bash: ./morevariables.sh bob fred sally 11. Меня зовут morevariables.sh и мне передали 3 параметра(ов)
12. Вот они: bob fred sally
13. А второй параметр вот такой: fred
14. user@bash: Переменная, содержащая вывод команды Вывод команды тоже мождно сохранить в переменную — для этого используется ` (обратный апостроф).
Примечание. Обратите внимание, что это именно обратный апостроф, а не одинарная кавычка. Обычно обратный апостроф находится на клавиатуре на букве ё — слева от клавиши 1.
Разберемся на примере:
1. user@bash: cat backticks.sh 2. #!/bin/bash
3. # Используем обратный апостроф
4. # karpaff 22/1/2022
5.
6. lines=`cat $1 | wc -l`
7. echo Количество строчек в файле $1 равно $lines
8. user@bash: 9. user@bash: ./backticks.sh testfile.txt 10. Количество строчек в файле testfile.txt равно 12
11. user@bash Создаем резервные копии с помощью скрипта Теперь давайте используем всё, что мы изучили, в сценарий, который действительно делает что-то полезное. Допустим, вы храните все свои проекты в отдельных каталогах в директории под названием Projects, которая лежит в домашнем каталоге. Вам нужно регулярно делать резервные копии этих проектов и хранить их в датированных папках в каталоге под названием Projectbackups — она тоже в домашнем каталоге.
1. user@bash: cat projectbackup.sh 2. #!/bin/bash
3. # Создает резервную копию проекта
4. # karpaff 22/1/2022
5.
6. date=`date +%F`
7. mkdir ~/projectbackups/$1_$date
8. cp -R ~/projects/$1 ~/projectbackups/$1_$date
9. echo Резервное копирование папки $1 завершено
10. user@bash:
11. user@bash: ./projectbackup.sh ocelot 12. Резервное копирование папки ocelot завершено
13. user@bash: Вы можете заметите, что в приведенном выше скрипте мы использовали относительные пути. Это делает сценарий более универсальным. Если кто-то из ваших коллег захочет использовать его, можно будет просто дать ему копию скрипта, и он будет работать так же хорошо без изменений.
Вы всегда должны думать о том, как сделать скрипты гибкими и универсальными, чтобы их легко могли использовать другие пользователи или чтобы их можно было адаптированы к аналогичным ситуациям. Чем более «многоразовый» у вас скрипт — тем лучше.