English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أمر read في Linux

مجمع الأوامر في لينكس

يستخدم الأمر read في Linux لقراءة أرقام من المدخل القياسي.

يستخدم الأمر الداخلي read لقراءة سطر واحد من المدخل القياسي. يمكن استخدام هذا الأمر لقراءة إدخال لوحة المفاتيح، عندما يتم استخدامه مع توجيه النص، يمكن قراءة سطر من ملف.

النحو

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

شرح المعلمات:

  • -a يتبعه متغير، يتم اعتبار هذا المتغير كعدد، ثم يتم إسناد قيمته، بشكل افتراضي يتم التقسيم بواسطة فاصلة.
  • -d يتبعه علامة معرف، حيث يكون فقط الحرف الأول بعد ذلك ذا أهمية، كعلامة انتهاء.
  • -p يتبعه رسالة التوجيه، حيث يتم طباعة رسالة التوجيه قبل الإدخال.
  • -e يمكن استخدام ميزة إكمال الأوامر عند إدخال النص.
  • -n يتبعه عدد، يحدد طول النص المدخل، مفيد جدًا.
  • -r ي屏蔽 \، إذا لم يكن هناك هذا الخيار، فإن \ يكون محرفًا مبددًا، وإذا كان موجودًا، فإن \ يكون حرفًا عاديًا.
  • -s نمط صامت، لا يظهر الأحرف على الشاشة عند إدخالها، مثل إدخال كلمة المرور عند login.
  • -t يتبعه عدد من الثواني، يحدد وقت الانتظار لقراءة الأحرف.
  • -u يتبعه fd، لقراءة من ملف التعريف، يمكن أن يكون هذا ملف تعريف تم فتحه بواسطة exec.

مثال على الإنترنت

1- قراءة بسيطة

#!/bin/bash
#يتم التبديل إلى السطر التالي بشكل افتراضي  
echo "ادخل اسم الموقع: "  
# قراءة الإدخال من لوحة المفاتيح  
read website  
echo "اسم الموقع الذي أدخلتة هو $website"  
exit 0  # الخروج

نتيجة الاختبار هي:

إدخال اسم الموقع: 
ar.oldtoolbag.com
اسم الموقع الذي أدخلتة هو ar.oldtoolbag.com

2、يسمح معلمت -p بتخصيص إشارة التوجيه مباشرةً في سطر الأمر read.

#!/bin/bash
read -p "إدخال اسم الموقع:" website
echo "اسم الموقع الذي أدخلتة هو $website" 
exit 0

نتيجة الاختبار هي:

إدخال اسم الموقع:ar.oldtoolbag.com
اسم الموقع الذي أدخلتة هو ar.oldtoolbag.com

3、يحدد معلمت -t عدد الثواني التي ينتظرها الأمر read للإدخال، عند انتهاء العد التنازلي، يعود الأمر read بحالة خروج غير صفر.

#!/bin/bash
if read -t 5 -p "إدخال اسم الموقع:" website
then
    echo "اسم الموقع الذي أدخلتة هو $website"
else
    echo "\nآسف، لقد تجاوزت وقت الإدخال المحدد."
fi
exit 0

عند تنفيذ البرنامج، لا يتم إدخال أي شيء، ينتظر 5 ثواني:

إدخال اسم الموقع:
آسف، لقد تجاوزت وقت الإدخال المحدد

4、بالإضافة إلى وقت العد التنازلي، يمكنك أيضًا استخدام -n إعداد المعلمات read يحسب الأمر عدد الحروف المدخلة. عند الوصول إلى عدد معين من الحروف، يتم الخروج تلقائيًا ويتم تخصيص البيانات المدخلة للمتغير.

#!/bin/bash
read -n1 -p "هل ترغب في الإستمرار [Y/N]?" answer
case $answer in
Y | y)
      echo "fine ,continue";;
N | n)
      echo "ok,good bye";;
*)
     echo "error choice";;
esac
exit 0

استخدم هذا المثال -n مع القيمة 1، مما يعني أن الأمر read يتوقف عن الاستقبال عند الوصول إلى عدد معين من الحروف، ويقوم بتحويل البيانات إلى المتغير. إذا تم الضغط على حرف واحد فقط، يتم استقبال الإدخال فوراً دون الحاجة إلى الضغط على مفتاح Enter.

يغادر بعد استقبال 2 إدخال فقط:

#!/bin/bash
read -n2 -p "الرجاء إدخال رمزين عشوائيين: " any
echo "\nالرمزين الذي أدخلتها هو:$any"
exit 0

عند تنفيذ البرنامج، أدخل رمزين:

الرجاء إدخال رمزين عشوائيين: 12
الرمزين الذي أدخلتها هو:12

5、-s يستطيع الخيار read لا يتم عرض البيانات المدخلة في واجهة الأوامر (في الواقع، يتم عرض البيانات، ولكن read يضبط الأمر لون النص لتكون نفس لون الخلفية). يستخدم هذا الخيار عادةً لقراءة كلمة المرور.

#!/bin/bash
read  -s  -p "الرجاء إدخال كلمة المرور الخاصة بك:" pass
echo "\nكلمة المرور التي أدخلتها هي $pass"
exit 0

عند تنفيذ البرنامج، لا يتم عرض كلمة المرور المدخلة:

الرجاء إدخال كلمة المرور الخاصة بك:
كلمة المرور التي أدخلتها هي w3codebox

6. قراءة الملف

كل مرة يتم فيها استدعاء أمر read، يتم قراءة "سطر" نصي من الملف. عند عدم وجود سطور قابلة للقراءة في الملف، يخرج أمر read بناءً على حالة غير صفر.

كيفية نقل بيانات الملف إلى أمر read؟ باستخدام أمر cat وبإعادة توجيه الناتج مباشرة إلى أمر while الذي يحتوي على أمر read.

محتوى ملف الاختبار test.txt كالتالي:

123
456
w3codebox

كود الاختبار:

#!/bin/bash
count=1    # جملة تخصيص، بدون مسافة
cat test.txt | while read line      # إدخال مخرجات أمر cat كمدخل لأمر read, يوضع القيمة التي تلي > في line
do
   echo "السطر $count:$line"
   count=$[ $count + 1 ]          # لاحظ المسافة في الدوائر
done
echo "finish"
exit 0

نتيجة التنفيذ هي:

السطر 1:123
السطر 2:456
السطر 3:w3codebox
finish

استخدام -e المعلمات، إليك مثال على إدخال الحروف a ثم انقر Tab الضغط على المفتاح سيقوم بإخراج الأسماء ذات الصلة (الملفات موجودة في هذا الدليل):

$ read -e -p "ادخل اسم الملف:" str 
ادخل اسم الملف: a
a.out    a.py     a.pyc    abc.txt  
ادخل اسم الملف: a

مجمع الأوامر في لينكس