Bash scripting sorunu

Başlatan tokuchi, 04 Mayıs 2017 - 12:31:08

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

tokuchi

#!/bin/bash

threshold="10"

i=2

result=df -kh |grep -v "Filesystem" | awk '{ print $5 }' | sed 's/%//g'

for percent in $result; do

if ((percent > threshold))
then

partition=df -kh | head -$i | tail -1| awk '{print $1}'

echo "$partition at $(hostname -f) is ${percent}% full" >> file.txt

fi

let i=$i+1

done


bu scripti terminal den calistirinca istenilen sonucu veriyor ancak crontab'te her dakika calisacak sekilde ayarlardigimda yanlis bir sonuc uretiyor threshold isimli bos bir dosya olusturuyor. Nasil duzeltebilirim?

mhmtkrktr

#1
if ((percent > threshold))
percent ve threshold birer değişken. Kapitalist sistemde, başında Amerikan doları olmadan çalışmazlar :-)
Arasında ki >  işareti sebebiyle değeri olmayan percent değerini threshold adında bir dosya oluşturup içine yazıyordur.

grep -v "Filesystem" Tavsiye olarak, mümkün olduğunca sistem diline göre değişkenlik sağlayacak kelimeleri kullanma. (Filesystem)

İlave olarak, crontab 'a farklı bir sebeple ihtiyacın var mı bilmiyorum. Aynı düzenlemeyi zaman döngüsüylede yapabilirsin.
Örnek olarak şunu hazırladım. Sistem başlangıcına ataman yeterli. Crontab gereksinimin varsa, while döngüsünü iptal eder, fonksiyon içinden çıkartırsın.

#!/bin/bash
time=1m
FuncDiskStatus() {
while read -r line; do
  local percent=`echo $line|cut -d % -f1|awk '{print $5}'`
    if [[ $percent -gt 10 ]]; then
    echo "$(echo $line|cut -d' ' -f1) at $(hostname -f) is \
    ${percent}% full" >> file.txt
    fi
done <<< $(df -h |grep '[0-9]%')
}
while :; do
  FuncDiskStatus
  sleep $time
done


İlave:
for percent in $result; do
$result değerini tırnak işareti arasına almazsan tüm çıktıyı tek satır olarak değerlendirecektir. ( "$result" )
Bir tavsiye daha, df gibi sistem taraması içeren komutları gerekirse tek bir değişkene atayarak, mümkün olduğunca az kullanmaya çalış. Bu betiğin daha hızlı işlemesini sağlar.