ত্রুটিটি -geসংখ্যাগত না হওয়ার একটি যুক্তির কারণে । যেহেতু $ALERTসর্বদা সংখ্যাযুক্ত, $usepতাই অপরাধী হতে হবে। আপনি আউটপুটকে পার্স করার পদ্ধতিতে বেশ কয়েকটি সমস্যা রয়েছে dhযার ফলস্বরূপ $usepসংখ্যাসূচক নয়।
ফাইল সিস্টেমগুলির দৈর্ঘ্যের উপর নির্ভর করে dhএর আউটপুটটিকে বিভিন্ন লাইনে বিভক্ত করতে পারে। আংশিক লাইনগুলি আপনার ফিল্টারে ধরা পড়বে এবং ফলস্বরূপ ডেটা তৈরি করবে। এই আচরণটি এড়াতে এবং এর থেকে বিশ্লেষণযোগ্য আউটপুট পেতে dh, -Pবিকল্পটি পাস করুন ।
এছাড়াও dfএকটি শিরোনাম রেখা মুদ্রণ করে যার ফলে আবার অযৌক্তিক ডেটা হবে।
আপনার ফিল্টারটি বেশ জটিল। আমি awk এর একক পাস ব্যবহার করতে হবে। এই বিষয়টির জন্য, আপনি awk এর ভিতরে শতাংশের উপর ফিল্টারিং করতে পারেন (তবে আমি এটি নিম্নলিখিত স্ক্রিপ্টে করিনি)।
df -H | awk '
NR == 1 {next}
$1 == "abc:/xyz/pqr" {next}
$1 == "tmpfs" {next}
$1 == "/dev/cdrom" {next}
1 {sub(/%/,"",$5); print $1, $5}
' | while read filesystem percentage; do
if [ "$percentage" -ge "$ALERT" ]; then
mail -s "Alert: Almost out of disk space ($usep%) on $filesystem" "$ADMIN"
fi
done
NR==1প্রথম লাইনের সাথে মেলে, তাই NR==1 {next}প্রথম লাইনটি এড়িয়ে যায়। পরবর্তী কয়েকটি লাইনগুলি কিছু ফাইল সিস্টেমগুলি বাদ দেয় (নোট করুন যে আপনার বিবরণটি আপনাকে আগ্রহী বলে মন্তব্য করে abc:/xyz/pqrতবে আপনার কোড এটিকে বাদ দেয়)। শেষ খালি লাইনটি %মুদ্রণের আগে শতাংশ কলাম থেকে মুছে ফেলে ।
সমস্ত ফাইল সিস্টেম সম্পর্কে একটি একক মেল প্রেরণা ভাল হবে। এবার আমি বিশ্লেষণে সব বিশ্লেষণ করছি।
message=$(df -h | awk -v ALERT="$ALERT" '
NR == 1 {next}
$1 == "abc:/xyz/pqr" {next}
$1 == "tmpfs" {next}
$1 == "/dev/cdrom" {next}
1 {sub(/%/,"",$5)}
$5 >= ALERT {printf "%s is almost full: %d%%\n", $1, $5}
')
if [ -n "$message" ]; then
echo "$message" | mail -s "Alert: Almost out of disk space" "$ADMIN"
fi