في بعض الأحيان أثناء التفاعل مع نظام Linux الخاص بك، قد تحتاج إلى مطالبة المستخدمين بإدخال أو قراءة إدخال من الملفات، أو حتى ترغب في تعيين مهلة زمنية. يمكنك تنفيذ هذه المهام والعديد من المهام الأخرى باستخدام read
الأمر وخياراته المتنوعة.
ستعلمك هذه المقالة أساسيات read
الأمر وخياراته باستخدام العديد من أمثلة التعليمات البرمجية.
ما هو أمر القراءة
في لينكس، يمكنك استخدام read
أمر لالتقاط إدخال المستخدم أو قراءة سطر من الإدخال القياسي (stdin). يقرأ هذا الأمر العدد الإجمالي للبايتات من موصوف الملف المعطى ويخزنها في المخزن المؤقت. بعد ذلك، يعيد عدد البايتات المقروءة أو الصفر أو الخطأ.
على سبيل المثال، إذا كان الرقم أو العدد يساوي صفرًا، فإنه يشير إلى نهاية الملف. ولكن في حالة النجاح، فإنه يعيد عدد البايتات المقروءة. وإذا وجد أمر القراءة بعض الأخطاء، فإنه يعيد -1.
قبل استكشاف خيارات أمر القراءة، دعونا أولاً نلقي نظرة على بناء جملة أمر القراءة:
هنا، options
تحدد المعلمة علامات مختلفة تُستخدم لتعديل سلوك أمر القراءة. علاوة على ذلك، name
تحدد المعلمة اسم المتغيرات المتعددة المستخدمة لتخزين المدخلات. إذا لم يتم توفير أي أسماء، فسيتم الاحتفاظ بالمدخلات في $REPLY
متغير bash.
قراءة خيارات الأوامر
يتضمن أمر Bash read العديد من الخيارات للتحكم في إدخال المستخدم. بعض الخيارات لا تحتاج إلى معلمات إضافية، في حين أن البعض الآخر يحتاج إلى معلمات إضافية.
دعنا نستكشف بعض الخيارات التي يمكننا استخدامها مع الأمر read:
خيارات | الأوصاف |
---|---|
-a <مصفوفة> | يقوم بتخزين المدخلات كمصفوفة بدلاً من متغيرات منفصلة. |
-س | يتم التشغيل بصمت، مما يعني عدم عرض المدخلات على المحطة الطرفية |
-هـ | تمكين دعم مكتبة readline، مما يسمح بقراءة سطر الإدخال |
-i <بادئة> | يوفر قيمة إدخال أولية تظهر عند المطالبة عند استخدام readline |
-p <موجه> | يعرض المطالبة المحددة قبل قراءة الإدخال |
-u <وصف الملف> | يقرأ من موصوف ملف محدد بدلاً من الإدخال القياسي (stdin) |
-d <فاصل> | يسمح لك بتحديد فاصل سطر الإدخال بدلاً من حرف السطر الجديد الافتراضي |
-t <الوقت> | يحدد فترة زمنية محددة للإدخال؛ إذا لم يتم استلام الإدخال خلال هذه الفترة، فإن القراءة تعيد الفشل |
-ر | عند ضبطها، لا يتم التعامل مع الخطوط المائلة العكسية كأحرف إفلات |
-n <رقم> | يقرأ فقط العدد المحدد من الأحرف |
اكتب الأمر التالي لإخراج قائمة تعليمات أمر القراءة:
كيفية قراءة المدخلات باستخدام الأمر Read
الطريقة الأكثر بساطة لاستخدام أمر القراءة هي استخدامه بدون أي وسيطات أو خيارات. عندما تقوم بتنفيذ أمر القراءة بمفرده، سيطلب منك تقديم المدخلات التي تريد قراءتها. بعد تقديم المدخلات، سيخرج ويخزنها في متغيره الافتراضي المسمى REPLY
.
دعونا نأخذ هذا كمثال:
الآن، بعد تقديم المدخلات، دعنا نعرضها باستخدام أمر echo:
أثناء قراءة قيمة الإدخال، يمكنك أيضًا تخزينها في أي متغيرات محددة أخرى. على سبيل المثال، لتخزين النتيجة في متغير، اكتب read
الأمر متبوعًا باسم المتغير:
read variable1 <user_input>
الآن، لعرض النتيجة، تحتاج إلى استخدام echo
الأمر مع المتغير الذي يخزن قيمتك:
قراءة القيم المتعددة
لا توجد طريقة مباشرة لقراءة قيم متعددة باستخدام read
ومع ذلك، يمكنك تقسيم جملة الإدخال الفردية إلى كلمات متعددة وتخزينها في متغيرات مختلفة.
دعونا ننظر إلى المثال التالي:
read variable1 variable2 variable3 <user_input>
هنا، يمكنك تخزين الكلمة الأولى من الجملة في المتغير الأول، والكلمة الثانية في المتغير الثاني، وكل الكلمات المتبقية في المتغير الأخير المقدم.
دعونا نرجع الإخراج باستخدام الأمر التالي:
القراءة من ملف
على الرغم من أن الأمر read مخصص في المقام الأول لإدخال المستخدم، إلا أنه يمكنك أيضًا استخدامه لقراءة الأسطر من ملف. للقيام بذلك، ما عليك سوى استخدام while
حلقة، echo
الأمر، و read
الأمر متبوعًا باسم متغير محدد:
while read line; do echo "$line" done < samplefile.txt
هنا، while
تقوم الحلقة بقراءة كل سطر من ملف “samplefile.txt” وتسجيله في المتغير line
. بعد قراءة جميع أسطر الملف، echo
يظهر الأمر قيمة السطر.
قراءة المدخلات في حلقة
يمكنك أيضًا التقاط إدخال المستخدم في تسلسل متكرر باستخدام قراءة مع حلقة while. وهذا مفيد عندما تريد جمع إدخالات متعددة أو الاستمرار حتى يتم استيفاء شرط معين.
على سبيل المثال، دعنا نقرأ مدخلات متعددة ونعرضها أيضًا على المحطة الطرفية:
while read line; do echo "Line: $line" done
علاوة على ذلك، تستمر الحلقة حتى تتلقى إشارة نهاية الملف (EOF)، عادةً بالضغط على كنترول + د.
كيفية مطالبة الإدخال باستخدام أمر القراءة
يمكنك أيضًا إنشاء مطالبات تفاعلية يتم عرضها قبل إدخال المستخدم. يمكنك إنجاز ذلك باستخدام -p
الخيار مع أمر القراءة.
دعنا نعرض موجهًا مخصصًا ونلتقط أيضًا المدخلات:
read -p "Enter your Name: " name
الحد من إدخال المستخدم أثناء القراءة
هل تريد التحكم فيما يمكن للمستخدمين إدخاله؟ استخدم -n
خيار مع read لتحديد طول الحرف المطلوب. على سبيل المثال، إذا كنت تريد التقاط أول 4 أحرف من إدخال المستخدم، فاستخدم الأمر أدناه:
بعد تنفيذ الأمر أعلاه، سيسمح لك بإدخال تسعة أحرف فقط. سيؤدي تقييد إدخال المستخدم أثناء القراءة إلى التخلص من الحاجة إلى الفاصل كما أنه لا يقسم الإدخال إلى كلمات.
فصل حقول الإخراج باستخدام IFS
يمكنك استخدام متغير فاصل الحقل الداخلي (IFS) مع الأمر read لتحديد كيفية تقسيم الإدخال إلى حقول منفصلة. بشكل افتراضي، يستخدم IFS أحرف المسافة البيضاء (علامة التبويب والسطر الجديد والمسافة) كفواصل للحقول. ومع ذلك، يمكنك تخصيص IFS لتناسب احتياجاتك.
على سبيل المثال، يمكنك تحديد قيمة النقطتين (:) كفاصل:
IFS=':' read name password <user_input> echo "Name: $name, Password: $password"
باستخدام متغير IFS، يمكنك التقاط مدخلات أسطر متعددة من المستخدم وفصلها استنادًا إلى قيمة الفاصل.
ضبط مهلة القراءة
يمكنك أيضًا تكوين مهلة زمنية لأمر القراءة باستخدام -t
الخيار. يعد هذا مفيدًا إذا كنت تريد التأكد من أن البرنامج النصي لا يعتمد على إدخال المستخدم لفترة طويلة.
دعنا نضبط مهلة زمنية مدتها 10 ثوانٍ باستخدام -t
خيار:
read -t 10 -p "Enter your name (10 seconds timeout): " name <user_input> echo "Hello, $name!"
إذا لم يكتب المستخدم أي شيء خلال 10 ثوانٍ، يستمر تنفيذ البرنامج النصي.
كيفية إخفاء إدخال المستخدم
في بعض الأحيان، قد ترغب في إخفاء إدخال المستخدم، كما هو الحال عند إدخال معلومات حساسة مثل كلمات المرور. يمكنك تحقيق ذلك باستخدام -s
خيار أمر القراءة:
read -s -p "Enter your password: " password <user_input>
بعد تخزين كلمة المرور في المتغير المحدد، يمكنك عرضها في المحطة الطرفية باستخدام echo
يأمر:
echo -e "\nPassword: $password"
هنا، -e
يسمح العلم بتفسير تسلسلات الهروب، و \n
يضيف تسلسل الهروب سطرًا جديدًا قبل الإخراج.
تغليف
بحلول الوقت الذي تنتهي فيه من قراءة هذه المقالة والعمل على الأمثلة، ستكون على دراية باستخدام الأمر read في محطة طرفية Linux. ومع ذلك، هناك العديد من الأوامر الأخرى التي يمكنك استكشافها. واصل القراءة لمعرفة الأوامر الأساسية للمبتدئين.