پرش به محتویات

آزمون‌های فصل ۳ — اسکریپت‌نویسی Bash

در این فایل دو آزمون چهارگزینه‌ای ۱۰ سؤالی برای فصل ۳ (و کمی از مباحث انتهای فصل ۲) آورده شده است. سطح سؤالات متوسط رو به بالا است.


آزمون ۱ — Bash مقدماتی و منطق اسکریپت

سؤال ۱) هدف اصلی خط زیر در ابتدای اسکریپت Bash چیست؟
#!/bin/bash
الف) تبدیل اسکریپت به فایل باینری
ب) مشخص‌کردن مفسر (interpreter) برای اجرای اسکریپت
ج) دادن مجوز اجرایی به فایل
د) تغییر دایرکتوری فعلی هنگام اجرا
پاسخ صحیح: ب

سؤال ۲) کدام دستور تعریف متغیر در Bash از نظر نگارش درست است؟
الف) USER NAME="student"
ب) USER_NAME = "student"
ج) USER_NAME="student"
د) USER_NAME: "student"
پاسخ صحیح: ج

سؤال ۳) در اسکریپت زیر چه اتفاقی می‌افتد؟

#!/bin/bash
read -p "Name: " NAME
echo "Hello $NAME!"
الف) بدون نمایش چیزی از کاربر ورودی می‌گیرد
ب) فقط متن "Name: " را چاپ می‌کند و تمام می‌شود
ج) یک نام از کاربر می‌گیرد و سپس او را با آن نام سلام می‌کند
د) همیشه "Hello $NAME!" را بدون گرفتن ورودی چاپ می‌کند
پاسخ صحیح: ج

سؤال ۴) در یک اسکریپت Bash، متغیر $1 معمولاً چه چیزی را نگه می‌دارد؟
الف) نام اسکریپت
ب) تعداد آرگومان‌های خط فرمان
ج) اولین آرگومان خط فرمان هنگام اجرای اسکریپت
د) خط جاری در حال اجرا در اسکریپت
پاسخ صحیح: ج

سؤال ۵) اسکریپت زیر چه زمانی پیام خطا را چاپ می‌کند؟

#!/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
د) هیچ‌چیز چاپ نمی‌شود
پاسخ صحیح: ب

سؤال ۶) فرض کنید اسکریپت زیر را داریم:

#!/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
پاسخ صحیح: ج

سؤال ۷) خروجی اسکریپت زیر چیست؟

#!/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)

#!/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
پاسخ صحیح: ج

سؤال ۱۰) دستور زیر چه کاری انجام می‌دهد؟

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
پاسخ صحیح: ج

سؤال ۳) دستور زیر چه کاری می‌کند؟

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
پاسخ صحیح: ب

سؤال ۷) اسکریپت زیر را در نظر بگیرید:

#!/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
د) هیچ‌چیز چاپ نمی‌شود
پاسخ صحیح: ج

سؤال ۸) در اسکریپت زیر خروجی چیست؟

#!/bin/bash
count=0
inc() {
  count=$((count + 1))
}
inc
inc
echo "$count"
الف) هیچ خروجی‌ای تولید نمی‌شود
ب) 1
ج) 2
د) خطای نحوی رخ می‌دهد
پاسخ صحیح: ج

سؤال ۹) خروجی اسکریپت زیر چیست؟

#!/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

د) هیچ‌چیز چاپ نمی‌شود
پاسخ صحیح: ب

سؤال ۱۰) اسکریپت زیر را در نظر بگیرید:

#!/bin/bash
for ARG in "$@"
do
  echo "[$ARG]"
done
اگر این اسکریپت با دستور زیر اجرا شود:
bash script.sh "A B" C
خروجی چیست؟
الف)
[A]
[B]
[C]

ب)
[A B C]

ج)
[A B]
[C]

د) هیچ‌چیز چاپ نمی‌شود
پاسخ صحیح: ج

پاسخ‌نامه آزمون ۲

  • ۱) ج
  • ۲) ج
  • ۳) ج
  • ۴) ب
  • ۵) ب
  • ۶) ب
  • ۷) ج
  • ۸) ج
  • ۹) ب
  • ۱۰) ج