# درسنامه ۳-۴: گرفتن ورودی از کاربر و آرگومان‌ها در این درس یاد می‌گیریم اسکریپت فقط با مقدارهای ثابت کار نکند، بلکه از کاربر ورودی بگیرد یا هنگام اجرا از خط فرمان آرگومان دریافت کند. ## گرفتن ورودی تعاملی با read برای گرفتن ورودی از کاربر از دستور `read` استفاده می‌کنیم. شکل ساده: ```bash read NAME echo "Hello $NAME!" ``` در این حالت، Bash منتظر می‌ماند تا کاربر چیزی بنویسد و Enter بزند؛ مقدار وارد شده در متغیر `NAME` ذخیره می‌شود. ## نمایش پیام راهنما با -p معمولا قبل از گرفتن ورودی، پیامی به کاربر نشان می‌دهیم تا بداند چه باید بنویسد. برای این کار از گزینهٔ `-p` استفاده می‌کنیم: ```bash #!/bin/bash read -p "اسم شما چیه؟ " NAME echo "Welcome, $NAME!" ``` هنگام اجرا: ```bash bash ask_name.sh ``` اسکریپت پیام را نمایش می‌دهد، منتظر ورودی می‌ماند و سپس پاسخ را در خروجی استفاده می‌کند. ## استفاده از چند ورودی می‌توانیم چند بار `read` صدا بزنیم یا چند متغیر را هم‌زمان پر کنیم: ```bash #!/bin/bash read -p "اسم شما؟ " NAME read -p "شهری که توش زندگی می‌کنید؟ " CITY echo "Hello $NAME from $CITY!" ``` یا به صورت یک‌جا: ```bash read -p "اسم و نام خانوادگی؟ " FIRST LAST echo "Hello $FIRST $LAST" ``` ## آرگومان‌های خط فرمان ($1, $2, ...) علاوه بر گرفتن ورودی هنگام اجرا، می‌توانیم مقدارها را به صورت «آرگومان» هنگام صدا زدن اسکریپت بفرستیم. - `"$1"` اولین آرگومان - `"$2"` دومین آرگومان و به همین ترتیب - `"$@"` همهٔ آرگومان‌ها مثال: ```bash #!/bin/bash NAME="$1" echo "Hello $NAME!" ``` اگر این فایل را `hello_arg.sh` بنامید، هنگام اجرا: ```bash bash hello_arg.sh Ali ``` خروجی: ```bash سلام Ali! ``` اگر آرگومانی نفرستید، متغیر `NAME` خالی خواهد بود. ## ترکیب read و آرگومان‌ها یک الگوی سادهٔ رایج: - اگر کاربر هنگام اجرا آرگومان فرستاد، از آن استفاده کن. - اگر نه، از او سوال بپرس. نمونهٔ ساده: ```bash #!/bin/bash if [ -z "$1" ]; then read -p "اسم شما چیه؟ " NAME else NAME="$1" fi echo "Hello $NAME!" ``` در این مثال، `-z` یعنی «رشته خالی است». ## تمرین کوتاه - اسکریپتی بنویسید که: - اگر هنگام اجرا نام کاربر به عنوان آرگومان داده شده بود، مستقیم از آن استفاده کند. - اگر آرگومان خالی بود، با `read -p` نام را از کاربر بپرسد. - نسخه‌ای دیگر بنویسید که هم نام و هم شهر را از کاربر بگیرد و در یک جمله نشان دهد. در درس بعد، از همین ورودی‌ها برای تصمیم‌گیری با استفاده از شرط‌ها (`if`) استفاده می‌کنیم.