OnWorks Linux و Windows Online WorkStations

الشعار

استضافة مجانية على الإنترنت لمحطات العمل

<السابق | المحتويات | التالي>

أوامر المجموعة والقطاعات الفرعية

سحق يسمح بتجميع الأوامر معًا. يمكن القيام بذلك بإحدى طريقتين ؛ هناك مع أ قيادة المجموعة أو مع تحت القاع. فيما يلي أمثلة على بناء الجملة لكل منها:

أمر المجموعة:

{command1؛ القيادة 2 ؛ [الأمر 3 ؛ ...]}

قشرة فرعية:

(command1؛ command2؛ [command3؛ ...])

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

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



ls -l> output.txt

صدى "قائمة foo.txt" >> output.txt cat foo.txt >> output.txt

ls -l> output.txt

صدى "قائمة foo.txt" >> output.txt cat foo.txt >> output.txt


هذا صريح جدا. تمت إعادة توجيه ثلاثة أوامر بمخرجاتها إلى ملف باسم output.txt. باستخدام أمر المجموعة ، يمكننا كتابة هذا على النحو التالي:


{ls -l؛ صدى "قائمة foo.txt" ؛ القط foo.txt ؛ }> output.txt

{ls -l؛ صدى "قائمة foo.txt" ؛ القط foo.txt ؛ }> output.txt


استخدام قشرة فرعية مشابه:



(ls -l؛ echo "list of foo.txt"؛ cat foo.txt)> output.txt

(ls -l؛ echo "list of foo.txt"؛ cat foo.txt)> output.txt


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



{ls -l؛ صدى "قائمة foo.txt" ؛ القط foo.txt ؛ } | lpr

{ls -l؛ صدى "قائمة foo.txt" ؛ القط foo.txt ؛ } | lpr


لقد قمنا هنا بدمج مخرجات أوامرنا الثلاثة وقمنا بتوصيلها بالأنابيب في مدخلات LPR لإنتاج تقرير مطبوع.

في النص التالي ، سنستخدم أوامر المجموعات وننظر في العديد من تقنيات البرمجة التي يمكن استخدامها جنبًا إلى جنب مع المصفوفات الترابطية. هذا السيناريو يسمى مجموعة 2، عند إعطاء اسم دليل ، يطبع قائمة بالملفات الموجودة في الدليل مع أسماء مالك الملف ومالك المجموعة. في نهاية القائمة ، يقوم البرنامج النصي بطباعة عدد الملفات التي تنتمي إلى كل مالك ومجموعة. هنا نرى النتائج (مختصرة للإيجاز) عندما يُعطى البرنامج النصي الدليل

/ البيرة / بن:


[me @ linuxbox ~] $ مجموعة 2 / البيرة / بن

/usr/bin/2to3-2.6

جذر

جذر

/ usr / bin / 2to3

جذر

جذر

/ البيرة / بن / a2p

جذر

جذر

/ usr / bin / abrowser

جذر

جذر

/ usr / bin / aconnect

جذر

جذر

/ usr / bin / acpi_fakekey

جذر

جذر

/ usr / bin / acpi_listen

جذر

جذر

/ usr / bin / add-apt-repository

جذر

جذر

.

.

.

/ usr / bin / zipgrep

جذر

جذر

/ usr / bin / zipinfo

جذر

جذر

/ usr / bin / zipnote

جذر

جذر

/ البيرة / بن / الرمز البريدي

جذر

جذر


/ usr / bin / zipsplit

/ usr / bin / zjsdecode

/ usr / bin / zsoelim

جذر الجذر

جذر الجذر

أصحاب الملفات: الخفي: 1


ملف (ق)

الجذر: 1394

ملف (ق)

صورة

مالكو مجموعة الملفات: crontab: 1 ملف (ملفات) daemon: 1 ملف (ملفات) lpadmin: 1 ملف (ملفات) بريد: 4 ملف (ملفات) mlocate: 1 ملف (ملفات) الجذر: 1380 ملف (ملفات) الظل: 2 ملف ssh: 1 ملف (ملفات)

tty: 2 ملف (ملفات)

utmp: 2 ملف (ملفات)


صورة

#! / بن / باش

#! / بن / باش

# array-2: استخدم المصفوفات لحساب مالكي الملفات

تعلن -A ملفات file_group file_owner المجموعات مالكي إذا [[! -d "$ 1"]] ؛ من ثم

صدى "Usage: array-2 dir"> & 2 exit 1

fi


لأني في "$ 1" / * ؛ فعل المالك = مجموعة $ (stat -c٪ U "$ i") = ملفات $ (stat -c٪ G "$ i") ["$ i"] = "$ i" file_owner ["$ i"] = $ owner file_group ["$ i"] = $ group ((++ owner [$ owner])) ((++ المجموعات [$ group]))

فعل


# قائمة الملفات المجمعة

{لأني في "$ {files [@]}" ؛ قم بطباعة "٪ -40s٪ -10s٪ -10s \ n" \

تم "$ i" $ {file_owner ["$ i"]} $ {file_group ["$ i"]}} | نوع

# array-2: استخدم المصفوفات لحساب مالكي الملفات

تعلن -A ملفات file_group file_owner المجموعات مالكي إذا [[! -d "$ 1"]] ؛ من ثم

صدى "Usage: array-2 dir"> & 2 exit 1

fi


لأني في "$ 1" / * ؛ فعل المالك = مجموعة $ (stat -c٪ U "$ i") = ملفات $ (stat -c٪ G "$ i") ["$ i"] = "$ i" file_owner ["$ i"] = $ owner file_group ["$ i"] = $ group ((++ owner [$ owner])) ((++ المجموعات [$ group]))

فعل


# قائمة الملفات المجمعة

{لأني في "$ {files [@]}" ؛ قم بطباعة "٪ -40s٪ -10s٪ -10s \ n" \

تم "$ i" $ {file_owner ["$ i"]} $ {file_group ["$ i"]}} | نوع

فيما يلي قائمة (بأرقام الأسطر) للبرنامج النصي:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26


27

28

29

30

31

32

33

34

35

36

37

38

39

40

27

28

29

30

31

32

33

34

35

36

37

38

39

40


صورة

صدى

صدى

# اصحاب القائمة

صدى "أصحاب الملفات:"

{لأني في "$ {! owner [@]}" ؛ فعل

printf "٪ -10s:٪ 5d ملف (ملفات) \ n" "$ i" $ {owner ["$ i"]} تم} | نوع

صدى


# قائمة المجموعات

صدى "أصحاب مجموعة الملفات:"

{لأني في "$ {! groups [@]}" ؛ فعل

printf "٪ -10s:٪ 5d ملف (ملفات) \ n" "$ i" $ {مجموعات ["$ i"]} تم} | نوع

# اصحاب القائمة

صدى "أصحاب الملفات:"

{لأني في "$ {! owner [@]}" ؛ فعل

printf "٪ -10s:٪ 5d ملف (ملفات) \ n" "$ i" $ {owner ["$ i"]} تم} | نوع

صدى


# قائمة المجموعات

صدى "أصحاب مجموعة الملفات:"

{لأني في "$ {! groups [@]}" ؛ فعل

printf "٪ -10s:٪ 5d ملف (ملفات) \ n" "$ i" $ {مجموعات ["$ i"]} تم} | نوع

دعنا نلقي نظرة على آليات هذا البرنامج النصي:

خط 5: يجب إنشاء المصفوفات الترابطية بامتداد أعلن الأمر باستخدام -A

اختيار. في هذا البرنامج النصي نقوم بإنشاء خمس مصفوفات على النحو التالي:

تحتوي الملفات على أسماء الملفات الموجودة في الدليل ، المفهرسة حسب اسم الملف file_group يحتوي على مالك المجموعة لكل ملف ، مفهرسًا حسب اسم الملف file_owner يحتوي على مالك كل ملف ، المفهرس حسب مجموعات اسم الملف يحتوي على عدد الملفات التي تنتمي إلى مالكي المجموعة المفهرسة يحتوي على عدد الملفات التي تنتمي إلى المالك المفهرس

الأسطر 7-10: للتحقق من أن اسم دليل صالح قد تم تمريره كمعامل موضعي. إذا لم يكن الأمر كذلك ، فسيتم عرض رسالة استخدام ويخرج البرنامج النصي بحالة الخروج 1.

الخطوط 12-20: تكرار الملفات الموجودة في الدليل. باستخدام القانون الأساسي الأمر ، الأسطر 13 و 14 لاستخراج أسماء مالك الملف ومالك المجموعة وتعيين القيم إلى المصفوفات الخاصة بهم (الأسطر 16 ، 17) باستخدام اسم الملف كمؤشر الصفيف. مثل - يتم تعيين اسم الملف نفسه إلى ملفات مجموعة (السطر 15).

الأسطر 18-19: يتم زيادة العدد الإجمالي للملفات التي تنتمي إلى مالك الملف ومالك المجموعة بمقدار ملف واحد.

الخطوط 22-27: يتم إخراج قائمة الملفات. يتم ذلك باستخدام توسعة المعلمة "$ {array [@]}" التي تتوسع في القائمة الكاملة لعناصر المصفوفة مع معاملة كل عنصر على أنه كلمة منفصلة. يتيح ذلك إمكانية احتواء اسم الملف على مسافات مضمنة. لاحظ أيضًا أن الحلقة بأكملها محاطة بأقواس وبالتالي تشكل أمرًا جماعيًا. هذا يسمح بإخراج كامل الحلقة بالأنابيب في sort أمر. هذا ضروري لأنه لا يتم فرز توسيع عناصر المصفوفة.

الأسطر 29-40: هاتان الحلقتان تشبهان حلقة قائمة الملفات فيما عدا أنهما يستخدمان "$ {!


مجموعة [@]} "تتوسع إلى قائمة فهارس المصفوفة بدلاً من قائمة عناصر المصفوفة.


 

أفضل الحوسبة السحابية لنظام التشغيل في OnWorks: