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