كيفية استخدام أمر read في نظام لينكس
أحيانًا، أثناء التفاعل مع نظام لينكس الخاص بك، قد تحتاج إلى مطالبة المستخدمين بالإدخال أو قراءة الإدخال من الملفات، أو حتى تعيين مهلات. يمكنك إجراء هذه المهام والعديد من المهام الأخرى باستخدام أمر read
وخياراته المتنوعة.
ما هو أمر `read`
في لينكس، يمكنك استخدام أمر read
لالتقاط إدخال المستخدم أو قراءة سطر من المدخلات القياسية (stdin). يقوم هذا الأمر بقراءة عدد البايتات من موصل الملف المحدد وتخزينها في المخزن المؤقت. بعد ذلك، يعيد عدد البايتات التي تم قراءتها، صفر، أو خطأ.
على سبيل المثال، إذا كان الرقم أو العدد هو صفر، فهذا يشير إلى نهاية الملف. ولكن عند النجاح، يعيد عدد البايتات التي تم قراءتها. إذا واجه أمر read
بعض الأخطاء، فإنه يعيد -1.
خيارات أمر `read`
أمر read
في Bash يحتوي على العديد من الخيارات للتحكم في إدخال المستخدم. بعض الخيارات لا تحتاج إلى معلمات إضافية، بينما يحتاج البعض الآخر.
الخيارات | الوصف |
---|---|
-a <array> |
يخزن الإدخال كمصفوفة بدلاً من متغيرات منفصلة. |
-s |
يعمل بصمت، مما يعني عدم عرض الإدخال على الطرفية. |
-e |
يتيح دعم مكتبة readline، مما يسمح بقراءة السطر. |
-i <prefix> |
يوفر قيمة إدخال أولية تظهر عند المطالبة باستخدام readline. |
-p <prompt> |
يعرض المطالبة المحددة قبل قراءة الإدخال. |
-u <file descriptor> |
يقرأ من موصل ملف محدد بدلاً من المدخلات القياسية (stdin). |
-d <delimiter> |
يتيح لك تحديد فاصل سطر الإدخال بدلاً من حرف السطر الجديد الافتراضي. |
-t <time> |
يحدد فترة المهلة للإدخال؛ إذا لم يتم تلقي الإدخال خلال هذا الوقت، يعيد read فشلًا. |
-r |
عند تحديده، لا يتم التعامل مع الشرطة المائلة كحروف هروب. |
-n <number> |
يقرأ فقط عدد الأحرف المحددة. |
كيفية قراءة الإدخال باستخدام أمر `read`
أبسط طريقة لاستخدام أمر read
هي استخدامه بدون أي معلمات أو خيارات. عند تنفيذ أمر read
بمفرده، سيطلب منك تقديم الإدخال الذي تريد قراءته. بعد تقديم الإدخال، سيخرج ويخزنه في متغيره الافتراضي المسمى REPLY
.
read
الآن، بعد تقديم الإدخال، دعنا نعرضه باستخدام أمر echo
:
echo $REPLY
أثناء قراءة قيمة الإدخال، يمكنك أيضًا تخزينها في متغير محدد. على سبيل المثال، لتخزين النتيجة في متغير، اكتب أمر read
متبوعًا باسم المتغير:
read variable1
الآن، لعرض النتيجة، تحتاج إلى استخدام أمر echo
مع المتغير الذي يخزن قيمتك:
echo $variable1
قراءة قيم متعددة
لا توجد طريقة مباشرة لقراءة قيم متعددة باستخدام أمر read
. ومع ذلك، يمكنك تقسيم الجملة الواحدة إلى كلمات متعددة وتخزينها في متغيرات مختلفة.
read variable1 variable2 variable3
هنا، تخزن الكلمة الأولى من الجملة في المتغير الأول، والكلمة الثانية في المتغير الثاني، وجميع الكلمات المتبقية في المتغير الأخير المقدم.
دعنا نعرض النتيجة باستخدام الأمر:
echo $variable1 $variable2 $variable3
قراءة من ملف
بينما أمر read
مخصص بشكل أساسي للإدخال من المستخدم، يمكنك أيضًا استخدامه لقراءة الأسطر من ملف. للقيام بذلك، استخدم حلقة while
، وأمر echo
، وأمر read
متبوعًا باسم متغير معين:
while read line; do
echo "$line"
done < samplefile.txt
هنا، تقرأ حلقة while
كل سطر من “samplefile.txt” وتسجله في المتغير line
. بعد قراءة جميع الأسطر من الملف، يعرض أمر echo
قيمة السطر.
قراءة الإدخال في حلقة
يمكنك أيضًا التقاط إدخال المستخدم في تسلسل متكرر باستخدام أمر read
مع حلقة while
. هذا مفيد عندما تريد جمع مدخلات متعددة أو الاستمرار حتى يتم استيفاء شرط معين.
while read line; do
echo "السطر: $line"
done
علاوة على ذلك، تستمر الحلقة حتى تتلقى إشارة نهاية الملف (EOF)، عادةً عن طريق الضغط على Ctrl + D.
كيفية مطالبة الإدخال باستخدام أمر `read`
يمكنك أيضًا إنشاء مطالبات تفاعلية سيتم عرضها قبل إدخال المستخدم. يمكنك تحقيق ذلك باستخدام الخيار -p
مع أمر read
.
read -p "أدخل اسمك: " name
تحديد طول إدخال المستخدم أثناء القراءة
هل ترغب في التحكم في ما يمكن للمستخدمين إدخاله؟ استخدم الخيار -n
مع read
لتحديد طول الأحرف المرغوب فيه. على سبيل المثال، إذا كنت تريد التقاط أول 9 أحرف من إدخال المستخدم، استخدم الأمر التالي:
read -n 9 variable
بعد تنفيذ الأمر أعلاه، سيسمح لك بإدخال تسعة أحرف فقط. تحديد إدخال المستخدم أثناء القراءة سيقضي على الحاجة إلى فاصل ولن يقسم الإدخال إلى كلمات.
فصل الحقول باستخدام IFS
يمكنك استخدام متغير IFS
(Internal Field Separator) مع أمر read
لتحديد كيفية تقسيم الإدخال إلى حقول منفصلة. بشكل افتراضي، يستخدم IFS
الأحرف الفارغة (الجدول، السطر الجديد، والمسافة) كفواصل حقول. ومع ذلك، يمكنك تخصيص IFS
لتلبية احتياجاتك.
على سبيل المثال، يمكنك تحديد قيمة النقطتين (:) كفاصل:
IFS=':' read name password
ثم يمكنك عرض النتيجة باستخدام:
echo "اسم المستخدم: $name، كلمة المرور: $password"
تعيين مهلة على أمر `read`
يمكنك أيضًا تكوين مهلة لأمر read
باستخدام الخيار -t
. هذا مفيد إذا كنت تريد التأكد من أن السكربت لا يعتمد على إدخال المستخدم لفترة طويلة.
لنحدد مهلة قدرها 10 ثوانٍ باستخدام الخيار -t
:
read -t 10 -p "أدخل اسمك (مهلة 10 ثوانٍ): " name
إذا لم يكتب المستخدم أي شيء خلال 10 ثوانٍ، يستمر السكربت في التنفيذ.
كيفية إخفاء إدخال المستخدم
في بعض الأحيان، قد ترغب في إخفاء إدخال المستخدم، مثل عند إدخال معلومات حساسة مثل كلمات المرور. يمكنك تحقيق ذلك باستخدام الخيار -s
لأمر read
:
read -s -p "أدخل كلمة المرور: " password
بعد تخزين كلمة المرور في المتغير المحدد، يمكنك عرضها في الطرفية باستخدام الأمر:
echo -e "\nكلمة المرور: $password"
هنا، يتيح الخيار -e
تفسير تسلسل الهروب، و\n
يضيف سطرًا جديدًا قبل العرض.
إرسال التعليق
يجب أنت تكون مسجل الدخول لتضيف تعليقاً.