15 октября 2023 Bash curl awk sort uniq egrep white read


Если необходимо проверить большое количество ссылок на сайте то можно воспользоваться вот таким bash скрипт

site=http://127.0.0.1:8080

curl $site 2> /dev/null | egrep -o 'href="[^"]+"' | awk -F\" '{print $2}' | grep /catalog/ | sort | uniq | while read u; do 
curl  $site$u -o /dev/null -w "%{http_code} $u\n" -s 
done >> check-menu.txt 

Данный скрипт

  • скачивает главную страницу сайта: curl $site
  • затем  выбирает все ссылки href: egrep -o 'href="[^"]+"'
  • выбирает содержимое аттрибута href: egrep -o 'href="[^"]+"'
  • отбирает ссылки содержащие /catalog/: grep /catalog/
  • сортирует и отбирает только уникальные ссылки: sort| uniq
  • в цикле запрашивает кажду ссылку и сохраняет статус ссылки в файл check-menu.txt ;

13 октября 2023 Bash awk while read


Имеет большое количество файлов которые могут повторяться по содержимому и стоит задача оставить только уникальные файлы по содержимому. Для определения уникальности будем использовать контрольную сумму md5, а для автоматизации bash скрипт

#!/bin/bash

echo Чистка от дублей

x="" 

ls /tmp/base_1s-202* |sort  | while read f; do  
    _x=$(md5sum $f|awk '{print $1}')
    if [ $_x == "$x" ]; then 
        echo удаление $f  $_x
        rm $f 
    else 
        x=$_x
        echo сохранение $_x $f
    fi
done

 


11 октября 2023 13 октября 2023 Bash for read while git ls-files


Обычно я использую для обработки больлих списков следующую конструкцию
 

for x in $(git ls-files); do
du -sm "$x"
done

здесть создаётся локальная переменная в которой размещается результат операции find

Более оптимальная конструкция без использования локальной переменной через цикл while и read

git ls-files | while read x; 
do du -sm "$x"; 
done

 


05 октября 2023 13 октября 2023 Bash array shuf random


На самом деле всё просто и выглядит вот так

echo {0..20} 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

shuf -e {0..20} | xargs 

14 6 12 19 5 8 20 10 3 15 1 16 13 7 9 4 2 0 11 17 18

 


29 августа 2023 Bash awk haproxy


Задача, выделить из логов haproxy статусы запросов, бакенды обработчиков и урлы запросов, так же выводить количество счётчик статусов запросов

tail -f /var/log/haproxy-traffic.log |awk -F' ' '{if (NF == 20)  print $11,'\t', ++count[$11],'\t', $9, $19 }'

Программа awk состоит из условия и инкремента счётчика

if (NF == 20)  print $11,'\t', ++count[$11],'\t', $9, $19 }

здесь отбираются строки состоящие из 20 слов, выводится status_code запроса, а так же результат инкремента счётчика статусов

подобным образом можно организовать подсчёт количества обращений к бакенду и ссылкам

if (NF == 20)  print $11,'\t', ++count[$11],'\t',++count[$19],'\t',  $9, ++count[$19],'\t',  $19 }

 


13 апреля 2021 22 апреля 2021 Bash bash curl check 404 | решать тесты

  • Зачем нужна опция -q при использования утилиты curl


Список ссылок размещён в файле /tmp/pdf.csv
 

for u in $(cat /tmp/pdf.csv); do 
curl -I $u 2> /dev/null | grep 'HTTP/1.1 404' -q && echo 404 `basename $u` || echo ok `basename $u`  
done

 


28 декабря 2017 07 января 2018 Bash Bash mkdir


Когда сервере  необходимо на создать иерархию директорий то можно открыть mc и 23 раз запустить диалог создания директори или ручками создать всё что нужно с помощью команды mkdir, создать 3 родительских директории media/ , media/pages/ и media/products/ а затем ещё 20 раз для каждой директории

либо воспользоваться возможностями интерпретатора bash введя вот такие команды

mkdir -p media/pages/{0,1,2,3,4,5,6,7,8,9}  media/products/{0..9}

тут в одной строке используются два способа задать диапазон и очевидно, что второй лаконичнее и удобнее

(venv3)python@breys ❄  ls -R media/
media/:
pages  products

media/pages:
0  1  2  3  4  5  6  7  8  9

media/pages/0:
media/pages/1:
media/pages/2:
media/pages/3:
media/pages/4:
media/pages/5:
media/pages/6:
media/pages/7:
media/pages/8:
media/pages/9:
media/products:
0  1  2  3  4  5  6  7  8  9

media/products/0:
media/products/1:
media/products/2:
media/products/3:
media/products/4:
media/products/5:
media/products/6:
media/products/7:
media/products/8:
media/products/9: