Содержание

Всякие хитрости в shell

сбор сетевой информации о системе

get_net_info.sh
#!/bin/bash                                                                                                                                                                                                         
 
log="$(basename $0).$(date +%Y%m%d%H%M%S).log"                                                                                                                                                                      
:>$log                                                                                                                                                                                                              
(                                                                                                                                                                                                                   
echo "ip a"                                                                                                                                                                                                         
ip a                                                                                                                                                                                                                
echo "ip r list table all"                                                                                                                                                                                          
ip r list table all                                                                                                                                                                                                 
echo "ip ru"                                                                                                                                                                                                        
ip ru                                                                                                                                                                                                               
 
echo "iptables -S"                                                                                                                                                                                                  
iptables -S                                                                                                                                                                                                         
echo "iptables -S -t nat"                                                                                                                                                                                           
iptables -S -t nat                                                                                                                                                                                                  
echo "iptables -S -t mangle"                                                                                                                                                                                        
iptables -S -t mangle                                                                                                                                                                                               
) >>$log 2>&1                                 

получить список каталогов в текущей папке

ls -d */|sed 's/\/$//'|xargs

полный путь к каталогу скрипта

dir="$(cd "$(dirname "$0")"; pwd)"

имя текущего скрипта

basename $0

То же самое, но еще отрезаем от имени расширение файла

basename $0|sed 's/\.[^.]*$//'

То же самое, но еще отрезаем от имени все расширения файла

basename $0|sed 's/\..*$//'

pipefail

Если опция pipefail включена — статус выхода из конвейера является значением последней (самой правой) команды, завершённой с ненулевым статусом, или ноль — если работа всех команд завершена успешно.

set -o pipefail

получить список каталогов в текущей папке

ls -d */|sed 's/\/$//'|xargs

полный путь к каталогу скрипта

dir="$(cd "$(dirname "$0")"; pwd)"

имя текущего скрипта

basename $0

То же самое, но еще отрезаем от имени расширение файла

basename $0|sed 's/\.[^.]*$//'

То же самое, но еще отрезаем от имени все расширения файла

basename $0|sed 's/\..*$//'

pipefail

Если опция pipefail включена — статус выхода из конвейера является значением последней (самой правой) команды, завершённой с ненулевым статусом, или ноль — если работа всех команд завершена успешно.

set -o pipefail

tail с подсветкой слов

tail -F /path/to/file | grep -E --color=always '^|word1|string 1'

Команда будет выводить на экран файл как обычный tail, но при этом подсвечивая строки 'word1' и 'string 1'.

Ключ -E для grep включает расширенные регулярные выражения. Это даст возможность использования пайпа | как элемента или. Первая часть строки для grep ^ позволяет выводить все строки (не отфильтровывая), так как совпадает с любой строкой