قراءة الأمر باش

Bash Read Command



اقرأ أو مت مع الأصدقاء. الأمر read لا يقل أهمية عن المعلمات الموضعية وأمر echo. وإلا كيف ستلتقط مدخلات المستخدم ، وتقبل كلمات المرور ، وتكتب الوظائف ، وتكرار الحلقات ، وتلقي نظرة خاطفة على واصفات الملفات؟ واصل القراءة.

ما يقرأ؟

القراءة هي أمر bash مدمج يقرأ محتويات السطر إلى متغير. يسمح بتقسيم الكلمات المرتبط بمتغير الصدفة الخاص IFS. يتم استخدامه بشكل أساسي لالتقاط مدخلات المستخدم ولكن يمكن استخدامه لتنفيذ الوظائف التي تأخذ المدخلات من المدخلات القياسية.







قراءة Bash تعليمات الأمر المدمج

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



سطر الأوامر



يساعد اقرأ

انتاج |





اقرأ:اقرأ [-رس] [- مجموعة] [-d حصة] [-أنا نص] [-n nchars] [-N nchars]
[-p موجه] [-t مهلة] [-u فد] [اسم ...]

اقرأ سطرًا من الإدخال القياسي والانقسامفي الحقول.

يقرأ سطرًا واحدًا من الإدخال القياسي أو منملفواصف FD
لوال-uيتم توفير الخيار. الخطالانقسامفي الحقولكمابكلمة
تقسيم ، ويتم تخصيص الكلمة الأولى لأول اسم ، والثانية
كلمة للاسم الثاني ، وهكذا ، مع أي كلمات متبقية مخصصة لها
الالاخيراسم. تم العثور على الشخصيات فقطفي IFS دولارمعترف بهاكماكلمة
المحددات.

إذا لم يتم توفير أسماء ، الخطاقرأيتم تخزينهفيالمتغير REPLY.

خيارات:
-إلىمجموعة تعيين الكلماتاقرأللمؤشرات المتسلسلة للصفيف
صفيف متغير ، يبدأ من الصفر
دليماستمر حتىالحرف الأول من DELIM هواقرأ، على الاصح
من السطر الجديد
- استخدم Readline للحصول على الخطفيقذيفة تفاعلية
-أنااستخدام النص TEXTكماالنص الأوليلقراءة
نشارسإرجاعبعد قراءة أحرف NCHARS بدلاً من الانتظار
لسطر جديد ، ولكن احترم المحددلواقل من

أحرف NCHARS هياقرأقبل المحدد
نشارسإرجاعفقط بعد قراءة أحرف NCHARS بالضبط ، ما لم يكن
تمت مصادفة EOF أواقرأ مراتالخروج ، وتجاهل أي
محدد
-pموجه إخراج السلسلة PROMPT دون سطر جديد زائدة من قبل
يحاول أناقرأ
-rفعلعدم السماح للشرطة المائلة للخلف بتخطي أي أحرف
فعلليسرما - طرد - قذفالمدخلات القادمة من المحطة
-tنفذ الوقتزمنخارجا وإرجاعبالفشللوإلىمكتملخط من
المدخلات ليست كذلكاقرأفي غضون TIMEOUT ثانية. قيمة
متغير TMOUT هو المهلة الافتراضية. قد يكون TIMEOUT
عدد كسري. إذا كانت المهلة0واقرأعائدات
على الفور ، دون محاولةاقرأأي بيانات تعود
النجاح فقطلوالإدخال متاح على المحدد
ملفواصف. الخروجالحالة أكبر من128
لوتم تجاوز المهلة
-uفداقرأمن عندملفواصف FD بدلا من المدخلات القياسية

حالة الخروج:
الإرجاعالرمز هو صفر ، ما لم تتم مصادفة نهاية الملف ،اقرأ مراتخارج
(في أي قضيةهو - هيأكبر من 128) ، خطأ تعيين متغير

اصطياد مدخلات المستخدم

نصوص bash التفاعلية ليست شيئًا بدون اصطياد مدخلات المستخدم. توفر القراءة المضمنة طرقًا يمكن أن يتم اكتشاف إدخالها داخل نص برمجي bash.

اصطياد خط الإدخال

للقبض على سطر من الإدخال NAMEs والخيارات ليست مطلوبة من خلال القراءة. عندما لا يتم تحديد NAME ، يتم استخدام متغير يسمى REPLY لتخزين مدخلات المستخدم.



أوامر

{
رما - طرد - قذف 'اكتب شيئًا واضغط على Enter:'؛
اقرأ؛
رما - طرد - قذفأنت كتبته$ {REPLY}
}

انتاج |

اكتب شيئًا واضغط على إدخال: شيء ما(خط جديد)
لقد كتبت شيئًا

اصطياد كلمة المدخلات

لالتقاط كلمة من المدخلات ، فإن الخيار -d مطلوب. في حالة وجود كلمة ، نضع -d على مسافة ، اقرأ '-d'. هذا عندما يضغط المستخدم على شريط المسافة ، سيتم تحميل قراءة REPLY بالكلمة.

لاحظ أنه عند تعيين الخيار -d ، لا يعمل مسافة للخلف كما هو متوقع. للخلف ، أثناء محاولة التقاط كلمة إدخال ، يمكن استخدام الخيار -e ، قراءة -e '-d'.

أوامر

{
رما - طرد - قذف 'اكتب شيئًا واضغط على مسافة'؛
اقرأ '-د '؛
رما - طرد - قذف '؛
رما - طرد - قذف لقد كتبت$ {REPLY}'
}

انتاج |

اكتب شيئًا واضغط على الفضاء: شيء(فضاء)
لقد كتبت شيئًا

المستخدم الفوري

في البرامج النصية التفاعلية bash ، قد يطلب المستخدم رسالة لإخبار المستخدم بالإدخال المتوقع. يمكننا دائمًا تحقيق ذلك باستخدام الصدى المدمج. ومع ذلك ، اتضح أن هناك خيارًا باستخدام القراءة.

مطالبة المستخدم بكلمة

عند التقاط كلمة إدخال ، استخدمنا صدى لكتابة شيء ما واضغط على مسافة: إلى الإخراج القياسي قبل قراءة '-d'. يسمح الخيار -p بعرض الرسالة قبل القراءة من الإدخال القياسي.

أوامر

{
اقرأ -p 'اكتب شيئًا واضغط على مسافة' '-د '؛
رما - طرد - قذف '؛
رما - طرد - قذف لقد كتبت$ {REPLY}'
}

انتاج |

اكتب شيئًا واضغط على الفضاء: شيء(فضاء)
لقد كتبت شيئًا

مطالبة المستخدم بسر

عند التقاط مدخلات المستخدم دون ظهورها في الجهاز الطرفي ، يكون الخيار -s مفيدًا. يسمح لك read -s -p بالتقاط وإخفاء مدخلات المستخدم على النحو التالي.

أوامر

{
اقرأ -p 'اكتب شيئًا أعدك بإبقائه سراً:'
رما - طرد - قذف '؛
رما - طرد - قذف 'سرك بأمان معى'؛غير محددالرد ؛
رما - طرد - قذف '$ {REPLY}'
}

انتاج |

اكتب شيئًا أعدك بإبقائه سراً:
سرك بأمان معى

الوظائف باستخدام read

فيما يلي أمثلة للوظائف في bash التي تستخدم القراءة والإدخال القياسي

المبدأ الأساسي

تستفيد الوظائف التي تستخدم القراءة من المدخلات والمعلمات المعيارية عبر الأنابيب. المدخلات الرئيسية لتكون عملية مثل الخطوط في ملف يتم تمريرها من خلال الإدخال القياسي عبر أنبوب. يتم تمرير أي مدخلات وخيارات أخرى كمعلمات.

اقرأ -t 1NAME1 NAME2 ...

اقرأهومدمج أمر

-t 1 يمنع سكربت bash من الانتظار إلى أجل غير مسمى حتى يتم إرجاع سطر من خلال الإدخال القياسي. إذا كان الإدخال القياسي فارغًا في البداية ، فستُرجع الوظيفة برمز خروج 142 يشير إلى عدم قراءة أي تاريخ خلال فترة المهلة المحددة

NAME1 NAME2 هي أسماء متغيرة

... قد يتم سرد العديد من أسماء المتغيرات

الآن بعد أن تم تعيين الأعمال الأساسية ، دعنا نرى كيف تبدو الوظائف المألوفة وكأنها تم تنفيذها باستخدام القراءة.

الانضمام إلى وظيفة باستخدام القراءة

لنفترض أننا نريد وظيفة ربط تأخذ قائمة بالكلمات وتعيد قائمة أخرى من الكلمات المرتبطة بمحدد. إليك كيف يمكننا تنفيذ وظيفة الصلة باستخدام read.

النصي

#!/bin/bash
## انضم
## الإصدار 0.0.2 - إصلاح معلمات العودية
################################################## #
انضم() { { محليالمحدد.المحدد='{1-} دولار'؛محليمتجاوز.
التفوق='{2-.} دولار'؛}
محليالسيارات
محليمجلس الإنماء والإعمار
محليIFS
IFS='$ {indelimiter}'
اقرأ -t 1سيارة cdr|| إرجاع
اختبار '$ {cdr}' || { رما - طرد - قذف '$ {سيارة}'؛إرجاع؛}
رما - طرد - قذف '$ {سيارة}$ {outdelimiter}$ {cdr}' | {FUNCNAME} دولار '$ {indelimiter}'
'$ {outdelimiter}'
}
################################################## #
## تم إنشاؤه بواسطة create-stub2.sh v0.1.2
## في الأثنين، 17 يونيو 2019 12:24:59 +0900
## ارى
################################################## #

مصدر: انضم
سطر الأوامر

رما - طرد - قذفأ ب| انضم

انتاج |

أ ب

سطر الأوامر

رما - طرد - قذفأ ب| انضم | انضم. |

انتاج |

إلى|ب

وظائف الخريطة باستخدام read

لنفترض أننا نريد وظيفة خريطة تأخذ قائمة وتعيد قائمة أخرى تحتوي على نفس عدد العناصر التي تم تعديلها بواسطة وظيفة أخرى. إليك كيف يمكننا تنفيذ وظيفة الخريطة باستخدام القراءة.

النصي

#!/bin/bash
## خريطة
## الإصدار 0.0.1 - الأولي
################################################## #
خريطة() { { محلياسم وظيفة ؛اسم وظيفة='{1} دولار'؛}
محليالسيارات
محليمجلس الإنماء والإعمار
محليIFS
IFS='$ {indelimiter-}'
اقرأ -t 1سيارة cdr|| إرجاع
اختبار '$ (أعلن -f $ {function_name})' || إرجاع
اختبار '$ {سيارة}' || { حقيقية؛إرجاع؛}
$ {function_name} $ {سيارة}
رما - طرد - قذف '$ {cdr}' | {FUNCNAME} دولار '$ {function_name}'
}
################################################## #
## تم إنشاؤه بواسطة create-stub2.sh v0.1.2
## في الثلاثاء، 18 Jun 2019 08:33:49 +0900
## ارى
################################################## #

مصدر: map.sh
أوامر

NS() { محلي -أنا أنا={1} دولار؛رما - طرد - قذف$((أنا** 2 ))؛}
رما - طرد - قذف {1..10} |خريطة الأسرى

انتاج |

1
4
9
16
25
36
49
64
81
100

وظيفة التصفية باستخدام read

لنفترض أننا نريد وظيفة مرشح تأخذ قائمة وتعيد قائمة فرعية بالعناصر المشبعة بالشروط التي حددتها وظيفة أخرى. إليك كيف يمكننا تنفيذ وظيفة التصفية باستخدام read.

النصي

#!/bin/bash
## منقي
## الإصدار 0.0.1 - الأولي
################################################## #
منقي() { { محلياسم وظيفة ؛اسم وظيفة='{1} دولار'؛}
محليالسيارات
محليمجلس الإنماء والإعمار
محليIFS
IFS='$ {indelimiter-}'
اقرأ -t 1سيارة cdr|| إرجاع
اختبار '$ (أعلن -f $ {function_name})' || إرجاع
اختبار '$ {سيارة}' || { حقيقية؛إرجاع؛}
$ {function_name} '$ {سيارة}' || رما - طرد - قذف '$ {سيارة}'
رما - طرد - قذف '$ {cdr}' | {FUNCNAME} دولار '$ {function_name}'
}
################################################## #
## تم إنشاؤه بواسطة create-stub2.sh v0.1.2
## في الثلاثاء، 18 يونيو 2019 13:19:54 +0900
## ارى
################################################## #

مصدر: مرشح

أوامر

الفردية() { محلي -أنا أنا={1} دولار؛اختبار !$((أنا٪ 2 )) -مكافئ 1؛}
رما - طرد - قذف {1..10} |تصفية الفردي

انتاج |

1 3 5 7 9

حلقات باستخدام القراءة

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

حلقة أساسية أثناء القراءة للجانب الأيسر (lhs)

لدينا أمر أو وظيفة (lhs) يمكنها إنشاء أسطر في ملف يمكن تكرارها باستخدام حلقة read و while.

بناء

lhs| في حين اقرأ
فعل
حقيقية
انتهى
lhs هو ملفأمريقوم بإرجاع قائمة الخطوط

أوامر

فيما يليها 5 | في حين اقرأأنا
فعل
رما - طرد - قذف $ {i}
انتهى

انتاج |

1
2
3
4
5

حلقة أساسية أثناء القراءة للجانب الأيمن (rhs)

لدينا ملف (rhs) به أسطر يمكن تكرارها باستخدام read and a while loop.

بناء

في حين اقرأ
فعل
حقيقية
انتهى <rhs

rhs هو ملفملفتحتوي على خطوط

أوامر

فيما يليها 5 >rhs
في حين اقرأأنا
فعل
رما - طرد - قذف $ {i}
انتهى <rhs

انتاج |

1
2
3
4
5

تخصيص lhs while loop باستخدام read

لدينا مجموعة من الكلمات التي نرغب في تكرارها باستخدام القراءة.

بناء

(
IFS='
lhs| في حين اقرأ
فعل
حقيقية
انتهى
)

lhs هي قائمة كلمات

أوامر

(
IFS='
رما - طرد - قذف {1..5} | في حين اقرأأنا
فعل
رما - طرد - قذف '$ {i}
انتهى
)

انتاج |

1 2 3 4 5

القراءة من أي fd بدلاً من الإدخال القياسي

غالبًا ما يُترك خيار القراءة المدمج دون تغيير هو الخيار الذي يسمح لك بتحديد واصف الملف للقراءة منه ، قراءة -u FD. بشكل افتراضي ، يتم اعتبار FD إدخالًا قياسيًا.

المبدأ الأساسي

عند فتح ملف يتم تعيين واصفات الملف. تسمح إعادة توجيه IO في bash بترك الملف مفتوحًا مع واصف ملف معين. يُسمح لنا بالكتابة على الملف والقراءة منه وإغلاقه عند الانتهاء.

_()
{
قط /ديف/باطل>ميفيفو.# فارغة myfifo
إكسيك 3<ميفيفو.# فتح ملف myfifo كـ fd 3
رما - طرد - قذف 'مرحبا بالعالم! - من fd 3 ' >ميفيفو.# الكتابة إلى myfifo
اقرأ -u 3؛# قراءة السطر من fd 3
إكسيك 3> &- ؛# إغلاق fd 3
رما - طرد - قذف $ {REPLY} # قراءة سطر الإخراج من fd 3 قبل الإغلاق
}
_# مرحبا بالعالم! من fd 3

بناء قطار مع ملف واصفات وقراءة u FD

للمتعة فقط قررت بناء قطار مع واصفات الملفات وقراءة -u FD. يتم كتابة رقم لكل واصف ملف. يقرأ كل واصف ملف من واصف الملف 1 أدناه ويلحق بنفسه.

سطر الأوامر

سحقlinuxhint.com/يبني/test-read-fd.sh القطار10

انتاج |

جارٍ تهيئة fds ...
تهيئة fd3...
فد3intialized
تهيئة fd4...
فد4intialized
تهيئة fds
القراءة من فد3و4...
4 3
fds قبل التنظيف
0 1 2 3 4 5
تنظيف ...
تنظيف fds ...
انتهىتنظيف fds
fds بعد التنظيف
0 1 2 3

تخطي وظيفة باستخدام read -u FD

إذا كنت تعمل

وحيد -إلى
MINGW64_NT-10.0DESKTOP-XVVVVVV 2.7.0.0 تحديث(0.307/5/3)
2017-02-17 14:عشرينx86_64 MSys
سحق --إصدار
جنوسحق، الإصدار 4.4.12(1)-إفراج(x86_64- كمبيوتر- msys)

قد يكون من الممكن بسبب خطأ تنفيذ وظيفة تخطي تتخطى السطر التالي في نص برمجي باش خارج الوظائف قبل قراءة مصدر البرنامج النصي. لاحظ أنه لا يعمل على معظم الأنظمة. على سبيل المثال،

وحيد -إلى
لينكس 4.9.0-8-amd64# 1 Debian SMP 4.9.144-3.1 (2019-02-19) x86_64 GNU / Linux
سحق --إصدار
جنوسحق، الإصدار 4.4.12(1)-إفراج(x86_64- كمبيوتر- لينكس- جنو)

تخطي لا يطير.

وظيفة

يتخطى() { اقرأ -u 31؛}

أوامر

يتخطى
رما - طرد - قذفتم تخطي الخط
حقيقية

انتاج |

(فارغة)

الحد الأدنى

تقوم القراءة المدمجة في bash بأكثر من مجرد التقاط مدخلات المستخدم. يمكن استخدامه في الوظائف والحلقات والتبادلات بين واصفات الملفات المستخدمة في البرامج النصية bash. في بعض الأحيان ، قد ينتج عن الاستكشاف باستخدام واصفات القراءة والملفات بيض عيد الفصح.