The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Shell

   Корень / Программисту и web-разработчику / Shell
Готовые скрипты [30]

----* Устранение ошибки 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://user@host.ru:/home/user/file"
 
----* Вывод времени в заданном формате в Shell   [комментарии]
 
Для записи в переменную cur_date времени в формате год-месяц-день-час-минута:
    cur_date=`date \+\%Y_\%m_\%d_\%H_\%M`
 
----* Как в Shell выполнить определенное действие сразу после обновления файла (доп. ссылка 1)   [обсудить]
 
fileschanged -r /shared/source/tree | while read fd; do
  stat -format="%n modified by %U at %y" $fc
done

fileschanged - http://fileschanged.sourceforge.net
 
----* Как отделить имя файла от расширения в 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
 
----* Как пропарсить примитивный файл конфигурации на Shell (чтение файла с разбивкой по столбцам) ?   [обсудить]
 
cat config.txt| grep -v '^ *#'| while read param1 param2; do                    
        echo "$param1 - $param2"
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
 

 Версия для печати





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру