Bash: Как в macOS добавить новую переменную $PATH?

Команда sed — это потоковый редактор текста, работающий по принципу замены. Его можно использовать для поиска, вставки, замены и удаления фрагментов. Утилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил.

Несколько способов ускорить 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

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

Читайте также:  Как почистить ноутбук и компьютер от пыли дома

#!/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?

Git Bash – это приложение для сред Microsoft Windows, которое предоставляет эмуляцию bash, используемую для запуска Git из командной строки. Это не простой bash, скомпилированный для Windows, а пакет, содержащий Bash, SSH, SCP и некоторые другие утилиты Unix, скомпилированные для Windows. Он также содержит новое окно терминала интерфейса командной строки под названием minty. Эти утилиты связаны с этим пакетом Bash, чтобы создать полезный пакет программного обеспечения.

В Windows мы обычно запускаем команды в CMD, но на самом деле это исполняемые файлы, которые существуют в папке C: Windows System32. То же самое касается bash, для работы команд требуются утилиты. В системах Unix эти утилиты будут находиться в каталоге / usr / bin. Итак, после установки Git Bash эти утилиты будут установлены в папку C: Program Files Git usr bin.

Linux, bash. Однострочники

Собственно, начало пары.

|, &&, ||

Уже разбирали. Повторяем.

| — перенаправление вывода одной команды на вход другой. Пример:

man bash | less

|| — ленивое логическое «или». Используется для выполнения операции, если предыдущая завершилась с ошибкой:

cd /root || echo Доступ запрещён

&& — ленивое логическое «и». Используется для выполнения операции, если предыдущая завершилась успешно:

cd $HOME && echo Чуи, мы дома!

cat, head, tail, grep

cat — конкатенация содержимого файлов и вывод:

cat ~/.bash* | less

head — вывести начало файла (по умолчанию 10 строк):

head /etc/passwd

tail — вывести конец файла (по умолчанию 10 строк):

tail /var/log/syslog

— полезно для чтения логов — там как раз последнее — самое интересное. Также часто используется:

tail -f /var/log/syslog

— выводить по мере поступления новых строк в файл.

grep — великая утилита для фильтрации входного потока:

cat /etc/passwd | grep root grep root /etc/passwd # есть вариант указать в аргументах файлы

ДЗ: пишем anti-head-tail — 2 аргумента: с какой по какую строку отправлять на вывод. +5 баллов в карму.

xargs

Отдельная заметка про xargs.

Если коротко:

ls | xargs file # передать спиок вывода ls аргументом утилите file.

# Склеить строки echo «a b c» | xargs a b c

regexp

Oh, shi~~

Короче, есть главная проблема программирования — «придумать название переменной».

За ней ровным строем идут регулярные выражения/грамматики, инвалидация кеша и реляционная алгебра.

Я вам не скажу за главную проблему, но за регулярные выражения немного поясню.

Мы уже встречались с прекрасными подстановками типа * и, например, *.txt. Видели забавные mkdir -p ./test/{a,s,d/{q,w,e}}, но что, если я скажу, что подобным образом можно искать?!

Как-то мы уже использовали grep для поиска подстроки в строке:

grep roo /etc/passwd

— ищем «roo» в файле passwd. Но это не так круто, как искать по шаблону!

grep ‘^root:’ /etc/passwd

— находим запись пользователя root.

Отмечу, что в каком-то виде regexp (regular expressions) есть практически во всех языках программирования, поэтому мозголомка ниже будет полезна. Понимание regexp сродни пониманию сложения — рассказывать об этом также сложно, ибо уже не помнишь, в чём проблемы восприятия (поэтому жду вопросов).

Читайте также:  Apple выпустили пятую бета-версию iOS 11.4 beta 5

Регулярные выражения содержат 3 базовых возможности:

  1. Конкатенация (вспоминаем cat) — два выражения могут идти одно за другим. Полученное большое выражение будет соответствовать входной строке тогда и только тогда, когда часть входа, соответствующая первому маленькому выражению, сразу же следует за частью, которая соответствует второму маленькому выражению.

    ab

  2. Объединение (операция or / ||) — большое выражение соответствует строке, соответствуйщей одному из маленьких выражений, содержащихся в нём.

    a|b

  3. Замыкание — маленькое выражение может быть «повторено» ноль или более раз, чтобы соответствовать входу.

    a*

Примеры регулярных выражений

Конкатенация трёх выражений «f», «oo|ee», «t». Само же выражение «oo|ee» — объединение выражений «oo» и «ee»:

f(oo|ee)t # соответствуют foot или feet

Закрытие/замыкание/кложура и тд:

a+ # соответствует «a» один или более раз a* # соответствует «a» 0 или более раз a? # соответствует «a» 0 или 1 раз a{2,5} # сооветствует от 2 до 5 раз «a» a{2} # 2 раза a{2,} # от 2 раз a{,5} # до 5 раз

Делаем одно и то же разными способами:

a(0|1|2|3|4|5|6|7|8|9) # соотвествует a0, a1 … a9 a[0-9] # то же самое, что и a(0|1|2|3|4|5|6|7|8|9), но используя класс символов a[[:digit:]] # то же самое, что выше, но с альтернативным синтаксисом a\\d # то же самое, но через «сокращённое написание»

Полезно знать:

^ # символ начала строки $ # символ конца строки (не путать с \n — переводом строки) . # любой символ

Помните [[:digit:]]? Такого много:

[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]

С чем это едят:

[[ «sad day» =~ (sad|happy) ]] && echo «Что-то о настроении» grep ‘^root:’ /etc/passwd # запись пользователя root awk ‘/false$/ {print $0}’ /etc/passwd # найти всех, кто логинится в false cat /etc/passwd | sed ‘/ *#/d; /^ *$/d’ # убрали комментарии из /etc/passwd и вывели

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

Установка

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

$ sed —version

В моей системе эта команда показывает, что у меня установлен GNU sed 4.2.1 плюс дает ссылку на домашнюю страницу программы и другие полезные сведения. Пакет называется «sed» независимо от дистрибутива, кроме Gentoo, где он присутствует неявно.

Как добавить переменную окружения в macOS?

Есть также 4 варианта — первый, это открытие файла.bash_profile с помощью Finder и внесение пути, второй и третий и четвертый с помощью терминала:

Добавить переменную в файл .bash_profile 

Откройте ваш домашний каталог:

cd $home

Редактируем .bash_profile:

nano ~/.bash_profile

Добавьте в файл такую запись:

PATH=$PATH:/ваш/путь/к/команде/

Закройте текстовый файл, все готово!

У вас остались еще дополнительные вопросы? Пишите их в комментариях, о том что у вас получилось или наоборот!

Вот и все! Больше полезных статей и инструкций читайте в разделе Статьи и Хаки IOS и macOS. Оставайтесь вместе с сайтом Android +1, дальше будет еще интересней!

Работа с переменными

Самый распространенный способ хранения начальных данных — переменные. В самом начале программы объявляются несколько таких переменных, в которые пользователь записывает некоторые исходные данные.

Список зарезервированных переменных:

$DIRSTACK — содержимое вершины стека каталогов

$EDITOR — текстовый редактор по умолчанию

$EUID — эффективный UID, если используется программа su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя

$UID — реальный идентификатор, который устанавливается только при логине

$FUNCNAME — имя текущей функции в скрипте

$GROUPS — массив групп к которым принадлежит текущий пользователь

$HOME — домашний каталог пользователя

Читайте также:  4 инструмента командной строки Windows

$HOSTNAME — ваш hostname

$HOSTTYPE — архитектура машины

$LC_CTYPE — внутренняя переменная, которая определяет кодировку символов

$OLDPWD — прежний рабочий каталог

$OSTYPE — тип ОС

$PATH — путь поиска программ

$PPID — идентификатор родительского процесса

$SECONDS — время работы скрипта(в сек.)

$# — общее количество параметров переданных скрипту

$* — все аргументы, переданные скрипту (выводятся в строку)

[email protected] — все аргументы, переданные скрипту (выводятся в столбик)

$! — PID последнего запущенного в фоне процесса

$$ — PID самого скрипта

Пример работы с переменными и конфигурационным файлом

#!/bin/bash[email protected]#Вписать адрес электронной почтыecho «Адрес электронной почты: $EMAIL»

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

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

#!/bin/bashsource ./echo «Адрес электронной почты: $EMAIL»

В файл не забудем поместить строчку: Е[email protected]

Пример работы с математическими операциями

Для работы с математическими операциями используется команда let, которая производит арифметические операции над числами и переменными.

Содержимое исполняемого файла:

#!/bin/bashecho «Введите a: «read aecho «Введите b: «read blet «c = a + b» #сложениеecho «a+b= $c»let «c = a / b» #делениеecho «a/b= $c»

Обновите название исполняемого файла, нажав сочетание клавиш CTRL+O, например, пусть он будет называться math, после чего нажмите клавишу Enter.

Сделайте файл исполняемым:

chmod +x math

Запустите файл:

math

Результат выполнения должен выглядеть следующим образом:

Введите a:

123

Введите b:

a+b= 135

a/b= 10

Список математических операций:

+ — сложение

— — вычитание

* — умножение

/ — деление

% — модуль (деление по модулю), остаток от деления

Команда let позволяет использовать сокращения арифметических команд, тем самым сокращая количество используемых переменных, например: a = a+b эквивалентно a +=b.

Потоки

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

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

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

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

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

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

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

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

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

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

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

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

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