Основные команды bash

Как выполнить команду в командной строке

Работа в командной строке выполняется очень просто: пользователь вводит текстовую команду, а затем нажимает на клавишу «Enter» (ввод). Если необходимо ввести несколько последовательных команд, повторите данную операцию несколько раз.

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

При запуске командной строки от имени администратора, путь выглядит следующим образом: «C:\Windows\system32».

Команды командной строки Windows необходимо вводить в окне интерпретатора сразу после знака «>», в этом месте мигает курсор.

Для копирования команды с компьютера, а затем вставки команды в командную строку, используется контекстное меню правой кнопки мыши. Скопируйте команду в буфер обмена, вставьте курсор мыши в окно командной строки, нажмите на правую кнопку мыши. В Windows 10 поддерживается копирование и вставка при помощи стандартных клавиш клавиатуры: «Ctrl» + «C» и «Ctrl» + «V».

Некоторые системные приложения запускаются непосредственно после ввода команды, которая состоит из названия приложения, например, если вести команду «calc», то на компьютере запуститься системная программа Калькулятор.

Вам также может быть интересно:

  • Команды «Выполнить» в Windows: полный список
  • Восстановление Windows через командную строку

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

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

После запуска команды из командной строки, реализация выполнения команды не всегда внешне заметна, из-за того, что происходят внутренние изменения в операционной системе.

К основной команде часто добавляются другие параметры, ключи для выполнения конкретных действий.

При вводе неправильной команды, например, введенной с ошибками, или если операционная система Windows не может по какой-либо причине выполнить команду, об этом появится сообщение в окне интерфейса командной строки.

Examples

let "myvar = 5"; echo $myvar

Set the variable myvar to the value 5, then echo the value of myvar to the terminal. Output:

5
let "varone = 1" "vartwo = varone++"; echo $varone, $vartwo

Set varone to 1, set vartwo to the value of varone, then increment the value of varone by one. Output:

2, 1
let "varone = 1" "vartwo = ++varone"; echo $varone, $vartwo

Set varone to 1, increment the value of varone by one, then set the value of vartwo to the value of varone. Output:

2, 2
let "myvar = 48 % 5"; echo $myvar

Set myvar to the remainder of 48 divided by 5 (which is 3). Output:

3
let "myvar = 16 << 2"; echo $myvar

Set myvar to the number 16, bitshifted left twice (which gives the same result as multiplying it by 2, twice). Output:

64
let "myvar = 16 >> 2"; echo $myvar

Set myvar to the number 16, bitshifted right twice (which gives the same result as dividing it by 2, twice). Output:

4
let "myvar = 5, myvar *= 2"; echo $myvar

Set myvar to 5, then set myvar to its own value multiplied by 2. Notice that in this example, sequential statements are separated by a comma. Output:

10
bar=5 let "foo = bar"; echo $foo, $bar

Set bar to 5, then set the value of bar to the value of foo. When bash processes the next command («echo $foo, $bar«) it knows about foo because its value was set in the expression, but it doesn’t know about bar because bar’s value was local to the previous command. Output:

5,
bar=5 let "foo = bar, bar++"; echo $foo, $bar

Similar to the above command, but this time, let changes the value of bar by incrementing it, so bar‘s scope becomes the current shell, and the echo command is aware of its value. Output:

5, 6

Поиск и использование регулярных выражений

Для поиска файлов в bash используется команда find. Ее синтаксис следующий: find + нужная директория (путь) + ключ (или несколько) + критерии ключа + (опционально) последующее действие над найденными файлами.

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

find --h

К примеру, следующая команда позволит вам найти все файлы, которые находятся в директории dir1, и имеют название file:

find /home/users/dir1 -name ‘file*’

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

* — обозначает любое количество символов, включая их отсутствие (например, по запросу file* будут найдены все файлы: file, file1, file829, fileabc и т.д.);

? — обозначает один символ (по запросу file? будут найдены файлы с одним символом после слова file: file1, file9, filea и т.д.; по запросу file?? будут найдены файлы с двумя символами: file12, file34, file92 и т.д.);

[] — обозначает подмножество значений, которые может принимать один символ (по запросу file будут найдены файлы: file1, file2, file3 и так далее до file9; по запросу file файлы filea, fileb, filec и filed).

Написание функций Bash

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

Синтаксис создания функции очень прост:

имя_функции() { список_команд }

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

Простая функция

Давайте напишем небольшую функцию, которая будет выводить строку на экран:

$ vi function.sh

#!/bin/bash
printstr(){
echo «hello world»
}
printstr

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

Все работает, теперь усложним задачу, попробуем передать функции аргументы.

Аргументы функции

Аргументы функции нужно передавать при вызове, а читаются они точно так же, как и аргументы скрипта. Синтаксис вызова функции с параметрами bash такой:

имя_функции аргумент1 аргумент2 … аргументN

Как видите, все достаточно просто. Параметры разделяются пробелом. Теперь улучшим нашу функцию, чтобы она выводила заданную нами строку:

Можно сделать, чтобы параметров было несколько:

Есть и другой способ извлекать аргументы, как в Си, с помощью стека. Мы извлекаем первый аргумент, затем сдвигаем указатель стека аргументов на единицу и снова извлекаем первый аргумент. И так далее:

Возврат результата функции

Вы можете не только использовать функции с параметрами bash, но и получить от нее результат работы. Для этого используется команда return. Она завершает функцию и возвращает числовое значение кода возврата. Он может быть от 0 до 255:

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

Экспорт функций

Вы можете сделать функцию доступной вне скрипта с помощью команды declare:

Затем запустите скрипт с помощью команды source:

Рекурсия

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

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

Локальные переменные в функции

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

Библиотеки функций

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

test1(){
echo «Hello World from 1»;
}
test2(){
echo «Hello World from 2»;
}
test3(){
echo «Hello World from 3»;
}

Теперь создадим скрипт, который будет использовать наши функции. Импортировать библиотеку можно с помощью команды source или просто указав имя скрипта:

Полезные Bash скрипты Linux

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

Команды

Первый скрипт сортирует содержимое текущей папки по размеру:

Но в большинстве случаев это не эффективно, вам намного удобнее будет использовать утилиту ncdu. Вам нужно быстро создать пароль и вы не хотите устанавливать pwgen, можете использовать такую команду:

Эта команда запускает простейший HTTP сервер в текущей папке. Очень удобно для отладки чего либо:

С помощью команды at можно запланировать выполнение произвольной команды один раз в указанное время, например, в полночь:

Скрипт передает звук от вашего микрофона на другой компьютер по ssh. Качество будет очень плохим, но тем не менее это работает:

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

Будут загружены все файлы сайта, включая изображения, игнорированы правила из файла robots.txt и в качестве агента пользователя будет сообщаться Mozilla Firefox. А такой командой можно реализовать самый простой таймер:

Выводит команды bash, которые используются чаще всего:

Такой командой вы можете выводить символы с небольшой задержкой, как в фильмах:

Записать видео с экрана в терминале linux:

Запустит команду через указанный промежуток времени, в данном случае, через 5 секунд:

Удаляет все пустые папки:

Это были самые популярные и полезные команды с точки зрения ресурса commandlinefu.com. А теперь нам нужно рассмотреть сниппеты bash, которые вы можете использовать в своих проектах.

Сниппеты Bash

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

А там, где нужно прекратить:

Переменная DIFF будет содержать время выполнения в минутах. Теперь вы можете вывести ее с помощью echo.

Скрипты довольно часто требуют ввода параметров для правильной работы. Этот сниппет позволяет достаточно просто разбирать переданные параметры:

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

Переменной SERVER будет присвоено значение losst, DATA — 20170916 и PARAMETER — Subscribe. Как это работает? Если кратко, то мы всегда используем первый параметр, и используем команду shift, чтобы сдвинуть стек с параметрами влево, когда текущий первый параметр больше не нужен.

Дальше, если вам нужно убедиться, что важные параметры заданы, можно просто проверить на существование эти переменные:

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

Также нужно проверить есть ли у текущего пользователя права на запись в текущую папку. Создайте такую функцию:

# Проверяем существует ли папка
|| {
echo Dir: $DIR_NAME does not exist
exit 1
}

# Проверяем доступ на чтение
|| {
echo Dir: $DIR_NAME not readable
exit 2
}
# Проверяем доступ на выполнение
|| {
echo Dir: cannot cd to $DIR_NAME
exit 3
}
# Проверяем доступ на запись
|| {
echo Dir: $DIR_NAME not writeable
exit 4
}
cd $DIR_NAME
echo «Present directory $DIR_NAME»
}

Затем, чтобы в скрипте безопасно изменить текущую папку на нужную добавьте:

Иногда может понадобится узнать результат работы предыдущей команды. Для этого используйте переменную $?:

Для записи логов с текущим временем и датой создайте такую функцию:

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

Теперь вернемся к нашему примеру с MySQL и используем только что написанную функцию:

Иногда может понадобиться загрузка значений переменных из файла. Сначала создаем файл с переменными:

Затем просто добавьте такую строку вначале скрипта, при условии, что конфигурационный файл находится в этой папке и называется configfile:

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

Переменные и вывод команд

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

$(команда)

С помощью этой конструкции вывод команды будет перенаправлен прямо туда, откуда она была вызвана, а не на экран. Например, утилита date возвращает текущую дату. Эти команды эквивалентны:

$ echo $(date)

Понимаете? Напишем скрипт, где будет выводиться hello world и дата:

string1=»hello world »
string2=$(date)

string=$string1$string2

echo $string

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

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

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

Adblock
detector