ত্রুটিটি -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