الفرق بين المراجعتين ل"Bash/redirection and loops"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط
(مراجعة 6: إضافة تصانيف)
 
(3 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 3: سطر 3:
 
يمكن تحديد ملف به تعليمات تُستخدم للتحكم في حلقة تكرارية بدلًا من التحكم فيها عن طريق تفقد نتيجة أمر ما أو عن طريق تدخل المستخدم يدويًا، وعادة ما يُستخدم أمر <code>read</code> في هذه الحالة كأمر متحكِّم، ويستمر تنفيذ الحلقة طالما تُغذَّى الحلقة التكرارية بأسطر مدخلات من ذلك الملف، وبمجرد قراءة جميع الأسطر فإن الحلقة تتوقف وتخرج.
 
يمكن تحديد ملف به تعليمات تُستخدم للتحكم في حلقة تكرارية بدلًا من التحكم فيها عن طريق تفقد نتيجة أمر ما أو عن طريق تدخل المستخدم يدويًا، وعادة ما يُستخدم أمر <code>read</code> في هذه الحالة كأمر متحكِّم، ويستمر تنفيذ الحلقة طالما تُغذَّى الحلقة التكرارية بأسطر مدخلات من ذلك الملف، وبمجرد قراءة جميع الأسطر فإن الحلقة تتوقف وتخرج.
  
وبما أن بنية الحلقة التكرارية تُعد بنية لأمر واحد (مثل <code>while TEST-COMMAND; do CONSEQUENT-COMMANDS; done</code>) فإن إعادة التوجيه يجب أن تحدث بعد عبارة <code>done</code> لتتوافق مع هذه البنية (الأمر < <code>الملف</code>). وذلك النوع من إعادة التوجيه يصلح أيضًا لباقي الحلقات التكرارية.
+
وبما أن بنية الحلقة التكرارية تُعد بنية لأمر واحد (مثل <code>while TEST-COMMAND; do CONSEQUENT-COMMANDS; done</code>) فإن إعادة التوجيه يجب أن تحدث بعد عبارة <code>done</code> لتتوافق مع هذه البنية <code>command < file</code>. وذلك النوع من إعادة التوجيه يصلح أيضًا لباقي الحلقات التكرارية.
  
 
== إعادة توجيه الخرج ==
 
== إعادة توجيه الخرج ==
 
في المثال التالي لدينا خرج لأمر <code>find</code>، يُستخدم كمُدخَل لأمر <code>read</code> الذي يتحكم في حلقة <code>while</code>:<syntaxhighlight lang="bash">
 
في المثال التالي لدينا خرج لأمر <code>find</code>، يُستخدم كمُدخَل لأمر <code>read</code> الذي يتحكم في حلقة <code>while</code>:<syntaxhighlight lang="bash">
[hsoub@alaraby ~/testdir] cat archiveoldstuff.sh
+
[wiki@hsoub ~/testdir] cat archiveoldstuff.sh
 
#!/bin/bash
 
#!/bin/bash
  
سطر 31: سطر 31:
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==
* [[وحدات البناء الأساسية في Bash]].
+
* [[Bash/building blocks|وحدات البناء الأساسية في Bash]].
 
* [[Bash/developing good scripts|تطوير برامج Bash جيدة]].
 
* [[Bash/developing good scripts|تطوير برامج Bash جيدة]].
 
* [[Bash/creating and running a script|إنشاء وتشغيل برامج Bash]].
 
* [[Bash/creating and running a script|إنشاء وتشغيل برامج Bash]].
  
 
== مصادر ==
 
== مصادر ==
* دليل Bash للمبتدئين، [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_04.html إعادة التوجيه والحلقات].
+
* [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_04.html دليل Bash للمبتدئين، صفحة إعادة التوجيه والحلقات.]
 
[[تصنيف:Bash]]
 
[[تصنيف:Bash]]
 
[[تصنيف:Bash I/O Redirection]]
 
[[تصنيف:Bash I/O Redirection]]
 
[[تصنيف:Bash Loops]]
 
[[تصنيف:Bash Loops]]
 +
[[تصنيف:Bash Redirection And Loops]]
 +
[[تصنيف:Bash While Loop]]

المراجعة الحالية بتاريخ 00:36، 7 سبتمبر 2018

إعادة توجيه المُدخلات

يمكن تحديد ملف به تعليمات تُستخدم للتحكم في حلقة تكرارية بدلًا من التحكم فيها عن طريق تفقد نتيجة أمر ما أو عن طريق تدخل المستخدم يدويًا، وعادة ما يُستخدم أمر read في هذه الحالة كأمر متحكِّم، ويستمر تنفيذ الحلقة طالما تُغذَّى الحلقة التكرارية بأسطر مدخلات من ذلك الملف، وبمجرد قراءة جميع الأسطر فإن الحلقة تتوقف وتخرج.

وبما أن بنية الحلقة التكرارية تُعد بنية لأمر واحد (مثل while TEST-COMMAND; do CONSEQUENT-COMMANDS; done) فإن إعادة التوجيه يجب أن تحدث بعد عبارة done لتتوافق مع هذه البنية command < file. وذلك النوع من إعادة التوجيه يصلح أيضًا لباقي الحلقات التكرارية.

إعادة توجيه الخرج

في المثال التالي لدينا خرج لأمر find، يُستخدم كمُدخَل لأمر read الذي يتحكم في حلقة while:

[wiki@hsoub ~/testdir] cat archiveoldstuff.sh
#!/bin/bash

# ينشئ هذا البرنامج مجلدًا فرعيًا في المجلد الحالي لتنقل إليه الملفات القديمة
# يمكن تنفيذ هذا باستخدام أداة (cron) بعد تعديلها قليلًا لتُنفِّذه بشكل أسبوعي أو شهري

ARCHIVENR=`date +%Y%m%d`
DESTDIR="$PWD/archive-$ARCHIVENR"

mkdir "$DESTDIR"

# using quotes to catch file names containing spaces, using read -d for more 
# fool-proof usage:
# استخدم علامات التنصيص لالتقاط أسماء الملفات التي بها مسافات، واستخدم أمر
# read -d من أجل تنفيذ أبسط
find "$PWD" -type f -a -mtime +5 | while read -d $'\000' file

do
gzip "$file"; mv "$file".gz "$DESTDIR"
echo "$file archived"
done

تُضغط الملفات قبل نقلها إلى مجلد الأرشيف.

انظر أيضًا

مصادر