Использование команды Basename в Bash Scripts

Каждый Bash-скрипт стоит начинать со следующих строк:

Несколько способов ускорить bash-скрипты

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

    Создадим в командной строке Linux пустой файл (назовем его для примера firstscript) и откроем его на редактирование в любимом текстовом редакторе (vi/vim, nano, gedit и т.д.):
  1. Скопируем/вставим или просто наберем вручную следующий текст:
  2. Выйдем из текстового редактора с сохранением созданного файла.
  3. Сделаем наш скрипт исполняемым, чтобы в дальнейшем мы его могли без проблем запускать из командной строки, выполнив команду:
  4. Попробуем запустить созданный нами скрипт, выполнив в командной строке: И, вот результат:

Как это все работает:

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

вторая строка создает каталог testdir

третья строка позволяет перейти в созданный каталог testdir

команда touch в следующей строке создает три файла

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

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

Если вы ежедневно выполняете цепочку каких-либо одинаковых команд (с постоянными параметрами) в Linux, то возможно вам имеет смысл написать такой же простой скрипт на bash, который позволит вам сэкономить ваше время и автоматизировать вашу работу.

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

, перенаправление

#!/bin/bash # Любой shell-скрипт всегда начинается со строчки #!/bin/bash (или #!/bin/sh) # Комментарии всегда начинаются со знака # # Для того, чтоб вывести на экран сообщение, используем команду ECHO echo "hello, world" # а это пример форматированного вывода…

почти как в Си printf "форматированный вывод десять=%d строка=%s float=%f шестнадцатиричное_число=0x%X\n" 10 "строка" 234 # пример чтения ввода с клавиатуры read A echo $A printf " вы только что ввели слово: %s\n" "$A" #перенаправление, конвейеры, получение результата вывода другой программы # пример генерации пароля из 10 букв PASSWORD1=`cat /dev/urandom | tr -d -c ‘a-zA-Z0-9’ | fold -w 10 | head -1` echo Password=$PASSWORD1 #кавычки вида « дают результат вывода на экран того, что внутри них (т.е. выполняется #программа или скрипт, написанные внутри таких кавычек и результат, выводимый ими на #стандартный вывод является результатом операции "обратные кавычки" #в данном случае результатом является вывод конвейера из нескольких программ.

Интересные bash скрипты для любителей терминала в Linux

#операция | обозначает конвейер. Т.е. в нашем примере: #cat /dev/urandom выводит на содержимое файла /dev/urandom ( для генерации ) #tr осуществляет трансляцию,т.е. заменяет одни байты другими (это нужно, чтоб избежать появления в пароле непе- #чатаемых символов) #fold разбивает то, что ей пришло на на строки длиной 10 символов и выводит это на #head -1 выводит первую строчку того, что ей пришло на стандартный ввод. # или так: PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c10` echo Password=$PASSWORD2

Читайте также:  Игры для Linux и что будет дальше

действия, циклы по кол-ву раз

#!/bin/bash A="10" B="5" C=`expr $A + $B` printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C" # пример цикла по i I=0 while [ $I -lt 15 ] do printf "0x%02x " "$I" I=`expr $I + 1` done echo

рода проверки

#!/bin/bash # пример проверки существования файла # создаем файл test1 touch test1 # проверяем существование файла test1 if [ -f test1 ] ; then echo "файл test1 существует" fi # проверяем несуществование файла test2 if ! [ -f test2 ] ; then echo "файл test2 не существует" fi # краткая справка по другим опциям команды [ ] # -d filename директория существует # -f filename файл существует # -L filename символьная ссылка существует # -r, -w, -x файл доступен для чтения, записи или выполнения # -s filename файл существует и имеет ненулевую длину # f1 -nt f2 f1 новее чем f2 # f1 -ot f2 f1 старше чем f2

Метки: bash, freebsd, shell

Написать комментарий через:

Команды в Git Bash консоли

clear — Очистить консоль

pwd — Показать текущий каталог ls — Показать файлы в данной папке, кроме скрытых ls -f — Показать файлы в данной папке, включая и скрытые cd c:/ — Перейти в конкретный каталог cd — — Вернуться назад cd .. — Выйти на 1 уровень вверх cd ../.. — Выйти на 2 уровня вверх

Создание каталогов

mkdir — Создать папку cd !$ — Перейти в только что созданную папку mkdir -p {app1,app2} — Создать сразу несколько папок mkdir -p app/{css,js} — Создать сразу несколько вложенных папок

Создание файлов

touch — Создать файл touch app/{css/,js/,} — Создать сразу несколько файлов, никаких лишних пробелов быть не должно

Удаление файлов

touch — позволяет создавать файлы rm test — Удалить пустую папку test rm -r test — Удалить папку test с файлами внутри неё

Перемещение файлов

mv app1/*.* app2 — Переместить все файлы из папки app1 в папку app2

Вариант 2: перенаправляем вывод в файл и отображаем его на экране

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

команда | tee /путь/к/файлу

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

команда | tee -a /путь/к/файлу

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

Вариант 2: перенаправляем вывод в файл и отображаем его на экране

Предыдущая запись Как добавить пользователя в CentOS 7 Следующая запись Восстановление GRUB 2 после установки Windows в DebianМожет вас заинтересовать:

  1. Отключаем чувствительность терминала Linux к регистру при использовании автодополнения по TAB
  2. Как узнать версию дистрибутива и ядра Linux
  3. Как перезагрузить или выключить компьютер из терминала в Ubuntu
  4. Скринкастинг с помощью FFmpeg (avconv) в Linux
Читайте также:  ТОП-10 ЛУЧШИХ ДИСТРИБУТИВОВ LINUX ДЛЯ НОУТБУКОВ В 2021 ГОДУ

Метки Linux терминалХаки Linux

Опции запуска компилятора shc

-e date — дата срока действия программы (перестанет работать после этой даты) в формате dd/mm/yyyy -m message — сообщение, которое будет написано по истечение срока действия программы (пишется в кавычках) -f script_name — файл скрипта, который нужно откомпилировать -i inline_option — указание опции для интерпретатора командной строки (например, -e) -x comand — выполнить команду, в формате printf (например, exec(\\’%s\\’,@ARGV);) -l last_option — последняя опция для интерпретатора командной строки -r — уменьшить безопасность, чтобы программа выполнялась на большинстве подобный операционных систем -v — подробный вывод информации о процессе компиляции -D — включение отладки exec -T — разрешить трассировку откомпилированной программы, используя strace, ptrace, truss и т.д. -C — вывести на экран лицензию и завершить выполнение программы -A — вывести на экран произвольную информацию и завершить выполнение программы -h — отобразить помощь по программе

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

Избавляемся от временных файлов

Некоторые команды ожидают на вход имя файла, с ними нам поможет оператор ‘<()’, он принимает на вход команду и преобразует в нечто что можно использовать как имя файла: # скачать два URLa и передать их в diff

diff <(wget -O — url1) <(wget -O — url2)

Использование маркера для передачи многострочных переменных: # MARKER — любое слово.

command << MARKER … ${var} $(cmd) … MARKER

Если нужно избежать подстановки, то маркер можно взять в кавычки: # конструкция вернет ‘$var’ а не значение переменной

var=»text» cat << ‘MARKER’ … $var … MARKER

Потоки

Файл, из которого осуществляется чтение, называется стандартным потоком ввода, а в который осуществляется запись — стандартным потоком вывода.

Стандартные потоки:

0 stdin, ввод 1 stdout, вывод 2 stderr, поток ошибок

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

command 2>&1 # ошибки (stderr) в stdout command > ~/ 2>&1 # stdout в файл command &> ~/ # весь вывод в файл

Перенаправление потоков

Для перенаправления потоков используются основные команды: <, >, >>, <<<, |. Рассмотрим как можно перенаправлять стандартные потоки.

Перенаправление потока вывода:

> перенаправить поток вывода в файл (файл будет создан или перезаписан) >> дописать поток вывода в конец файла

Перенаправление потока ввода (прием данных):

< файл в поток ввода (файл будет источником данных) <<< чтение ОДНОЙ строки вместо содержимого файла (для bash 3 и выше)

Читайте также:  Manjaro 21, Новости и легкая загрузка Linux на базе Arch

Перенаправление вывода ошибок:

2> перенаправить поток ошибок в файл 2>> дописать ошибки в файл (файл будет создан или перезаписан)

Примечание

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

my_var=$(my_ | tee /dev/tty)

Подстановка процессов

Передать процессу команда1 файл (созданный налету канал или файл /dev/fd/…), в котором находятся данные, которые выводит команда2:

команда1 <(команда2)

Примеры

Логировать результат поиска и ошибки:

find . -maxdepth 1 -name ‘*.png’ > ~/ 2> ~/

Эта конструкция позволяет читать из строки как из файла. Демонстрационный пример:

str=’one,two’; tr ‘,’ ‘ ‘ <<<$str

Создаем временный файл и записываем в него поток переданный скрипту:

tmp_file=$(tempfile) # /tmp/fileXXXXXX cat > $tmp_file

А теперь откроем файл в текстовом редакторе с «отвязкой» (отключением) от терминала, подавляем вывод сообщений в терминал:

(sublime-text $tmp_file &) 2> /dev/null > /dev/null

Удаление истории Bash

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

Ваша история bash — это просто текстовый файл, сохраненный в ~ / .bash_history. Вы можете просто удалить этот файл, чтобы очистить историю bash, или вы можете более аккуратно выполнить команду history с опцией clear, например, так:

history -c

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

history -d 12

$ — выражения переменных

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

Вы можете использовать, echo, чтобы увидеть значение, которое содержит переменная, — просто перед именем переменной следует знак доллара ($), как показано ниже:

echo $ USER

echo $ HOME

echo $ PATH

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

ThisDistro=Ubuntu

MyNumber=2001

echo $ThisDistro

echo $MyNumber

Добавьте фигурные скобки ({}) вокруг знака доллара и выполните расширение параметра, чтобы получить значение переменной и разрешить дальнейшие преобразования значения.

Это создает переменную, которая содержит строку символов, как показано ниже:

MyString = 123456qwerty

Используйте следующую команду для вывода строки в окно терминала:

echo $ {MyString}

Чтобы вернуть подстроку, начиная с позиции 6 всей строки, используйте следующую команду (смещение нуля, поэтому первая позиция равна нулю):

echo $ {myString: 6}

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

echo $ {myString: 0: 6}

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

echo $ {myString: 4: 4}