ЛУЧШЕЕ СПРАВОЧНОЕ РУКОВОДСТВО:
bash рулетка [ $[ $RANDOM % 6 ] == 0 ] && echo dead || echo live! / слеш в конце пути -признак каталога. Два тире -- после команды указывают,
что после них ключей нет, и тире не обрабатываются. Например создать
файл с тире в имени:
touch -- -a Построчно считать файл в переменную B
while read A; do B+=$A; done </etc/group echo $B Вывести файлы, начинающиеся на s, с расширением БЕЗ букв g или f ls s*.*[^gf] Без ^ значит с. Домик это отрицание.
Вывод файлов начинающихся с цифры. в квадратных скобках шаблон диапазона символов. ls [0-9]*.*
Шаблон выбора расширения по шаблону на каждый символ: ls *.[jJ][pP][gG]
Вывести последний ErrorLevel echo $?
Обратный слэш экранирует управляющие символы, выводя их как обычные. В
двойных кавычках можно экранировать пробелы, и использовать переменные: A=Star\ Wars; echo "variable A = $A"
Одинарные кавычки более строгие, экранируют всё, в.т.ч. и переменные: A=Star\ Wars; echo 'variable A = $A'
Знак доллара принуждает строгое экранирование обрабатывать управляющие символы, например перевод каретки: echo $'\nword\n'
Оператор сравнения на равенство с выводом кода Errorlevel test A == B ; echo $?
Когда нужно экранировать лишние символы, фигурные скобки явно указывают границы переменной: A=Star ; B=Wars ; echo ${A}_$B
Два слеша позволяют редуцировать вывод. Например вывод без пробелов: a='one two three' ; echo ${a// }
Слетели пути к zathura. Ищет свои файлы не там. Помогла перехэшизация путей: hash -r
Ещё похожие команды: sudo ldconfig
КРАТКИЕ КОНСТРУКЦИИ:
lalala & — запускает
команду в фоне, т.е. управление отдаётся командному интерпретатору
(bash, например), а [command] будет выполняться «параллельно». lalala
&& — подразумевает, что следующая команда будет выполнена
только в том случае, если [command] была выполнена успешна (вернула 0). КРАТКО: & = Run in background, && = Logical AND.
В bash ctrl+t меняет соседние символы местами, удобно.
Вернуться в предыдущую директорию:
cd -
Ожидание любой клавиши: echo -n "Press any key to continue..." && read
Вывести построчный список из цифр от 01 до 10. for x in {01..10};do echo $x;done
Повторить команду N раз: for n in {1..5}; do echo "Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ"; done
Калькулятор в bash: https://habrahabr.ru/post/310566/ echo $((15+25))
Калькулятор в консоли на python: echo 'print(666*2-200)'|python3
https://habrahabr.ru/post/310566/ Мы подгружаем в bc математическую библиотеку опцией -l и просим выдать число π с точностью 5000 знаков после запятой. time echo "scale=5000; 4*a(1)" | bc -l -q
Взять отрывок строки с конца: a=Победа; echo ${a:(-4)}
вывести цифры от 10 до 20 seq 10 20
вывести буквы A..Z for i in {a..z}; do echo -n $i; done
Вывод назначенных справа переменных: https://linuxize.com/post/bash-printf-command/printf "Open issues: %s\nClosed issues: %s\n" "34" "65" Вывод в hex, dec, oct форматах. printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100 Отступить слева 20 символов и напечатать слово, и число: printf "%20s %d\n" Mark 305 Напечатать число, дополнив его нулями до 8 символов. printf "%0*d" 8 1111
Вывести число 254 в бинарном виде: https://stackoverflow.com/questio....versiona=254; echo "obase=2;$a" | bc echo "obase=2; 254" | bc bc <<< "obase=2;254" На первый взгляд лишённая смысла, но полезная конструкция: вывести в бинарном виде записанное в бинарном виде число 254: echo "obase=2; $(( 2#11111110 ))" | bc Выбрать случайный файл в каталоге: ls | shuf -n1
Воспроизведение в консоли: ffplay example.mp3
Имитировать ввод с клавиатуры: echo "You can simulate on-screen typing just like in the movies" | pv -qL 10
Имитировать набор в реальном времени: LINE="Wake
up, User, The Windows has you..." ; while [[ -n "$LINE" ]] ; do echo -n
"${LINE::1}" ; LINE="${LINE:1}" ; sleep 0.1; done ; echo
Конвертировать text из ascii в HEX. echo -n "text" | od -A n -t x1 |sed 's/ /\\x/g'
Запись БИНАРНЫХ чисел в bash: echo $(( 2#01010101 )) Запись шестнадцатиричных: printf %x 255 бинарное выводится в десятичное и конвертируется в шестнадцатиричное printf %x $(( 2#11111111 ))
Вывести hex в dec echo $((16#ff)) Вывести hex число в бинарном виде: echo "obase=2; $((16#ff))" | bc
Вывести построчно разделённые пробелами слова: c="aa bb cc dd ee ff gg"; for x in $c; do echo $x; done;
Тот же результат путём замены " " на \n: echo $c | tr ' ' '\n'; echo
ОДНОСТРОЧНЫЕ СКРИПТЫ:
Бесконечное выполнение скрипта test.py: http://debianadmin.ru/beskonechnyj-cikl-na-bash.html while true; do ./test.py; sleep 3; done;
Дата YYYY-MM-DD в консоли: datev=$(date +%Y-%m-%d);echo $datev
Узнать код клавиши: и как это можно использовать: https://www.linux.org.ru/forum/general/11776554 xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p' Секундомер отсчёт с нуля:echo '';zero=`date +%s`; echo -n 0; while sleep 1; do echo -ne \\r; expr `date +%s` - $zero | tr -d \\n; done
Три способа создать сразу несколько каталогов. Перечислением, циклом, диапазоном: Таким
образом видно, что если числовые каталоги являются диапазоном, то и
создавать их следует им же. В противном случае списком, а цикл вообще от
лукавого. mkdir ./{2010,2011,2012,2013} mkdir ./$(for x in {2010..2013};do echo $x;done) mkdir ./{2010..2013}
mkdir - создать цепочку субкаталогов -p, --parents no error if existing, make parent directories as needed http://man7.org/linux/man-страницы/man1/mkdir.1.html
Матрица стайл tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"
Как в Bash быстро поместить содержимое файла в переменную? content=$(</tmp/file.txt) # Проверка что оказалось в переменной echo "$content"
ССЫЛКИ:
- Колисниченко Д. Н. Командная строка Linux и автоматизация рутинных задач.pdf
https://vk.com/doc9273....41ef2ca - Mendel Cooper. Advanced Bash-Scripting Guide. Искусство программирования на языке сценариев командной оболочки. Перевод: Андрей Киселев. !!! ОЧЕНЬ хороший учебник с оглавлением!!!
https://poplinux.ru/adv-bash/ - Bash-скрипты, часть 3: параметры и ключи командной строки
https://habr.com/company/ruvds/blog/326328/ - Встроенная команда read
https://sites.google.com/site/bashhackers/commands/read
- Учим bash-скрипты, пишем Sokoban
https://habr.com/ru/post/120198/ - Интерактивная игра на bash: «Арканоид»
https://bolknote.ru/all/3410/
|