1 / 59

תרגול מס' 1

תרגול מס' 1. מערכת ההפעלה UNIX תכניות סטנדרטיות ב UNIX שרשור פקודות באמצעות Pipeline עבודה ב- bash. עבודה בסביבת UNIX. מהי מערכת הפעלה? מערכת הקבצים ב- UNIX עבודה בחלון Shell. מהי מערכת הפעלה?. מערכת הפעלה מהווה שכבת ביניים בין החומרה לבין התוכנה

shada
Download Presentation

תרגול מס' 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. תרגול מס' 1 מערכת ההפעלה UNIX תכניות סטנדרטיות ב UNIX שרשור פקודות באמצעות Pipeline עבודה ב- bash

  2. עבודה בסביבת UNIX מהי מערכת הפעלה? מערכת הקבצים ב-UNIX עבודה בחלון Shell מבוא לתכנות מערכות - 234122

  3. מהי מערכת הפעלה? • מערכת הפעלה מהווה שכבת ביניים בין החומרה לבין התוכנה • מאפשרת גישה נוחה למחשב עבור משתמשים ומתכנתים • עבור המשתמש: מספקת מנשק נוחלמחשב ושירותים בסיסיים • עבור המתכנת: מספקת מנשקים לניהול זיכרון,קבצים והתקני חומרה נוספים • דוגמאות למערכות הפעלה: • Windows • Ubuntu • OSX • Android • iOS מבוא לתכנות מערכות - 234122

  4. מהי UNIX? • UNIX הינה משפחה של מערכות הפעלה • יתרון מערכות ההפעלה ממשפחה זו הוא בקיומו של סטנדרט נוח עבור השירותים אותן היא מספקת (הקרוי POSIX) • רוב מערכות ההפעלה המוכרות לכם עומדות בסטנדרט של UNIX • המפורסמת ביותר כיום היא Linux • יוצאת הדופן היא כמובן Windows • בפרט - מערכת ההפעלה על שרת ה-t2 עליו נבדקים תרגילי הבית היא Linux. מבוא לתכנות מערכות - 234122

  5. מערכת הקבצים ב-UNIX • מערכת ההפעלה אחראית בין השאר על ארגון הקבצים במחשב • מערכת הקבצים ב-UNIX מורכבת מקבצים ותיקיות – בדומה ל-Windows • קובץהוא אוסף סדור של תווים • תיקיה(Directory) מאפשרת שמירת מספר קבצים ותיקיות נוספות בצורה מסודרת • לכל קובץ או תיקיה יש שם • אין מגבלות על מבנה השם (לא חייבת להיות סיומת) • מקובל ששם קובץ הוא מהצורה <name>.<extension> • למשל test.c עבור קובץ מקור בשפת C • אין ב-UNIX סיומת מיוחדת לקובץ הרצה (כמו exe ב-Windows) • כל קובץ או תיקיה נמצאים בתוך תיקיה כלשהי • מלבד התיקיה הראשית מבוא לתכנות מערכות - 234122

  6. התייחסות לקבצים • כדי להתייחס לקובץ יש להשתמש בשמו • התיקיה הראשית נקראת "/" • ניתן להתייחס לקובץ ע"י שמו המוחלט: • /usr/mtm/exercise1/main.c • התו "/" משמש כסימן מפריד להגדרת מסלול במערכת הקבצים • בכל חיבור ובכל זמן קיימת תיקיה המוגדרת כתיקיה הנוכחית • ניתן להתייחס לקובץ על ידי שם יחסי מהתיקיה הנוכחית: • main.cאם התיקיה הנוכחית היא /usr/mtm/exercise1 • exercise1/main.c אם התיקיה הנוכחית היא /usr/mtm מבוא לתכנות מערכות - 234122

  7. ריבוי משתמשים • UNIX היא מערכת הפעלה מרובת משתמשים • לכל משתמש במערכת קיימת תיקית בית • בהתחברות למערכת התיקיה הנוכחית היא תיקית הבית של המשתמש מבוא לתכנות מערכות - 234122

  8. קיצורים • בנוסף מוגדרים הקיצורים הבאים עבור שמות קבצים: • .- נקודה אחת מייצגת את התיקיה הנוכחית • ..- שתי נקודות מייצגות את תיקיית האב • התיקיה בה נמצאת התיקיה הנוכחית • ~- מייצגת קיצור לתיקיית הבית של המשתמש • ~user- מייצגת קיצור לתיקיית הבית של המשתמש user • למשל ~mtm היא תיקית הבית של הקורס בשרת t2 • ניתן להשתמש בקיצור * כדי להתייחס למספר קבצים בבת אחת ע"י שימוש בתבניות, למשל: • *מתייחס לכל הקבצים • *.txtיותאם לכל הקבצים ששמם מסתיים ב-".txt" מבוא לתכנות מערכות - 234122

  9. דוגמה • נתון מבנה של מערכת קבצים לדוגמה ב-UNIX: • למה מתייחסות המחרוזות הבאות? /usr/uri/progs/Hello.c /usr/uri/progs/Matam progs ~/progs ./hw1 ../hw2 ~ari/progs ~mtm/public/1011a/ex1 ~/progs/* / (root) tmp bin usr ari uri progs progs Hello.c Matam hw1 hw2 מבוא לתכנות מערכות - 234122

  10. Pipeline הרכבת פקודות Pipeline מבוא לתכנות מערכות - 234122

  11. הרכבת פקודות • נניח שברצוננו להדפיס את התוכן של תיקיה המכילה הרבה קבצים • לא נוכל במצב זה לראות את כל הקבצים • נוכל להשתמש בהפנית פלט הפקודה ls לקובץ זמני ולאחר מכן שימוש ב-more: > ls -l > tmp > more < tmp > rmtmp מבוא לתכנות מערכות - 234122

  12. Pipeline • כדי לחסוך את הבלגן שבטיפול בקבצים זמניים ניתן להשתמש ב-pipeline המחבר את הפלט של פקודה אחת לקלט של פקודה שניה ישירות • כדי לחבר שתי פקודות כך נרשום אותן אחת אחרי השניה כאשר ביניהן מפריד התו ‘|’ • על מנת לראות בשלבים את התוכן של תיקיה גדולה נוכל לרשום כעת: > ls -l | more • ניתן לשלב מספר תכניות בבת אחת: > command1| command2| command3 command1 command2 command3 stdout stdin stdout stdin מבוא לתכנות מערכות - 234122

  13. Pipeline - סיכום • ניתן להשתמש בתו ‘|’ כדי לחבר את הפלט של תכנית א' עם הקלט של תכנית ב' • בעזרת pipeline נוכל להרכיב פקודות מורכבות בעבודה בטרמינל מתכניות פשוטות מבוא לתכנות מערכות - 234122

  14. תכניות סטנדרטיות ב-UNIX • cut • wc • tee • echo • printf • mkdir • rmdir • cat • more • less • ls • cp • mv • rm • pwd • cd head tail sort uniq grep מבוא לתכנות מערכות - 234122

  15. תכניות סטנדרטיות ב-UNIX • אופי העבודה בטרמינל וקיום כלים נוחים להרכבת פקודות מעודדים יצירת תכניות בסיסיות הניתנות להרכבה • קיים מגוון בסיסי של תכניות הזמינות בכל מערכת הפעלה ממשפחת UNIX • צורת ההפעלה של התכניות היא בד"כ מהצורה הבאה: > <command> [options] [input file] • לרוב הפקודות, אם לא יצוין קובץ קלט, הקלט ילקח מהקלט הסטנדרטי (למה?) • בד"כ ניתן להחליף את הסדר בין שם קובץ הקלט לדגלים • זכרו כי מלבד הדגלים שילמדו כאן ניתן למצוא רשימה מפורטת שלהם ע"י שימוש בפקודה man או בחיפוש באינטרנט מבוא לתכנות מערכות - 234122

  16. פקודות בסיסיות ב-UNIX • כדי להדפיס תוכן של תיקיה נשתמש בפקודה ls: > ls[flags][files] • ניתן לרשום פשוט ls עבור הדפסת תוכן התיקיה הנוכחית • ניתן להוסיף את שם התיקיות שאת תוכנןנרצה להדפיס • לרוב הפקודות שנלמד אפשר להוסיף פרמטרים נוספים הנקראים דגלים: • למשל הדגל -l עבור הפקודה ls יגרום להדפסת הפלט כך שכל קובץ מופיע בשורת פלט נפרדת עם מידע נוסף • הדגל -a יגרום לפקודה להדפיס גם פריטים נסתרים • פריט נסתר ב-UNIX הוא כל קובץ או תיקיה ששמם מתחיל ב-. (נקודה) • בהרבה מהפקודות ניתן לשלב מספר דגלים בבת-אחת • כאשר הדגלים מיוצגים ע"י אות יחידה • למשל הפקודה ls -a -lזהה לפקודה ls -al מבוא לתכנות מערכות - 234122

  17. ls - דוגמאות • >ls • hello.cprivate/ story.txt • >lsprivate • example.txt • >ls -l • total 12 • -rw-r--r-- 1 mtmusers 3047 Jun 20 10:35 hello.c • drwx------ 2 mtmusers 4096 Sep 1 14:28 private/ • -rw------- 1 mtmusers 1081 Sep 1 14:28 story.txt • >ls -al • total 28 • drwx------ 3 mtmusers 4096 Sep 1 14:29 ./ • drwx--x--x 50 mtmusers 12288 Sep 1 10:52 ../ • -rw-r--r-- 1 mtmusers 3047 Jun 20 10:35 hello.c • drwx------ 2 mtmusers 4096 Sep 1 14:28 private/ • -rw------- 1 mtmusers 1081 Sep 1 14:28 story.txt מבוא לתכנות מערכות - 234122

  18. ניהול תיקיות • הדפסת שם התיקיה הנוכחית ע"י הפקודה pwd: > pwd • ניתן להחליף את התיקיה הנוכחית ע"י הפקודה cd: > cd <directory> • ניתן ליצור תיקיה חדשה ע"י הפקודה mkdir: > mkdir <name> • ניתן למחוק תיקיה ריקהע"י הפקודה rmdir: > rmdir <directory> מבוא לתכנות מערכות - 234122

  19. ניהול תיקיות - דוגמאות • >cd ~ • >pwd • /usr/030/moshe • >cd matam • matam: No such file or directory. • >mkdir matam • >cd matam • >pwd • /usr/030/moshe/matam • >cd .. • >rmdir matam מעבר לתיקית הבית בעזרת הקיצור ~ בכל הפקודות, אם אחד הפרמטרים אינו תקין תודפס הודעת שגיאה מתאימה והפקודה תופסק מעבר לתיקית האב בעזרת הסימון .. מבוא לתכנות מערכות - 234122

  20. פקודות לניהול קבצים • הפקודה cpמשמשת להעתקת קבצים או תיקיות • ניתן להשתמש בפקודה בשתי דרכים: > cp[options] <file1> <file2> • יוצרת העתק חדש של file1 בשם file2 > cp [options] <file1> ... <file> <directory> • יוצרת העתקים חדשים של כל הקבצים בתיקיה קיימת • אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלף (overwritten) • דגלים שימושיים: • -r: מבצע העתקה רקורסיבית של תיקיות ותוכנן • ללא דגל זה תיקיות אינן מועתקות • -i: מבקש אישור לפני מחיקת קובץ קיים מבוא לתכנות מערכות - 234122

  21. פקודות לניהול קבצים • הפקודה mvמשמשת להעברתקבצים או תיקיות או שינוי שמם • ניתן להשתמש בפקודה בשתי דרכים: > mv [options] <file1> <file2> • משנה את שמו של file1 ל-file2 • עובדת גם עבור תיקיות > mv [options] <file1> ... <file> <directory> • אם הפרמטר האחרון הוא שם של תיקיה קיימת הפקודה מעבירה את הקבצים לתוכה • אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלף (overwritten) • דגלים שימושיים: • -i: מבקש אישור לפני מחיקת קובץ קיים מבוא לתכנות מערכות - 234122

  22. פקודות לניהול קבצים • הפקודה rmמאפשרת מחיקת קבצים או תיקיות: > rm [ options ] <files> • דגלים שימושיים: • -r: מבצע מחיקה רקורסיבית של תיקיות • ללא דגל זה ספריות אינן נמחקות • -i: מבקש אישור לפני מחיקת קובץ • -f: לא מבקש אישור בשום מקרה • שימו לב: לא ניתן לשחזר קבצים שנמחקו • הפקודה הבאה מוחקת את כל הקבצים והספריות במיקום הנוכחי ועלולה להיות הרסנית למדי: > rm-rf * מבוא לתכנות מערכות - 234122

  23. פקודות לניהול קבצים - דוגמאות • >ls • hello.cprivate/ story.txt • >cphello.cprog.c • >ls • hello.cprivate/ prog.c story.txt • >mv prog.cprivate/program.c • >ls • hello.cprivate/ story.txt • >lsprivate • example.txt program.c • >mv hello.c story.txt private • >ls • private/ מבוא לתכנות מערכות - 234122

  24. פקודות לניהול קבצים - דוגמאות • >lsprivate • example.txt hello.cprogram.c story.txt • >rm -i private/story.txt • rm: removeregular file `private/story.txt'? y • >rmprivate • rm: cannotremove directory `private': Is a directory • >rm -ri private • rm: descend into directory `private'? n • >rm -rfprivate • >ls • > מבוא לתכנות מערכות - 234122

  25. הדפסת תוכן של קבצים • הפקודה catמדפיסה למסך את תוכן הקובץ > cat <file> • אם הקובץ גדול המסך יגלול ולא נוכל לראות בנוחות את התחלתו • אם לא מופיע שם קובץ הפקודה מדפיסה את הקלט הסטנדרטי (בד"כ קלט מהמקלדת) • בהמשך נראה למה זה מועיל • הפקודה moreמדפיסה למסך את התוכן, אך עוצרת כאשר נגמר המקום > more <file> • לחיצה על enter תגרום להדפסת שורה נוספת • לחיצה על q תפסיק את ההדפסה • הפקודה lessהיא שיפור של more ומאפשרת גלילה בשני הכיוונים ועוד אפשרויות > less <file> מבוא לתכנות מערכות - 234122

  26. הפקודה head • הפקודה head מדפיסה רק את תחילת הקלט: > head [-n#] [files] • מדפיסה את # השורות הראשונות בקלט • אם לא מוגדר מספר יודפסו 10 שורות • אם המספר שהוגדר שלילייודפסו כלהשורות מלבד # השורות האחרונות • עבור מספר חיובי ניתן לרשום גם -# > head –n+2 a_file a line 1 a line 2 > head –n+1 < b_file b line 1 > head –n-2 a_fileb_file ==> a_file <== a line 1 a line 2 a line 3 ==> b_file <== b line 1 a_file b_file a line 1 a line 2 a line 3 a line 4 a line 5 b line 1 b line 2 b line 3 מבוא לתכנות מערכות - 234122

  27. הפקודה tail • הפקודה tail מדפיסה רק את סוף הקלט: > tail [-/+#] [files] • עבור -# מדפיסה את # השורות האחרונות בקלט • עבור +# מדפיסה החל מהשורה ה-# • ברירת המחדל היא הדפסת 10 השורות האחרונות • כיצד נדפיס את שורות2-3 מקובץ מסוים? > tail -2 a_file a line 4 a line 5 > tail +2 a_file a line 2 a line 3 a line 4 a line 5 > tail -1 a_fileb_file ==> a_file <== a line 5 ==> b_file <== b line 3 a_file b_file a line 1 a line 2 a line 3 a line 4 a line 5 b line 1 b line 2 b line 3 > head –n+3 a_file | tail -2 a line 2 a line 3 מבוא לתכנות מערכות - 234122

  28. הפקודה sort • הפקודה sort מדפיסה את הקלט ממוין (לפי שורות) > sort [options] [files] • -n: ממיינת מספרים לפי ערכם • -r: מדפיסה את התוצאות בסדר יורד (ברירת המחדל היא סדר עולה) • -k#: מתייחס לכל שורה החל מהמילה ה-# • המילים ממסופרות החל מ-1 • -f: מתעלם מהבדלי uppercase/lowercase • בחלק מהמימושים של sort ההתעלמות היא ברירת המחדל • -b: מתעלם מרווחים בתחילת השורה • -s: מבצע מיון יציב - שומר על הסדר המקורי בין שורות שערכן שווה מבוא לתכנות מערכות - 234122

  29. sort - דוגמאות > sort data Father World for who > sort -f data Father for who World > sort -r data who for World Father sort -rf data World who for Father > sort numbers 11 2 > sort -n numbers 2 11 > ls-l total 4 -rw------- 1 romanoroot 520 Nov 8 23:09 data -rw------- 1 romano 368 43 Nov 8 23:12 ex1 -rw------- 1 romano 368 428 Nov 8 23:22 ex2 -rw------- 1 romano 368 322 Nov 10 13:30 ex3 > ls-l | sort -rnk5 -rw------- 1 romano root 520 Nov 8 23:09 data -rw------- 1 romano 368 428 Nov 8 23:22 ex2 -rw------- 1 romano 368 322 Nov 10 13:30 ex3 -rw------- 1 romano 368 43 Nov 8 23:12 ex1 total 4 data numbers World who for Father 2 11 מבוא לתכנות מערכות - 234122

  30. הפקודה uniq • הפקודה uniq מדפיסה עותק יחיד של שורות זהות סמוכות > uniq [options] [input [output]] • עבור קובץ ממוין שורות זהות לא יודפסו יותר מפעם אחת • הפקודה אינה במבנה הסטנדרטי - היא מקבלת את הקלט מקובץ יחיד והארגומנט הנוסף ישמש לקובץ הפלט • -c: מדפיס כל שורה פעם אחת ואת מספר העותקים שלה • -d: מדפיס רק שורות המופיעות יותר מפעם אחת • -u: מדפיס רק שורות המופיעות פעם אחת בלבד • ניתן להשתמש רק באחת האפשרויות מבין -c/-d/-u בבת אחת • -#: התעלם מ-# המילים הראשונות (בקבלת ההחלטה האם שורות זהות) מבוא לתכנות מערכות - 234122

  31. uniq - דוגמאות > sort names | uniqAlex Dan Elena Ofra Uri > sort names | uniq -u Alex Dan Elena > sort names | uniq-d Ofra Uri > sort names | uniq-c 1 Alex 1 Dan 1 Elena 2 Ofra 3 Uri > uniqfile3one two three one > uniq file3 list > cat list one two three one > uniq sentences This is sparta! It is sparta! Bye bye sparta! > uniq -1 sentences This is sparta! Bye bye sparta! > uniq -2 sentences This is sparta! names file3 sentences Uri Dan Uri Elena Alex Ofra Uri Ofra one two two three three three one one This is sparta! It is sparta! Bye byesparta! מבוא לתכנות מערכות - 234122

  32. הפקודה grep • הפקודה grep מחפשת ביטויים בתוך קבצים > grep [options] <expression> [files] • ניתן לחפש מילים מסוימות או ביטויים מורכבים • מדפיסה את כל השורות בקובץ המכילות את הביטוי שהוגדר • -v: מדפיסה את השורות בהן לא מופיע הביטוי • -i: מתעלם מהבדלי uppercase/lowercase • :-w מדפיסה את כל השורות בהן <expression> מופיע בדיוק (לא כתת מחרוזת) • השימוש ב-w מפריד בין expression לשאר המחרוזת בעזרת כל תו שאינו אותיות או מספרים. • -n: הדפס את השורות ואת מספרן בקבצים • -l: הדפס רק את שמות הקבצים בהן נמצאו שורות מתאימות • -c: הדפס רק את כמות השורות שנמצאו בכל קובץ ללא הדפסת השורות עצמן • הביטוי לחיפוש יכול להיות מורכב יותר ממילה פשוטה: • כדי לחפש מחרוזת עם רווחים יש להוסיף גרשיים • התו ^ מייצג תחילת שורה והתו $ את סוף השורה • ניתן לחפש ביטויים מורכבים יותר, לשם כך הסתכלו בקובץ ה-man של grep מבוא לתכנות מערכות - 234122

  33. grep - דוגמאות > grep cow farm1 cow Betsy slim cow Dazy two cows Dartsy & Teo > grep -v cow farm1 goat Upton Fat Cow Burger horse Admiral > grep -i cow farm1 cow Betsy slim cow Dazy Fat Cow Burger two cows Dartsy & Teo > grep -w cow farm1 cow Betsy slim cow Dazy > grep "slim cow" farm1 slim cow Dazy > grep ^cow farm1 cow Betsy > grep cow farm1 farm2 farm1:cow Betsy farm1:slim cow Dazy farm1:two cows Dartsy & Teo farm2:cow Leni farm2:cow Oreo > grep -n cow farm1 farm2 farm1:2:cow Betsy farm1:3:slim cow Dazy farm1:5:two cows Dartsy & Teo farm2:2:cow Leni farm2:4:cow Oreo > grep -l cow farm1 farm2 farm1 farm2 > grep -c cow farm1 farm2 farm1:3 farm2:2 > grep o$ farm1 two cows Dartsy & Teo farm1 farm2 goat Upton cow Betsy slim cow Dazy Fat Cow Burger two cows Dartsy & Teo horse Admiral sheep Brook cow Leni goat Aster cow Oreo מבוא לתכנות מערכות - 234122

  34. הפקודה cut • הפקודה cutמשמשת להפרדת עמודות מתוך הקלט > cut <options> [files] • -c<list>: הדפס רק את התוויםבשורה המתאימים לאינדקסים המבוקשים • -f<list>: הדפס רק את השדותבשורה המתאימים לאינדקסים המפורטים • השדות בשורה מופרדים כברירת מחדל ע"י Tab • אם התו המפריד אינו קיים בשורה תודפס כל השורה • -d"?": השתמש בתו שהוגדר כתו המפריד (עבור שימוש באפשרות -f) • רשימת האינדקסים המבוקשים מורכבת ממספר אינדקסים מופרדים בפסיק, כאשר בנוסף ניתן לבקש טווח אינדקסים ע"י שימוש בתו - (מקף) • למשל: -c1,2,5-6,10- ידפיס את התווים, 1, 2, 5, 6, ו-10 ומעלה • אם האינדקסים המבוקשים מחוץ לתחום תודפס שורה ריקה מבוא לתכנות מערכות - 234122

  35. cut - דוגמאות > cut -c1-3,5,8-10 file1 a11a a1 b21b b2 c31c c3 > cut -d" " -f2,4 file1 a12 a14 b22 b24 c32 c34 > cut -d":" –f1 file2 a11 b21 c31 c32 c33 > cut -d":" –f2-3 file2 a12:a13 b22 c31 c32 c33 > cut -d" " -f-2,4- file1 a11 a12 a14 a15 b21 b22 b24 b25 c31 c32 c34 c35 file1 file2 a11 a12 a13 a14 a15 b21 b22 b23 b24 b25 c31 c32 c33 c34 c35 a11:a12:a13 b21:b22 c31 c32 c33 מבוא לתכנות מערכות - 234122

  36. הפקודה wc • הפקודה wcמשמשת לספירת תווים, מילים או שורת בקלט > wc [options] [files] • -c: מדפיסה את מספר התווים בלבד • -l: מדפיסה את מספר השורות בלבד • -w: מדפיסה את מספר המילים בלבד • אם לא צוין דגל מסוים wc מדפיסה אתכל שלושת המספרים • אם הפקודה מופעלת על מספר קבציםמודפסת גם שורת סיכום > wc -w war_and_peace 590234 war_and_peace > wc -l war_and_peace 55480 war_and_peace > wc -c war_and_peace 3348543 war_and_peace > wc mtm_ex2.h 120 641 4161 mtm_ex2.h > wcmtm_ex2.h parsing_example.c 120 641 4161 mtm_ex2.h 136 692 4543 parsing_example.c 256 1333 8704 total מבוא לתכנות מערכות - 234122

  37. הפקודה tee • הפקודה tee משמשת לשכפול הפלט > tee [options] [files] • משכפלת את הקלט הסטנדרטי ומדפיסה אותו לפלט הסטנדרטי ולכל אחד מהקבצים ברשימה [files] • -a: משרשרת לקבצים במקום לכתוב אותם מחדש • מבנה הפקודה אינו סטנדרטי, היא מקבלתקלט רק מהקלט הסטנדרטי > head -3 a_file | tee file1 file2 | tail -2 a line 2 a line 3 > cat file1 a line 1 a line 2 a line 3 מבוא לתכנות מערכות - 234122

  38. הפקודה printf • הפקודה printfמאפשרת הדפסה מעוצבת של טקסט בדומה לפונקציה ב-C > printf <format> [arguments] • %s: מציין במחרוזת הפורמט שיש להכניס כאן את ערך הארגומנט הבא • %[-]m[.n]s: מדפיסה את המחרוזת המתאימה מרשימת המחרוזות כך שהתוצאה תהיה באורך m תווים ותכיל לכל היותר n תווים מהמחרוזת. המחרוזת תהיה מיושרת לימין אלא אם מופיע - (מקף). > printf "%s %s! \n" Hello world Hello world! > printf "%-10s %.5s\n" Hello world. Hello world! מבוא לתכנות מערכות - 234122

  39. תכניות סטנדרטיות ב-UNIX - סיכום • ניתן להשתמש במגוון תכניות סטנדרטיות ב-Unix הפועלות משורת הפקודה ומבצעות פעולות בסיסיות • ניתן להדפיס את תחילת או סוף הקלט ע"י head ו-tail • ניתן למיין את הקלט לפי שורות בעזרת sort • ניתן להשמיט שורות זהות בעזרת uniq • ניתן לחפש שורות מסוימות בקבצים בעזרת grep • ניתן להפריד עמודות ספציפיות מהקלט בעזרת cut • ניתן לספור את מספר המילים והשורות בקלט בעזרת wc • ניתן לשכפל את ערוץ הפלט בעזרת הפקודה tee • ניתן להדפיס מחרוזות בעזרת printf מבוא לתכנות מערכות - 234122

  40. עבודה ב-Bash תכונות מתקדמות של bash עבודת ה-bash מבוא לתכנות מערכות - 234122

  41. הפקודה echo • במקרים רבים נרצה להדפיס לפלט מחרוזת, לשם כך ניתן להשתמש בפקודה echo • הפקודה echoמדפיסה את הפרמטרים שקיבלה > echo [-n] [words] • -n: מדפיס ללא ירידת שורה > echo Hello world! Hello world! > > echo –n Hello world! Hello world! > מבוא לתכנות מערכות - 234122

  42. נתינת כינויים לפקודות - alias • הפקודה alias מאפשרת להגדיר קיצורים ב-Shell > alias <new name>="<command + parameters>" • אסור לשים רווחים בסמוך לתו '=' • לאחר הרצת הפקודה נוכל לרשום את הפקודה <new name> כקיצור לפקודה <command> עם הפרמטרים שהוספנו. • ה-Shell יבדוק בשלב עיבוד הפקודה האם המילה הראשונה היא alias ואם כן יבצע החלפה מתאימה • כדי לבטל alias ניתןלהשתמש בפקודה unalias <alias> < alias ll="ls –l" > ll -rw-r--r-- 1 user staff 0 Nov 13 15:14 a.c > alias cdex2="cd ~/mtm/ex2" > cdex2 > alias GCC="gcc -std=c99 -Wall -Werror -pednatic-errors" > GCC hello.c -o hello > unalias GCC > GCC hello.c -o hello -bash:GCC: Command not found. מבוא לתכנות מערכות - 234122

  43. Filename Expansion • ניתן לרשום בפקודה תבנית המתייחסת למספר קבצים. במקרה זה bash יחליף את מחרוזת התבנית בפקודה ברשימת הקבצים המתאימים לתבנית • הסימן * מתאים למחרוזת כלשהי (כולל ריקה) • הסימן ? מתאים לתו כלשהו יחיד • ניתן להתייחס למספר תווים אפשריים על ידי שימוש ב-[ ] • ניתן לרשום את התווים האפשרייםאחד אחרי השני במפורש • ניתן לרשום טווח של תווים, למשל a-z • ניתן להתייחס למספר מחרוזות שונות בעזרת { } • אפשרות זו אינה מתחשבת בקבצים קיימים <ls axb.c a3b.c cab.txt a4b.txt > echo files: * files: axb.ca3b.c cab.txt a4b.txt > echo The source files are *.c The source files are axb.c a3b.c > echo a[0-9]b.* a3b.c a4b.txt > echo a3b.{c,txt} a3b.c a3b.txt מבוא לתכנות מערכות - 234122

  44. משתנים • ניתן להציב ערך למשתנה ב-bash על ידי השמה ישירה > <varname>=<value> • אין צורך להכריז על משתנים ב- bash, לאחר ביצוע השמה למשתנה הוא מוגדר אוטומטית • ניתן להחליףערך של משתנה על ידי השמה נוספת • אסור לשים רווח בין סימן ההשמה לשם המשתנה והערך • אם יהיה כזה רווח ה-Shell ינסה להריץ פקודה ששמה כשם המשתנה • ניתן לקרוא משתנים על ידי שימוש באופרטור $, למשל: > echo $<varname> • השימוש במשתנה הוא פשוט החלפת הקריאה למשתנה בערך השמור בו מבוא לתכנות מערכות - 234122

  45. משתנים • ניתן לבטל הגדרה של משתנה על ידי הפקודה unset <varname> < unset my_variable • בדרך כלל אין צורך בכך • אם מנסים לקרוא משתנה שאינו מוגדר אז לא מודפס כלום • ניתן להשתמש ב-{} כדי לסמן מהו שם המשתנה לאופרטור $ • מועיל כאשר השימוש במשתנה צמוד למחרוזת נוספת > a=Hell > echo $ao > echo ${a}o Hello מבוא לתכנות מערכות - 234122

  46. משתנים - מערכים • ניתן לשמור במשתנה יחיד מערךשל מחרוזות על ידי שימוש בסוגריים > arr=(1 2 3) • קריאת משתנה שקולה לקריאת האיבר הראשון (אינדקס 0) מהרשימה > echo $arr1 • קריאת כל המערך ניתנת מתבצעת על ידי שימוש ב-[*] ובסוגריים מסולסלים: > echo ${arr[*]{1 2 3 > echo $arr[*]1[*] • ניתן לגשת לאיבר יחיד בעזרת אופרטור [ ] • ניתן להוסיף איברים חדשים למערך בשיטה זו > arr[3] = 4> echo ${arr[*]{1 2 3 4 מבוא לתכנות מערכות - 234122

  47. משתנים - מערכים • ניתן לקבל את מספר האיברים במערך בעזרת {#<varname>[*]}$: > echo ${#arr[*]}4 • ניתן לגשת לתחומים של איברים במערך במערך > echo A:${arr[*]:0:2} A:1 2 > echo B:${arr[*]:1} B:2 3 4 > echo C:${arr[*]:2:1}C:3 • המספר הראשון מציין את אינדקס ההתחלה של התחום • המספר השני מציין את מספר האיברים בתחום • אם הוא אינו מופיע יודפסו כל האיברים החל מהאינדקס המבוקש מבוא לתכנות מערכות - 234122

  48. משתנים - מחרוזות • ניתן לשמור מחרוזות המכילות רווחים בעזרת שימוש בגרשיים כפולים > list=(Matam "Hello world" 17) > echo ${#list[*]} : ${list[*]} 3 : Matam Hello world 17 > echo ${list[1]} Hello world • קריאת משתנה שערכו מכיל רווחים תגרום לאיבוד הרווחים המדויקים שהיו בין המילים קודם לכן > str=" Very crazy spaces " > echo $str Very crazy spaces מבוא לתכנות מערכות - 234122

  49. משתנים - מחרוזות • ניתן להשתמש בגרשיים כפולים כדי לשמור על הרווחים בזמן ההחלפה > echo "$str" Very crazy spaces • ניתן לקבל את מספר התווים במשתנה ע"י שימוש ב-#, בדומה לקבלת אורכו של מערך > echo ${#str} 29 מבוא לתכנות מערכות - 234122

  50. משתנים - מערכים • ניתן להתייחס למשתנה רגיל כאל רשימה בעלת איבר יחיד > a=Hello > echo ${a[0]} Hello > str="Hello world" > echo ${str[1]} > list=(Hello world) > echo ${list[1]} world • בעזרת unset נוכל לבטל את הרשימה או איבר אחד מתוך הרשימה > unset list[1] > echo ${list[*]}Hello מבוא לתכנות מערכות - 234122

More Related