# تمرین ۸: یادداشتِ مریخی ## صورت سؤال در یک آزمایشگاه فضایی، فقط یک فایل به نام `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` دستور را پردازش کند. ## نمونه **ورودی نمونه** ```text 6 touch > Hello Mars >> Day 2 touch >> Day 3 touch ``` **خروجی نمونه** ```text Hello Mars Day 2 Day 3 ```