میخواهیم یک برنامه ساده برای مدیریت task بنویسیم.
برای این کار از شما میخواهیم یک اسکریپت Bash با نام `task.sh`
بنویسید. میتوانید با پیادهسازی بخشی از خواستهها،
بخشی از نمره را بگیرید.
# جزئیات
هر task یکی از ۳ اولویت پایین (L)، متوسط (M) و بالا (H) را دارد.
لیست task ها در فایل متنی `tasks.txt` ذخیره میشود.
ممکن است هنگام اجرا، این فایل وجود نداشته باشد. در این صورت
برنامه شما باید آن را ایجاد کند.
در هر سطر از این فایل یک task به این صورت ذخیره میشود:
ابتدا اولویت (یکی از حروف `H, M, L`)، سپس یک کاراکتر فاصله و سپس
عنوان task میآید.
شماره task ها بر اساس ترتیب آنها در این فایل مشخص میشود.
اولین سطر این فایل task شماره ۱ است.
یک مثال:
```
L Plan for summer
M Prepare presentation (important)
```
اسکریپت باید توانایی اجرای دستورات `add, list, done`
را به صورت زیر داشته باشد:
$ bash task.sh add <task_title>
$ bash task.sh list
$ bash task.sh done <task_number>
در ادامه توضیح دقیق هریک از این دستورات آمده است. در انتهای متن
نیز مثالی آمده که همه چیز را روشنتر میکند.
## دستور `add`
این دستور، task با عنوان دادهشده را به انتهای لیست اضافه میکند.
در صورتی که در انتهای عنوان، عبارت `(important)` یا `(very important)` باشد
(بدون توجه به بزرگی و کوچکی حروف)،
اولویت به ترتیب `M` و `H` خواهد بود. در غیر این صورت اولویت `L` است.
پس از اضافه کردن، باید پیام زیر در خروجی استاندارد نوشته شود:
Added task <task_number> with priority <task_priority>
## دستور `list`
این دستور لیست task ها را مانند مثالهای زیر نمایش میدهد.
```
$ bash task.sh list
1 * Plan for summer
2 ***** Fix bug #73 (very important)
3 *** Prepare presentation (Important)
```
```
$ bash task.sh list
1 * Write a letter
```
برای اولویت پایین، ۱ ستاره، برای اولویت متوسط ۳ ستاره و
برای اولویت بالا ۵ ستاره نمایش داده میشود.
به فاصلههای هر خط توجه کنید.
در صورت خالی بودن لیست، عبارت `No tasks found...`
را در خروجی استاندارد بنویسید.
## دستور `done`
این دستور task با شمارهی داده شده را حذف میکند و پیام زیر
را در خروجی استاندارد مینویسد:
Completed task <task_number>: <task_title>
## پیامهای خطا
در صورتی که دستوری به جز دستورهای بالا داده شد، برنامه باید با کد ۱
خارج شود و پیام خطای زیر را در stderr بنویسد:
[Error] Invalid command
همچنین اگر در ادامهی دستورهای `add` و `done` هیچ آرگومانی داده نشد،
برنامه باید با کد ۱ خارج شود و این پیام را در stderr بنویسد:
[Error] This command needs an argument
# مثال
نمونهای از عملکرد اسکریپت را در زیر میبینید:
```
$ bash task.sh hello
[Error] Invalid command
$ bash task.sh add
[Error] This command needs an argument
$ bash task.sh list
No tasks found...
$ bash task.sh add Plan for summer
Added task 1 with priority L
$ bash task.sh add Buy CLRS book
Added task 2 with priority L
$ bash task.sh add "Fix bug #73 (very important)"
Added task 3 with priority H
$ bash task.sh add Prepare presentation "(Important)"
Added task 4 with priority M
$ bash task.sh list
1 * Plan for summer
2 * Buy CLRS book
3 ***** Fix bug #73 (very important)
4 *** Prepare presentation (Important)
$ bash task.sh done 2
Completed task 2: Buy CLRS book
$ bash task.sh list
1 * Plan for summer
2 ***** Fix bug #73 (very important)
3 *** Prepare presentation (Important)
$ bash task.sh done 2
Completed task 2: Fix bug #73 (very important)
$ bash task.sh list
1 * Plan for summer
2 *** Prepare presentation (Important)
```
# نکات
- یک فایل Zip شامل اسکریپت `task.sh` را آپلود کنید.