LINUX.ORG.RU
ФорумAdmin

Помогите с написание баш скрипта

 


0

1

Помогите с написанием скрипта на баше, что надо

1) Проверить занимаемое место определённой папки 2) Проверить место на удалённом ПК 3) Если места на удалённом пк больше чем размер папки на текущем продолжаем выполнение скрипта если меньше то отменяем дальнейшее выполнение скрипта и отправляем письмо с текстом Аларм на . Чего я добился:

вот так я получаю место на удалённом пк

ssh -i /home/user/.ssh/user.privat_key user@10.18.2.144 'df -h' | grep /mnt/dat44/fol | awk '{print $3}'

получаю для примера 6.2G

Вот так на текущем du -h -s /mnt/data/backups/ | awk '{print $1}

#!/bin/bash

spacedb=«ssh -i /home/user/.ssh/user.privat_key user@10.18.2.144 'df -h' | grep /mnt/dat44/fol | awk '{print $3}'» folderspacedb=«du -h -s /mnt/data/backups/ | awk '{print $1}»

Ответ на: комментарий от EXL

+

там продолжение скрипта на баше, и много скриптов на нём, я пока только начал учиться по башу, питон у меня пока еще не скоро (но в обозримом будущем)

dedysobr
() автор топика
Ответ на: + от dedysobr

Накидал из головы, думаю суть будет ясна

#!/usr/bin/env bash

spacedb=$(df -hm | grep "\/dev\/sda2" | awk '{print $3}')
folderspacedb=$(du -hsm /home/SIZ37/ivan.petrov/s006/ | awk '{print $1}')

if [[ "$folderspacedb" -lt "$spacedb" ]]
then
    [commands...]
else
    echo "Text" | mailx -v -s "Alarm" ivan@petrov.ru
fi[/bash]
hanharr
()
Последнее исправление: hanharr (всего исправлений: 1)
Ответ на: + от dedysobr

я пока только начал учиться по башу, питон у меня пока еще не скоро (но в обозримом будущем)

Напротив, ты сперва освой Python, это гораздо полезнее, чем то, чем ты сейчас занимаешься. А там и Bash учить не придётся. Bash он как Microsoft Basic.

«Практически невозможно научить хорошему стилю программирования студентов, которые раньше имели дело с Бейсиком; в качестве программистов они умственно покалечены без надежды на восстановление.»

Edsger Wybe Dijkstra, «The Threats to Computing Science».

Тоже самое можно сказать и про Bash.

Знание Python может принести тебе неплохой доход, а вот знание Bash — сомнительно.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)

Не надо так.

Пишешь человеческий не-однострочный скрипт.sh на локалхосте, с форматированием и всем-всем, делаешь cat script.sh | ssh, твои волосы становятся мягкими и шелковистыми. А в однострочниках ты ноги сломаешь.

entefeed ☆☆☆
()

Если тебе в теме про баш советуют пистон, это означает только то, что советчик в баш не умеет.

ashot ★★★★
()
Ответ на: комментарий от anc

-h убрать к люлям

Почему? Это же для письма человеку вроде.

Вот всегда другое удивляет, ну ладно grep | awk — это уже неисправимая классика. Но почему никто не юзает так:

awk 'BEGIN {"df -h /mntpoint" | getline; "df -h /mntpoint" | getline; print $3}'
Может думают, что это два df-а вызывается?

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz

-h убрать к люлям

Почему? Это же для письма человеку вроде.

Ну вроде как задача такая

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

а с -h дальнейшее сравнение двух значений будет «не совсем верным».

anc ★★★★★
()
Ответ на: комментарий от anc

А, ну да. Наверное это и был главный вопрос, где всё встало, как сравнить... Просто обычно думаешь что человек сам писал, а получается, что он скопипастил best-practice это -h и в du и в df? Или думал, что есть простая встроенная функция, которая поймёт правильно суффиксы, осталось только спросить у народа?

vodz ★★★★★
()

<code>



#!/usr/bin/perl

use strict;

my $local="/boot";
my $remote="/tmp";
my $host='ssh ilya@10.8.0.1 -p2202';
my ($r_du, $l_du);

do {
    foreach my $path ($local, $remote){
        my $cmd = "du -s $path 2>/dev/null|tail -n 1|cut -f 1";
        if( $path eq $remote ){ $r_du = `$host '$cmd'`;} else {$l_du = qx($cmd);}
    }
    print "Size local: ". ($l_du)."    remote: ". ($r_du)."\n";
    sleep 60;
} while ( $l_du >= $r_du );
print "mailme"; # mail -s 'alarm!!!';

anonymous
()
Ответ на: комментарий от anonymous

du -s $path 2>/dev/null|tail -n 1|cut -f 1"

Зачем tail? И при наличии perl юзать вызов внешней проги для получения первого поля — какой-то сюр.

vodz ★★★★★
()
Ответ на: комментарий от r3lgar

Вы прежде чем отвечать, хотя бы посмотрели на что отвечаете?
Хотя, да, чего уж там, разбавим перловку еще sed-ом и awk, а сверху добавим python, посолим ruby, поперчим go, обернем в php, и на сладкое js... «идеальное блюдо».

anc ★★★★★
()
Ответ на: комментарий от anc

У меня тут ночь (а может уже и нет), на столе коньяк, в глазах двоится, комп не может определять степень моей трезвости, чтобы не допускать меня на ЛОР. Виноват, может даже исправлюсь, если получится.

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от anc

«идеальное блюдо»

По канонам UNIX-Way.

EXL ★★★★★
()

Может я чего не понял? Но, команды в переменной должны быт в одинарных (обратных) кавычках типа:

spacedb=`ssh -i /home/user/.ssh/user.privat_key user@10.18.2.144 'df -h' | grep /mnt/dat44/fol | awk '{print $3}'`
 folderspacedb=`du -h -s /mnt/data/backups/ | awk '{print $1}`


Иначе это просто набор символов.
Bootmen ☆☆☆
()
Ответ на: комментарий от Bootmen

В awk замыкающую кавычку пропустили. Так будет:

folderspacedb=`du -h -s /mnt/data/backups/ | awk '{print $1}'`

Bootmen ☆☆☆
()

определённой папки

С мамкой поиграйся, вендузятник.

anonymous
()

Возьми ansible. Проще будет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.