|
Устранение ошибки redirection unexpected в bash-скриптах |
Автор: Аноним
[комментарии]
|
| На системе с bash 5.2.15(1)-release совершенно невинное выражение
read id rest < <(qm list)
вызывает ошибку "Syntax error: redirection unexpected"
Лечится заменой shebang с #!/bin/bash на #!/usr/bin/bash
Вроде бы потому, что whois bash отдаёт /usr/bin/bash.
Но ирония в том, что /bin/bash и /usr/bin/bash - две идентичные копии, даже не
симлинк. /usr/bin в PATH стоит перед /bin.
|
|
|
|
|
Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов) |
Автор: john_erohin
[комментарии]
|
| применимо в системах без anacron, без /etc/cron.[hourly|daily|weekly|monthly] и без systemd.
цель: чтобы вписать простую строку в crontab вида
0 */8 * * * $HOME/bin/script.sh
но при этом иметь случайное начало работы (а не ровно 00:00, 08:00 и 16:00),
в начале script.sh нужно поместить
R0=`dd if=/dev/urandom bs=1 count=4 status=none | od -t u4 | head -1 | cut -c 8-`
sleep `echo "scale=0;" $R0 % 3601 | bc`
задержка будет случайная, равномерно распределённая в интервале от 0 до 3600 секунд.
|
|
|
|
|
Просмотр прогноза погоды из терминала (доп. ссылка 1) |
Автор: igor_chubin
[комментарии]
|
| Чтобы просмотреть информацию о погоде из командной строки, можно обратиться к службе wttr.in (код сервиса [[https://github.com/chubin/wttr.in открыт]] под лицензией Apache 2.0) с помощью curl или другой аналогичной программы:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Скрипт для наглядного ping с ведением лога |
Автор: Kins
[комментарии]
|
| Представленный скрипт может:
* Отображать результат пинга
* Отображать время пинга
* Вести лог пингов
* Визуализировать лог пингов
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Выполнение действия при изменении или создании файла в Linux |
[комментарии]
|
| Утилита inotifywait из состава пакета inotify-tools позволяет организовать выполнение
определенного действия в shell скрипте, при изменении, создании, удалении,
перемещении и выполнении
других операций с файлами.
Выполняем программу при появлении нового файла в директории
inotifywait -e create /home/ftp/incoming --format "%w%f" -q -m| while read file; do
clamscan $file
done
Для отслеживания изменений вместо create можно использовать modify, удаления -
delete, перемещения - move и т.п.
|
|
|
|
|
Шаблонизатор на shell (доп. ссылка 1) |
Автор: Denis Nasyrtdinov
[комментарии]
|
| Часто для целей серверной автоматизации требуется генерация конфигурационных файлов.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Сортировка стандартного вывода по длине строк |
Автор: pavlinux
[комментарии]
|
| Сортируем в порядке возрастания длины:
cat /etc/passwd | awk '{print length, $0}' | sort -n | awk '{$1=""; print $0 }'
или обратно
cat /etc/passwd | awk '{print length, $0}' | sort -rn | awk '{$1=""; print $0 }'
|
|
|
|
|
Примеры использования Awk (доп. ссылка 1) |
[комментарии]
|
| Использование сокращений.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как хранить дату выполнения в истории команд bash (доп. ссылка 1) |
Автор: kpblca
[комментарии]
|
| По умолчанию bash, а точнее утилита history, не сохраняет в .bash_history
время исполнения каждой команды.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Отдельный файл истории работы в bash для пользователя работающего через SU (доп. ссылка 1) |
[комментарии]
|
| Чтобы поместить в отдельный лог команды выполненные в режиме su:
.bash_profile
export HISTSIZE=3000
export HISTFILESIZE=99999
export HISTFILE=/root/.bash_hist-$(who am i|awk '{print $1}';exit)
Получим два файла истории: .bash_hist-user и .bash_hist-root
|
|
|
|
|
Вертикальная конкатенация двух файлов (доп. ссылка 1) |
[обсудить]
|
| Склеивание столбцов данных из файлов a.txt и b.txt, с разделителем пробел, производится командой:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
В чем отличие .bash_profile и .bashrc (доп. ссылка 1) |
[комментарии]
|
| .bash_profile загружается только при входе пользователя в систему (консольный вход, ssh),
в то время как .bashrc запускается для интерактивных сервисов выполняемых без
логина (запуск xterm).
|
|
|
|
|
Пример работы с MySQL в bash скриптах |
Автор: Luc!f3r
[комментарии]
|
| Пример1:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как определить смещение в часах для текущей временной зоны в Perl и Shell |
[обсудить]
|
| Perl:
use POSIX (strftime);
my $tz = strftime("%z", localtime);
$tz =~ s/(\d\d)(\d\d)/$1/;
Shell:
date +%z|sed 's/[0-9][0-9]$//'
|
|
|
|
|
Как использовать графические диалоговые окна в shell скриптах (доп. ссылка 1) |
[обсудить]
|
| Выбор Yes или No (результат в $?, 0 - yes, 1 - no, 255 - закрыто окно), "0 0" - размер окна по умолчанию:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Памятка по командам SED (доп. ссылка 1) |
Автор: madskull
[обсудить]
|
| ... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Работа со строками в bash (доп. ссылка 1) |
Автор: madskull
[обсудить]
|
| ... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Получение строки случайных символов в Shell |
Автор: uncknown
[комментарии]
|
| Пригодится, например, для создания временных файлов:
FreeBSD: head -c 15 /dev/random | md5 | tail -c 10
Linux: head -c 15 /dev/random | md5sum | head -c 10
|
|
|
|
|
Пример математических операций в shell используя bc (доп. ссылка 1) |
[комментарии]
|
| echo "(321-123)/123" | bc -l
echo "framing=20; minsize=64; (100*10^6)/((framing+minsize)*8)" | bc
Рисование графика
echo "framing=20; plot [64:1518] (100*10* *6)/((framing+x)*8)" | gnuplot -persist
Преобразование из десятичного в шестнадцатеричный вид
echo "obase=16;ibase=10;123" | bc
|
|
|
|
|
Скрипт для удаленного редактирования файлов |
Автор: spanka
[комментарии]
|
| #!/bin/sh
tmp_file=`mktemp /tmp/scp_vi.XXXXXXXXXX`
cp /dev/null $tmp_file
scp $1 $tmp_file
vi $tmp_file
scp $tmp_file $1
rm -f $tmp_file
запускать так: rvi login@host:/patch/to/file
В vim можно писать "vim scp://[email protected]:/home/user/file"
|
|
|
|
|
Вывод времени в заданном формате в Shell |
[комментарии]
|
| Для записи в переменную cur_date времени в формате год-месяц-день-час-минута:
cur_date=`date \+\%Y_\%m_\%d_\%H_\%M`
|
|
|
|
|
|
Как отделить имя файла от расширения в bash и freebsd sh (доп. ссылка 1) |
[комментарии]
|
| Заменяем расширение .wav на .mp3:
file_name="file.wav"
echo ${file_name%%.wav}.mp3
|
|
|
|
|
Пример использования eval и разбор параметров на Shell |
[обсудить]
|
| control_param="test1 test2"
num_test1="123"
num_test2="456"
for cur_item in $control_param; do
eval num_val=\$num_$cur_item
done
|
|
|
|
|
Как определить сумму столбца цифр в файле. |
[обсудить]
|
| Суммируем 3-й столбец из лог файла.
cat logfile| awk '{s += $3} END {print s}'
|
|
|
|
|
Цикл с счетчиком итераций на Shell |
[комментарии]
|
| min_num=2
max_num=10
i=$min_num
while [ $i -le $max_num ]; do
echo "$i"
i=$[i+1] # в зависимости от shell также подходит i=$(($i + 1)) или i=`expr $i + 1`
done
|
|
|
|
|
|
Как в sh определить число символов в строке |
Автор: Soldier
[комментарии]
|
| В FreeBSD sh и bash:
test="string"
len=${#test} ##Длина строки test
char1='t' ##Первый символ для поиска
pos1='echo $test | awk -vs=${char1} '{print index($0,s);}'' ##pos1=2 - найден
|
|
|
|
|
Специфичные особенности удаления элементов массивов в Bash |
Автор: Омельянович Евгений
[комментарии]
|
| В руководствах Bash упоминается, что команда "unset name[N]" выполняет удаление элемента массива, например:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как преобразовать имена файлов из верхнего регистра в нижний |
Автор: lavr
[комментарии]
|
| for i in `ls`; do mv "$i" `echo "$i" | tr "[:upper:]" "[:lower:]"`; done
|
|
|
|
|
Результат ping в скриптах |
Автор: Белоусов Олег
[комментарии]
|
| ping -c 2 host_name
if [ $? !=0]; then
echo "Not ping!"
else
echo "Work normal"
fi
|
|
|
|