ایستگاه های کاری آنلاین OnWorks Linux و Windows

لوگو

میزبانی آنلاین رایگان برای ایستگاه های کاری

<قبلی | فهرست | بعدی>

برنامه نویسی دفاعی

بررسی مفروضات هنگام برنامه نویسی مهم است. این به معنای ارزیابی دقیق وضعیت خروج برنامه ها و دستوراتی است که توسط یک اسکریپت استفاده می شود. در اینجا یک مثال، بر اساس یک داستان واقعی است. یک مدیر سیستم تاسف بار یک اسکریپت برای انجام یک کار تعمیر و نگهداری روی یک سرور مهم نوشت. اسکریپت حاوی دو خط کد زیر بود:


سی دی $dir_name rm *

سی دی $dir_name rm *


هیچ مشکلی با این دو خط وجود ندارد، تا زمانی که فهرست نامگذاری شده در متغیر، dir_name، وجود دارد. اما اگر این کار را نکند چه اتفاقی می افتد؟ در آن صورت، cd دستور از کار می افتد و اسکریپت به خط بعدی ادامه می دهد و فایل های موجود در فهرست کاری فعلی را حذف می کند. اصلاً نتیجه مطلوب نیست! مدیر بدبخت بخش مهمی از سرور را به دلیل این تصمیم طراحی نابود کرد.

بیایید به چند روش برای بهبود این طراحی نگاه کنیم. اول، ممکن است عاقلانه باشد که اجرای آن را انجام دهیم rm مشروط به موفقیت cd:


سی دی $dir_name && rm *

سی دی $dir_name && rm *


به این ترتیب، اگر cd فرمان از کار می افتد، rm فرمان اجرا نمی شود این بهتر است، اما همچنان این احتمال را باز می‌گذارد که متغیر، dir_nameتنظیم نشده یا خالی است، که منجر به حذف فایل‌های فهرست اصلی کاربر می‌شود. همچنین می توان با بررسی برای مشاهده آن از این امر جلوگیری کرد dir_name در واقع شامل نام یک دایرکتوری موجود است:



[[ -d $dir_name ]] && cd $dir_name && rm *

[[ -d $dir_name ]] && cd $dir_name && rm *


اغلب، بهتر است که منطق را برای خاتمه دادن به اسکریپت و گزارش یک خطا در شرایطی مانند حالت بالا در نظر بگیرید:



# اگر [[ ! -d "$dir_name" ]]; سپس

echo "هیچ دایرکتوری وجود ندارد: '$dir_name'" >&2 خروج 1

fi

اگر ! سی دی $dir_name; سپس

echo "Cd to '$dir_name' نمی‌تواند" >&2 خروج 1

fi

اگر ! rm *; سپس

echo "حذف فایل انجام نشد. نتایج را بررسی کنید" >&2 خروج 1

fi

# اگر [[ ! -d "$dir_name" ]]; سپس

echo "هیچ دایرکتوری وجود ندارد: '$dir_name'" >&2 خروج 1

fi

اگر ! سی دی $dir_name; سپس

echo "Cd to '$dir_name' نمی‌تواند" >&2 خروج 1

fi

اگر ! rm *; سپس

echo "حذف فایل انجام نشد. نتایج را بررسی کنید" >&2 خروج 1

fi


در اینجا، هم نام را بررسی می کنیم تا ببینیم که نام یک فهرست موجود است و هم نام موفقیت آمیز

خطاهای منطقی


cess از cd فرمان اگر هر کدام از کار بیفتد، یک پیغام خطای توصیفی به خطای استاندارد ارسال می‌شود و اسکریپت با وضعیت خروج یک خاتمه می‌یابد تا نشان دهنده خرابی باشد.


برترین سیستم عامل Cloud Computing در OnWorks: