- Created a new sitemap.xml file for better SEO. - Added a compressed version of the sitemap as sitemap.xml.gz. - Introduced extra.css for custom styles, including Persian font support (IRANSansX). - Defined font-face rules for regular and bold styles of IRANSansX. - Implemented various text styles and layout adjustments for better readability. - Enhanced Mermaid diagram styles to support Persian text rendering.
3.7 KiB
تمرین ۸: یادداشتِ مریخی
صورت سؤال
در یک آزمایشگاه فضایی، فقط یک فایل به نام mars.txt داریم و چند دستور بهترتیب اجرا میشود. شما باید با یک اسکریپت Bash این دستورها را از ورودی بخوانید و در پایان، محتوای نهایی فایل را چاپ کنید.
هدف تمرین این است که از چیزهایی که تا اینجا در فصل ۳ یاد گرفتهاید استفاده کنید: read، متغیرها، if و حلقهها (بهخصوص while یا for).
رفتار دستورها:
touchاگر فایل وجود نداشته باشد، آن را ایجاد میکند و خالی است؛ اگر فایل از قبل وجود داشته باشد، هیچ تغییری در محتوا ایجاد نمیشود.> sمحتوای فایل را کامل بازنویسی میکند و بعد از آن فایل دقیقاً فقط شامل همان یک خطsاست. (اگر فایل وجود نداشته باشد، این دستور آن را ایجاد میکند.)>> sیک خطsرا به انتهای فایل اضافه میکند. (اگر فایل وجود نداشته باشد، این دستور آن را ایجاد میکند و همان یک خط را داخلش میگذارد.)
هدف این است که بعد از اجرای همهٔ دستورها، محتوای نهایی mars.txt را چاپ کنید.
اگر در پایان فایل وجود نداشت یا خالی بود، باید دقیقاً EMPTY چاپ شود.
نکته: لازم نیست واقعاً روی سیستم فایل بسازید؛ میتوانید فقط «محتوا» را در یک متغیر نگه دارید و شبیهسازی کنید.
ورودی
در خط اول عدد q تعداد دستورها آمده است.
در q خط بعدی، هر خط یکی از حالتهای زیر است:
touch> s(یک متنsکه همان یک خط است)>> s(یک متنsکه همان یک خط است)
s میتواند شامل فاصله باشد و تا انتهای خط ادامه دارد. (اما با فاصله شروع نمیشود.)
خروجی
محتوای نهایی mars.txt را دقیقاً همانطور که هست چاپ کنید (هر خط جداگانه).
اگر فایل وجود نداشت یا خالی بود، فقط EMPTY چاپ کنید.
محدودیتها
1 ≤ q ≤ 200- طول
sحداقل 1 و حداکثر 100 کاراکتر است.
راهنمایی (چند تریک کوچک)
- بهجای پارسکردن دستی، میتوانید هر خط را با
read -r OP TEXTبخوانید؛ در این حالتOPیکی ازtouchیا>یا>>میشود وTEXTبقیهٔ خط خواهد بود (حتی اگر وسطش فاصله داشته باشد). - با یک متغیر مثل
CONTENTمحتوای فایل را نگه دارید:- برای
> sکافی استCONTENTرا برابرsکنید. - برای
>> sاگرCONTENTخالی نبود، اول یک خط جدید اضافه کنید و بعدsرا بچسبانید.
- برای
- یک متغیر دیگر مثل
EXISTSهم داشته باشید تا تشخیص دهید فایل اصلاً ساخته شده یا نه. - حلقهٔ
whileبا شمارنده (i=$((i+1))) یا یک حلقهٔforمیتواندqدستور را پردازش کند.
نمونه
ورودی نمونه
6
touch
> Hello Mars
>> Day 2
touch
>> Day 3
touch
خروجی نمونه
Hello Mars
Day 2
Day 3