# آزمون‌های فصل ۳ — اسکریپت‌نویسی Bash در این فایل دو آزمون چهارگزینه‌ای ۱۰ سؤالی برای فصل ۳ (و کمی از مباحث انتهای فصل ۲) آورده شده است. سطح سؤالات متوسط رو به بالا است. --- ## آزمون ۱ — Bash مقدماتی و منطق اسکریپت **سؤال ۱)** هدف اصلی خط زیر در ابتدای اسکریپت Bash چیست؟ `#!/bin/bash` الف) تبدیل اسکریپت به فایل باینری ب) مشخص‌کردن مفسر (interpreter) برای اجرای اسکریپت ج) دادن مجوز اجرایی به فایل د) تغییر دایرکتوری فعلی هنگام اجرا **پاسخ صحیح: ب** **سؤال ۲)** کدام دستور تعریف متغیر در Bash از نظر نگارش درست است؟ الف) `USER NAME="student"` ب) `USER_NAME = "student"` ج) `USER_NAME="student"` د) `USER_NAME: "student"` **پاسخ صحیح: ج** **سؤال ۳)** در اسکریپت زیر چه اتفاقی می‌افتد؟ ```bash #!/bin/bash read -p "Name: " NAME echo "Hello $NAME!" ``` الف) بدون نمایش چیزی از کاربر ورودی می‌گیرد ب) فقط متن `"Name: "` را چاپ می‌کند و تمام می‌شود ج) یک نام از کاربر می‌گیرد و سپس او را با آن نام سلام می‌کند د) همیشه `"Hello $NAME!"` را بدون گرفتن ورودی چاپ می‌کند **پاسخ صحیح: ج** **سؤال ۴)** در یک اسکریپت Bash، متغیر `$1` معمولاً چه چیزی را نگه می‌دارد؟ الف) نام اسکریپت ب) تعداد آرگومان‌های خط فرمان ج) اولین آرگومان خط فرمان هنگام اجرای اسکریپت د) خط جاری در حال اجرا در اسکریپت **پاسخ صحیح: ج** **سؤال ۵)** اسکریپت زیر چه زمانی پیام خطا را چاپ می‌کند؟ ```bash #!/bin/bash AGE="$1" if [ "$AGE" -gt 18 ]; then echo "Adult" elif [ "$AGE" -eq 18 ]; then echo "Exactly 18" else echo "Minor" fi ``` اگر این اسکریپت با دستور `bash script.sh 18` اجرا شود، خروجی چیست؟ الف) `Adult` ب) `Exactly 18` ج) `Minor` د) هیچ‌چیز چاپ نمی‌شود **پاسخ صحیح: ب** **سؤال ۶)** فرض کنید اسکریپت زیر را داریم: ```bash #!/bin/bash if [ "$1" = "start" ] || [ "$1" = "stop" ]; then echo "OK" else echo "Invalid" fi ``` کدام یک از دستورات زیر خروجی `Invalid` تولید می‌کند؟ الف) `bash script.sh start` ب) `bash script.sh stop` ج) `bash script.sh START` د) `bash script.sh start stop` **پاسخ صحیح: ج** **سؤال ۷)** خروجی اسکریپت زیر چیست؟ ```bash #!/bin/bash for N in 1 2 3 do if [ "$N" -eq 2 ]; then continue fi echo "N=$N" done ``` الف) `N=1` ب) `N=2` `N=3` ج) `N=1` `N=3` د) `N=1` `N=2` `N=3` **پاسخ صحیح: ج** **سؤال ۸)** اسکریپت زیر چند خط روی صفحه چاپ می‌کند؟ (بدون درنظر گرفتن خط فرمان `read`) ```bash #!/bin/bash COUNT=1 while [ "$COUNT" -le 3 ] do echo "Loop $COUNT" COUNT=$((COUNT + 1)) done ``` الف) هیچ خطی ب) ۲ خط ج) ۳ خط د) ۴ خط **پاسخ صحیح: ج** **سؤال ۹)** کدام الگوی وایلدکارد فقط فایل‌هایی مثل `file_01.txt` و `file_12.txt` را می‌گیرد و *فایل `file_100.txt`* را شامل نمی‌شود؟ الف) `file_*.txt` ب) `file_?.txt` ج) `file_??.txt` د) `file_[0-9]*.txt` **پاسخ صحیح: ج** **سؤال ۱۰)** دستور زیر چه کاری انجام می‌دهد؟ ```bash tar -czf backup.tar.gz mydir/ ``` الف) فایل `backup.tar.gz` را استخراج می‌کند ب) پوشهٔ `mydir/` را فشرده و در `backup.tar.gz` آرشیو می‌کند ج) فقط ساختار دایرکتوری `mydir/` را بدون فایل‌ها ذخیره می‌کند د) محتویات `backup.tar.gz` را روی `mydir/` بازنویسی می‌کند **پاسخ صحیح: ب** ### پاسخ‌نامه آزمون ۱ - ۱) ب - ۲) ج - ۳) ج - ۴) ج - ۵) ب - ۶) ج - ۷) ج - ۸) ج - ۹) ج - ۱۰) ب --- ## آزمون ۲ — حلقه‌ها، case، توابع، وایلدکارد، فشرده‌سازی و awk **سؤال ۱)** الگوی زیر در شل کدام نوع فایل‌ها را انتخاب می‌کند؟ `*.[ch]` الف) همهٔ فایل‌هایی که نامشان فقط یک کاراکتر است ب) همهٔ فایل‌هایی که پسوندشان `c.` یا `h.` است ج) همهٔ فایل‌هایی که پسوندشان `c` یا `h` است (مثل `main.c`, `util.h`) د) هیچ فایلی، چون الگو نادرست است **پاسخ صحیح: ج** **سؤال ۲)** امن‌ترین روال برای حذف فایل‌های موقت با الگوی `*.tmp` کدام است؟ الف) مستقیم: `rm *.tmp` ب) `rm -f *.tmp` ج) اول `ls *.tmp` برای بررسی، سپس `rm -i *.tmp` برای حذف تعاملی د) `rm -rf / *.tmp` **پاسخ صحیح: ج** **سؤال ۳)** دستور زیر چه کاری می‌کند؟ ```bash tar -tzf backup.tar.gz ``` الف) آرشیو را فشرده می‌کند ب) آرشیو را استخراج می‌کند ج) محتویات آرشیو را *بدون استخراج* فهرست می‌کند د) آرشیو را حذف می‌کند **پاسخ صحیح: ج** **سؤال ۴)** کدام گزینه، یک آرشیو zip تکرارشونده از پوشهٔ `project/` می‌سازد؟ الف) `zip project project/` ب) `zip -r project.zip project/` ج) `tar -czf project.zip project/` د) `zip -x project.zip project/` **پاسخ صحیح: ب** **سؤال ۵)** کدام دستور awk ستون اول و سوم یک فایل CSV را که با کاما جدا شده چاپ می‌کند؟ الف) `awk '{print $1, $3}' data.csv` ب) `awk -F, '{print $1, $3}' data.csv` ج) `awk -F, '{print $0}' data.csv` د) `awk -F: '{print $1, $3}' data.csv` **پاسخ صحیح: ب** **سؤال ۶)** برای محاسبهٔ مجموع اعداد ستون دوم در فایل `prices.txt` با awk کدام دستور مناسب است؟ الف) `awk '{print $2}' prices.txt` ب) `awk '{sum += $2} END {print sum}' prices.txt` ج) `awk -F, '{sum += $1} END {print sum}' prices.txt` د) `awk 'END {print $2}' prices.txt` **پاسخ صحیح: ب** **سؤال ۷)** اسکریپت زیر را در نظر بگیرید: ```bash #!/bin/bash read -p "Mode (start/stop): " MODE case "$MODE" in start) echo "Starting..." ;; stop) echo "Stopping..." ;; *) echo "Unknown mode" ;; esac ``` اگر کاربر مقدار `START` (با حروف بزرگ) را وارد کند، خروجی چیست؟ الف) `Starting...` ب) `Stopping...` ج) `Unknown mode` د) هیچ‌چیز چاپ نمی‌شود **پاسخ صحیح: ج** **سؤال ۸)** در اسکریپت زیر خروجی چیست؟ ```bash #!/bin/bash count=0 inc() { count=$((count + 1)) } inc inc echo "$count" ``` الف) هیچ خروجی‌ای تولید نمی‌شود ب) `1` ج) `2` د) خطای نحوی رخ می‌دهد **پاسخ صحیح: ج** **سؤال ۹)** خروجی اسکریپت زیر چیست؟ ```bash #!/bin/bash for N in 1 2 3 4 do if [ "$N" -gt 2 ]; then break fi echo "$N" done ``` الف) فقط `1` ب) `1` `2` ج) `1` `2` `3` د) هیچ‌چیز چاپ نمی‌شود **پاسخ صحیح: ب** **سؤال ۱۰)** اسکریپت زیر را در نظر بگیرید: ```bash #!/bin/bash for ARG in "$@" do echo "[$ARG]" done ``` اگر این اسکریپت با دستور زیر اجرا شود: `bash script.sh "A B" C` خروجی چیست؟ الف) `[A]` `[B]` `[C]` ب) `[A B C]` ج) `[A B]` `[C]` د) هیچ‌چیز چاپ نمی‌شود **پاسخ صحیح: ج** ### پاسخ‌نامه آزمون ۲ - ۱) ج - ۲) ج - ۳) ج - ۴) ب - ۵) ب - ۶) ب - ۷) ج - ۸) ج - ۹) ب - ۱۰) ج