Bash — различия между версиями

Материал из Вікі Фаланстэра
Перейти к: навигация, поиск
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
==Горячие клавиши и прочие фишки==
 
 
Стандартно в bash используются горячие клавиши Emacs.
 
 
'''Например:'''
 
 
*TAB - автодополнение
 
 
*ctrl+a - переход в начало строки
 
 
*ctrl+e - переход в конец строки
 
 
*ctrl+k - удаление строки
 
 
*ctrl+r - поиск назад по истории команд
 
 
*alt+r или ctrl+/- отмена последнего действия
 
 
*^ - результат замены (например, если была команда ls /home и нужно заменить на сd /home --> ls^cd^)
 
 
 
'''Выполнение нескольких команд в строке:''' <первая команда>
 
<логический оператор> <вторая команда>,
 
 
где <логический оператор>:
 
 
* && - выполнить вторую команду, если первая команда была успешной (логическое И)
 
 
* || - выполнить первую команду или второю (исключающее ИЛИ)
 
 
* ; - выполнить первую команду, а затем (независимо от результатов выполнения первой) вторую
 
 
==Понятие каналов в bash==
 
 
'''Каналы (потоки)''' - текстовые потоки, которыми можно управлять, например, перенаправлять выходной поток одной программы во входной поток другой. Данный подход используется для нетривиальной обработки данных и позволяет строить достаточно забавные конструкции.
 
 
'''Общий синтаксис:'''
 
*> - перенаправление выходного потока в файл, то есть запись в файл. При этом, если файл существовал ранее, то все его содержимое затирается новым.
 
 
:Пример: ls -al > list.txt
 
 
*>> - то же самое, но при этом новое содержимое добавляется к старому.
 
 
*2> - перенаправление потока ошибок. Используется для упреждения вывода в консоль сообщений об ошибках.
 
 
 
=Основы синтаксиса=
 
=Основы синтаксиса=
  
Строка 86: Строка 41:
  
 
<(...) - создает свой канал, соединяет его выход со входом read  файловый дескриптор
 
<(...) - создает свой канал, соединяет его выход со входом read  файловый дескриптор
 
  
 
Подсчет числа строк, слов, символов в тескте + присвоение переменным
 
Подсчет числа строк, слов, символов в тескте + присвоение переменным
Строка 104: Строка 58:
 
   
 
   
 
  read packets _ _ time _ <<< "$info"
 
  read packets _ _ time _ <<< "$info"
 
+
<<< - оператор, позволяющий подставлять строки в однострочниках как строки, которые подаются на стандартный вход
<<< - оператор, позволяющий подставлять строки в однострочниках как строки, которые подаются на стандартный вход
+
  
 
Получение размера файла:
 
Получение размера файла:
Строка 114: Строка 67:
  
 
  filename=${path##*/}
 
  filename=${path##*/}
 
+
ищет с начала; здесь filename - то, что осталось!
ищет с начала
+
здесь filename - то, что осталось!
+
  
 
Получение директории из пути:
 
Получение директории из пути:
  
 
  dirname=${path%/*}
 
  dirname=${path%/*}
 
+
ищет с конца; результат - остаток.
ищет с конца, результат - остаток
+
  
 
Быстрое копирование/перемещение файлов:
 
Быстрое копирование/перемещение файлов:
Строка 129: Строка 79:
 
  cp /path/to/file{,_copy}
 
  cp /path/to/file{,_copy}
 
  mv /path/to/file{,_old}
 
  mv /path/to/file{,_old}
 +
 +
=Разное=
 +
 +
==Горячие клавиши и прочие фишки==
 +
 +
Стандартно в bash используются горячие клавиши Emacs.
 +
 +
'''Например:'''
 +
 +
*TAB - автодополнение
 +
 +
*ctrl+a - переход в начало строки
 +
 +
*ctrl+e - переход в конец строки
 +
 +
*ctrl+k - удаление строки
 +
 +
*ctrl+r - поиск назад по истории команд
 +
 +
*alt+r или ctrl+/- отмена последнего действия
 +
 +
*^ - результат замены (например, если была команда ls /home и нужно заменить на сd /home --> ls^cd^)
 +
 +
 +
'''Выполнение нескольких команд в строке:''' <первая команда>
 +
<логический оператор> <вторая команда>,
 +
 +
где <логический оператор>:
 +
 +
* && - выполнить вторую команду, если первая команда была успешной (логическое И)
 +
 +
* || - выполнить первую команду или второю (исключающее ИЛИ)
 +
 +
* ; - выполнить первую команду, а затем (независимо от результатов выполнения первой) вторую
 +
 +
==Понятие каналов в bash==
 +
 +
'''Каналы (потоки)''' - текстовые потоки, которыми можно управлять, например, перенаправлять выходной поток одной программы во входной поток другой. Данный подход используется для нетривиальной обработки данных и позволяет строить достаточно забавные конструкции.
 +
 +
'''Общий синтаксис:'''
 +
*> - перенаправление выходного потока в файл, то есть запись в файл. При этом, если файл существовал ранее, то все его содержимое затирается новым.
 +
 +
:Пример: ls -al > list.txt
 +
 +
*>> - то же самое, но при этом новое содержимое добавляется к старому.
 +
 +
*2> - перенаправление потока ошибок. Используется для упреждения вывода в консоль сообщений об ошибках.
  
  
 
[[Category:Линуксовки в Фаланстере]]
 
[[Category:Линуксовки в Фаланстере]]

Текущая версия на 19:08, 19 января 2013

Основы синтаксиса

Работа с файлами

Очистка файла:

> file

Замена содержимого:

echo "some string" > file

Добавление содержимого:

echo "foo bar baz" >> file

Без новой строки в конце:

echo -n "foo bar baz" >> file 

Прочитать первую строку файла, присвоить переменной line:

read -r line < file
-r: "сырой формат"

Построчное чтение файла:

while read -r line; do
   #тут что-то делаем со строкой
done < file

Так тоже можно:

cat file | while IFS= read -r line; do
   # do something with $line
done

Читаем рандомную строку, присваиваем ее переменной:

read -r random_line < <(shuf file)

<(...) - создает свой канал, соединяет его выход со входом read файловый дескриптор

Подсчет числа строк, слов, символов в тескте + присвоение переменным

read lines words chars _ < <(wc file-with-5-lines)

Получение заданных значений из переменных, файлов и т.п. Пусть $info="20 packets in 10 seconds" Требуется получить $packets = 20; $seconds = 10;

Можно так:

packets=$(echo $info | awk '{ print $1 }')
time=$(echo $info | awk '{ print $4 }')

А можно и так:

read packets _ _ time _ <<< "$info"
<<< - оператор, позволяющий подставлять строки в однострочниках как  строки, которые подаются на стандартный вход

Получение размера файла:

size=$(wc -c < file)

Получение имени файла из пути $path = /path/to/file.ext:

filename=${path##*/}
ищет с начала; здесь filename - то, что осталось!

Получение директории из пути:

dirname=${path%/*}
ищет с конца; результат - остаток.

Быстрое копирование/перемещение файлов:

cp /path/to/file /path/to/file_copy
cp /path/to/file{,_copy}
mv /path/to/file{,_old}

Разное

Горячие клавиши и прочие фишки

Стандартно в bash используются горячие клавиши Emacs.

Например:

  • TAB - автодополнение
  • ctrl+a - переход в начало строки
  • ctrl+e - переход в конец строки
  • ctrl+k - удаление строки
  • ctrl+r - поиск назад по истории команд
  • alt+r или ctrl+/- отмена последнего действия
  • ^ - результат замены (например, если была команда ls /home и нужно заменить на сd /home --> ls^cd^)


Выполнение нескольких команд в строке: <первая команда> <логический оператор> <вторая команда>,

где <логический оператор>:

  • && - выполнить вторую команду, если первая команда была успешной (логическое И)
  • || - выполнить первую команду или второю (исключающее ИЛИ)
  •  ; - выполнить первую команду, а затем (независимо от результатов выполнения первой) вторую

Понятие каналов в bash

Каналы (потоки) - текстовые потоки, которыми можно управлять, например, перенаправлять выходной поток одной программы во входной поток другой. Данный подход используется для нетривиальной обработки данных и позволяет строить достаточно забавные конструкции.

Общий синтаксис:

  • > - перенаправление выходного потока в файл, то есть запись в файл. При этом, если файл существовал ранее, то все его содержимое затирается новым.
Пример: ls -al > list.txt
  • >> - то же самое, но при этом новое содержимое добавляется к старому.
  • 2> - перенаправление потока ошибок. Используется для упреждения вывода в консоль сообщений об ошибках.