1 / 40

תרגול מס' 7

תרגול מס' 7 . תוכניות סטנדרטיות ב- UNIX C-Shell. לי-טל משיח litalma@cs.technion.ac.il. UNIX תוכניות סטנדרטיות ב-. בכל מחשב אשר מותקנת בו מערכת הפעלה מסוג Unix מותקנות בנוסף מספר תוכנות סטנדרטיות אשר ניתן להיעזר בהן ניראה מספר תוכניות ודרכים לשלב בינהן. קבלת רשימת הקבצים במדריך.

cullen
Download Presentation

תרגול מס' 7

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. תרגול מס' 7 תוכניות סטנדרטיות ב-UNIX C-Shell לי-טל משיח litalma@cs.technion.ac.il

  2. UNIX תוכניות סטנדרטיות ב- • בכל מחשב אשר מותקנת בו מערכת הפעלה מסוג Unix מותקנות בנוסף מספר תוכנות סטנדרטיות אשר ניתן להיעזר בהן • ניראה מספר תוכניות ודרכים לשלב בינהן

  3. קבלת רשימת הקבצים במדריך • הפקודה ls מדפיסה את רשימת הקבצים הנמצאים במדריך הנוכחי. אפשרויות נוספות: • ls <directory name> מדפיסה את רשימת הקבצים הנמצאים בתת המדריך. • הפקודה ls עם הדגל -l מאפשרת לראות את רשימת הקבצים במדריך הנוכחי באופן מפורט יותר • הפקודה ls עם הדגל -a מאפשרת לראות בנוסף גם קבצים נסתרים (קבצים ששמם מתחיל ב"." – בד"כ קבצי אתחול לתוכניות שונות) > ls progs > ls progs hello > ls -l total 7 -rw-r--r-- 1 ari 2425 Mar 12 11:59 moshe drwx------ 2 ari 512 May 13 03:30 progs > ls -a . . .cshrc .login moshe progs

  4. סקירת תוכן קבצים • הפקודה cat >cat file_1 file_2 … file_k מדפיסה את תוכן הקבצים file_1,file_2,…,file_k לפלט הסטנדרטי • הפקודה head [-n] [files] מדפיסה רק מספר מהשורות הראשונות של קובץ. האופציה -n מאפשרת להדפיס n מהשורות הראשונות (ברירת המחדל היא 10). >head -20 phone ידפיס את 20 השורות הראשונות בקובץ phone • הפקודה tail [options] [files] מדפיסה רק מספר מהשורות האחרונות של קובץ האופציה -nמאפשרת להדפיס את n השורות האחרונות בקובץ (ברירת המחדל היא 10). האופציה +n מאפשרת להדפיס את כל השורות האחרונות החל מהשורה ה n -ית בקובץ.

  5. שילוב תוכניות • נרצה להדפיס את השורות השניה והשלישית של קובץ בשם myfile • יצרנו קובץ זמני בשם first3 אשר נידרש למחקו אח"כ • נראה דרך פשוטה יותר לביצוע משימה זו של הפניית פלט של תוכנית אחת לקלט של התוכנית הבאה ע"י שמוש ב pipelining – העברה ישירה של פלט של תוכנית אחת לקלט של תוכנית אחרת > head –3 < myfile > first3 > tail –2 < first3

  6. Pipelining <program1> | <program2> program2 לוקחת כקלט את הפלט של program1. ניתן לבצע שרשור מסוג זה למספר תוכניות, כך שכל תוכנית לוקחת כקלט את הפלט של קודמתה, ומעבירה את הפלט שלה לבאה אחריה ברשימה > cat myfile | head –3 | tail –2 >ls aaa bbb ccc ddd >ls | head –3 aaa bbb ccc

  7. teeהפקודה tee [options] [files] • לעיתים נרצה לשמור את הפלט אשר מוציאה פקודה הנמצאת באחד השלבים הפנימיים של ה piepeline • הפקודה משכפלת את כל מה שנכנס לקלט הסטנדרטי שלה ושולחת אותו הן לפלט הסטנדרטי והן לכל אחד מהקבצים ב [files] • לדוגמא: אם בנוסף להצגת השורה השניה והשלישית נרצה לשמור את שלושת השורות הראשונות של הקובץ myfile בשני קבצים שונים, נוכל לבצע : • אופציות נוספות: • האופציה -a מאפשרת שרשור של הפלט לסוף הקבצים [files] במקום מחיקתם. > head –3 myfile | tee file1 file2 | tail –2

  8. sortהפקודה sort [options] [files] • ממיינת את שורות הקבצים [files], בדרך כלל בסדר א"ב. • אופציות נוספות: • -b התעלם מרווחים בתחילת השורה • -d מבצע מיון בסדר מילוני (מתעלם מפיסוק) • -f מתעלם מהבדליuppercase/lowercase • -m ממזג מספר קבצים שכבר מויינו לקובץ אחד (יותר יעיל מאשר למיין אותם שוב אם הם כבר ממויינים). • -n משווה על פי ערך מספרי. • -ofileמדפיס את הפלט לקובץ file. • -r הופך את סדר המיון. • u- שורות זהות תופענה בפלט פעם אחת בלבד. • +n לפני ביצוע המיון דלג על n המילים הראשונות.

  9. - דוגמאותsortהפקודה > cat data World whould for Fater > sort data Fater World for whould > sort data -f Fater for whould World > sort data -r whould for World Fater > ls -l total 6 -rw------- 1 romano root 23 Nov 8 23:09 data -rw------- 1 romano 368 243 Nov 8 23:12 ex1 -rw------- 1 romano 368 428 Nov 8 23:22 ex2 -rw------- 1 romano 368 0 Nov 10 13:30 ex3 > ls -l | sort +4 > lsdata > more lsdata total 6 -rw------- 1 romano 368 0 Nov 10 13:30 ex3 -rw------- 1 romano root 0 Nov 10 13:31 lsdata -rw------- 1 romano root 23 Nov 8 23:09 data -rw------- 1 romano 368 243 Nov 8 23:12 ex1 -rw------- 1 romano 368 428 Nov 8 23:22 ex2 >

  10. grepהפקודה grep [options] [^]word [files] • מחפשת בקבצים [files] שורות בהן מופיעה המילה word וכותבת אותם לפלט הסטנדרטי. • אם רוצים לחפש שורות בהן מופיע ביטוי המורכב ממספר מילים המופרדות ע"י רווחים, כותבים את הביטוי בין גרשיים >grep "It is" file • אפשרויות נוספות: -c הדפס רק את מספר השורות שנמצאו -h הדפס את השורות עצמן ללא שמות הקבצים, בהם השורות נמצאו -i התעלם מהבדלי uppercase/lowercase -l הדפס רק את שמות הקבצים בהם השורות נמצאו ללא הדפסת השורות עצמן -n הדפס את השורות ואת מספרן בקבצים -vהדפס את כל השורות, בהן לא מופיעהword -wהדפס את כל השורות בהן מופיעה word בדיוק (לא כתת מחרוזת) ^word- הדפס את כל השורות המתחילות ב word

  11. - דוגמאותgrepהפקודה > more file1 Arik ! Have you heard news ? If not , listen ! > cat file2 Tomorrow we have a new exam ! So we cannot go to Ran's birthday . By . > grep -v -n new * | sort | head -3 file1:1:Arik ! file1:3:If not , listen ! file2:2:So we cannot go to Ran's birthday . > ls ex/ ex2 ex4 file2~ ex1 ex3 file1~ > ls | grep ex ex/ ex1 ex2 ex3 ex4 > ls | grep -c ex 5 > ls file1 file2 typescript > cat file1 file2 Arik ! Have you heard news ? If not , listen ! Tomorrow we have a new exam ! So we cannot go to Ran's birthday . By . > cat file2 file1 | grep new | sort -d –onews > more news Have you heard news ? Tomorrow we have a new exam !

  12. uniqהפקודה uniq [options] [file1 [file2]] • מורידה מהקובץ הממוין file1 את כל השורות הזהות הסמוכות, ושולחת עותק אחד של כל שורה לקובץ file2 (או בהעדר הקובץ file2, לערוץ הפלט הסטנדרטי). • אפשרויות נוספות: -c הדפס כל שורה פעם אחת בלבד וספור עותקים של כל שורה. -d הדפס שורות המופיעות יותר מפעם אחת, אך לא שורות המופיעות פעם אחת בלבד. -u הדפס רק את השורות המופיעות פעם אחת בדיוק. -n התעלם מ-nהמילים הראשונות (לפני קבלת ההחלטה אם שתי מילים זהות) הערה: השתמש בו זמנית רק באחת משלוש האופציות הראשונות

  13. - דוגמאותuniqהפקודה > more file3 one two two three three three > uniq file3 list > more list one two three > > more names Uri Dan Uri Elena Alex Ofra Uri Ofra > sort names | uniq -d Ofra Uri >

  14. cutהפקודה cutoptions [files] הפקודה cut בוחרת תווים או שדות רצוים מכל אחת מהשורות מקבצי הקלט files. • אפשרויות נוספות: • -c list מאפשר לבחור תו מסויים או קבוצת תוים מתוך שורה מסויימת, כאשר ב - list מופיעים המספרים של התוים הרצוים • -f list מאפשר לבחור שדה או קבוצת שדות מתוך שורה מסויימת, כאשר ב - list מופיעים המספרים של השדות הרצוים • -d”c” משמשת בנוסף לאופציה -f . מאפשרת לקבוע מי התו המפריד בין השדות. שדה הינה קבוצת תווים המסתיימת בתו c. ברירת המחדל היא התו <tab>

  15. - דוגמאותcutהפקודה במידה וקיים התו המפריד בשורה אך ניתן מספר שדה שאינו קיים אזי תתקבל שורה ריקה, אולם אם התו המפריד לא קיים בשורה, תודפס כל השורה. > cat file1 a11 a12 a13 a14 a15 b21 b22 b23 b24 b25 c31 c32 c33 c34 c35 > cut -c1-3,5,8-10 file1 a11a a1 b21b b2 c31c c3 > cut -d" " -f2,4 file1 a12 a14 b22 b24 c32 c34 > cat file2 a11:a12:a13 b21:b22 c31 c32 c33 > cat file2 | cut -d":" –f1 a11 b21 c31 c32 c33 > cat file2 | cut -d":" –f3 a13 c31 c32 c33

  16. wcהפקודה wc [options] [files] מאפשרת הדפסת ספירת מספר התוים, המילים או השורות בקבצים שונים • אפשרויותנוספות: -c הדפס את מספר התוים בלבד. -l הדפס את מספר השורות בלבד. -w הדפס את מספר המילים בלבד.

  17. - דוגמאותwcהפקודה > wc -l phonebook 12 phonebook > wc -w bible 333333 bible > wc -c data 8843 data אם לא ניתנת אופציה ניתן הפלט בפורמט : <# lines> <# words> <# chars> filename <wc data <193 1808 8843 data אם ניתנים כמה שמות קבצים מופיע גם סיכום: > wc data phonebook 193 1808 8843 data 12 100 654 phonebook 295 1908 9497 total

  18. printfהפקודה printfformat strings מדפיסה את המחרוזת string לפי הפורמט format. הפורמט יכול להכיל תווים רגילים או תווי עריכה. • דוגמאות של תווי עריכה: • %s - מדפיסה את המחרוזת המתאימה מתוך הרשימה strings. • - %[-]m[.n]s מדפיסה את המחרוזת המתאימה מרשימת המחרוזות כך שהתוצאה תהיה באורך של m תווים, אם אפשרות להגבלת מספר התווים המודפסים (מתוך המחרוזת הספציפית) ל - n. המחרוזת מיושרת לימין אלא אם כן משתמשים באופרטור -.

  19. - דוגמאותprintfהפקודה > echo $HOME /home/rotics > printf “My files are in %s\n“ $HOME My files are in /home/rotics > printf “number is : %10.5s” 123456789a number is: 12345 > printf “number is : #%-10.3s# %s\n” "123456789a" xxx number is: #123 # xxx > printf “My files are in %s\n“ $HOME “my PC” My files are in /home/rotics My files are in my PC • שמו לב מה קורה כאשר ישנן יותר מחרוזות ברשימה strings מאשר תווי עריכה (%s)

  20. CSHELL • במערכת ההפעלה Unix יש רכיב תוכנה שתפקידו לשמש מנשק בין המשתמש למערכת ההפעלה. שמו של רכיב זה הוא shell • תפקידו של ה Shell הנו לקיים את הקשר עם המשתמש ולקבל ממנו את הפקודות לביצוע • הקשר עם המשתמש מתבצע ע"י ה prompt • מיד לאחר ביצוע ה login מוצג prompt (לדוגמא < ). ה prompt מהווה סימן של ה-shell שהינו מוכן לבצע פקודה של המשתמש • לאחר שהמשתמש כותב את הפקודה, ה-shell מנתחה, ומעבירה למערכת ההפעלה לביצוע. לאחר שהפקודה סיימה להתבצע ה shell מציג את ה prompt ומוכן לקבל את הפקודה הבאה משתמש מערכת ההפעלה Shell > echo hello hello <

  21. במערכת ההפעלה Unix יש רכיב תוכנה שתפקידו לשמש מנשק בין המשתמש למערכת ההפעלה. שמו של רכיב זה הוא shell. תפקידו של ה Shell הנו לקיים את הקשר עם המשתמש ולקבל ממנו את הפקודות לביצוע. Shells in UNIX • ה Shell הנה תוכנית ככל תוכנית. קיימות ב Unix מספר תוכניות shell שונות. כולן מבצעות את אותה משימה, אך מספקות קישור ב"גוונים שונים" המאפשרים למשתמש לקבל סביבת מחשב שונה לבחירתו. • ישנם מספר shells נפוצים ב Unix: cshell, kshell, bourne shell ועוד. • אנו נלמד על ה cshell שהנו אחד ה shell הפופולרים.

  22. במערכת ההפעלה Unix יש רכיב תוכנה שתפקידו לשמש מנשק בין המשתמש למערכת ההפעלה. שמו של רכיב זה הוא shell. תפקידו של ה Shell הנו לקיים את הקשר עם המשתמש ולקבל ממנו את הפקודות לביצוע. SHELLתפקידיו של ה- • תפקידו של ה Shell הנו לבצע את הקשר עם המשתמש • ה- shell מבצע את תפקידו בשתי דרכים: • אינטראקטיבית– ה-shell מקבל פקודה מהמשתמש ומעבירה למערכת ההפעלה לביצוע. באופן עבודה זה, ה-shell מאפשר למשתמש לבצע "קיצורי דרך" : • Alias - הגדרת שמות קצרים לפקודות שהמשתמש מבצע פעמים רבות • History - זכירת הפקודות שהמשתמש ביצע בעבר ואפשור ביצוע מהיר שלהן ללא צורך בהקלדתן מחדש • File name expansion - אפשרות להתייחס למספר קבצים בקיצור • משתנים - הגדרה ושימוש במשתנים • תסריט(script) –ה shell מאפשר לשמור סדרת פקודות בקובץ ומאפשר למשתמש להריץ קובץ זה. הרצת קובץ זה תתבצע "כאילו" המשתמש הקיש פקודה אחר פקודה. ה shell מספק שפה פשוטה הכוללת משתנים ומבני בקרה, המאפשרים כתיבת תסריטים "אינטליגנטיים". היתרון בכתיבת תסריט על פני תוכנית ב-C לדוגמא, הנו היכולת הקלה להשתמש בתוכניות שכבר נכתבו וקיימות במערכת

  23. במערכת ההפעלה Unix יש רכיב תוכנה שתפקידו לשמש מנשק בין המשתמש למערכת ההפעלה. שמו של רכיב זה הוא shell. תפקידו של ה Shell הנו לקיים את הקשר עם המשתמש ולקבל ממנו את הפקודות לביצוע. Command Aliases alias <new name> <command name> • נותן את השם new name לפקודה command name > alias del rm > del file2 • פקודות אלו מוחקות את הקובץ file2. • alias - מציגה את כל ה aliases. לדוגמא, נניח כי רק ה alias הנ"ל הוגדר: > alias del rm • דוגמא נוספת: alias cdex2 "cd ~mtm/public/0506b/ex2"

  24. history מכניזם לחזור על פקודות קודמות • !! - יבצע שוב את הפקודה האחרונה • !vi - יבצע שוב את הפקודה האחרונה המתחילה ב- vi • history - מציג את רשימת הפקודות ברשימה. ניתן לקבוע את מספר הפקודות אשר ה-shell "זוכר אחורה" על ידי קביעת ערכו של המשתנה history • !<n> - יבצע שוב את הפקודה שמספרה n ברשימה • בנוסף ה-Shell מאפשר לבצע פקודות הנשמרות בהיסטוריה בעזרת מקשי החיצים >set history=100 • הפקודה קובעת את מספר הפקודות הנזכרות ל 100

  25. Filename expansions • רב הפקודות ב-UNIX מקבלות שמות של קבצים, לכן ה-Shell מספק מנגנון מקל בכתיבתם. הפקודה מכילה תבנית במקום שם קובץ, ה- Shellמרחיב את הביטוי בהתאם • את התבנית בונים בעזרת תווים הנקראים Wildcards • *מתאים לכל מחרוזת תווים באורך אפס או יותר • ?מתאים לכל תו בודד אחד • []מתאים לכל אחד מהתווים בין [ ל- ] a[rxz]b -> arb, axb, azb

  26. Filename expansionsדוגמאות *.c כל הקבצים עם סיומת c *AD* קבצים שבשמותיהם צירוף האותיות AD > gcc -c *.c תקמפל את כל הקבצים עם הסיומת .c <rm prog1.? תמחק את כל הקבצים שמתחילים ב-prog1. ולאחר מכן יש בדיוק תו אחד file[13] מציין את כל הקבצים ששמותיהם מתחילים ב- file ושאחרי אותיות אלו מופיע או 1 או 3. file[A-Za-z13] מציין את כל הקבצים ששמותיהם מתחילים ב- file ושאחרי אותיות אלו מופיעה אחת מאותיות ה-א"ב האנגלי או אחת מהספרות 1 או 3.

  27. משתנים set <variable> = <value> • מגדירה כי קיים משתנה בשםvariable וקובעת את ערכו ל- value. • Value יכל להיות • מספרים שלמים • מחרוזת • רשימה של מחרוזות ומספרים • אין צורך להכריז על משתני cshell: המשתנים מוגדרים ברגע שמציבים להם ערכים. • בכדי לקבל את ערכו של המשתנה יש להשתמש ב- $ $<variable> • מחזיר את ערך המשתנה variable > set v = abc > echo $v abc > set v = 123 > echo $v 123

  28. משתנים מספריים • ב - cshell ניתן להשתמש במשתנים המכילים מספרים שלמים ולבצע עליהם פעולות חשבון פשוטות • הסימן '@' בתחילת פקודה מסמן לחשב את הביטוי המספרי בפקודה. במידה ורוצים לאתחל את ערכו של משתנה לקבוע ניתן להעזר בפקודה set. אולם בכדי לבצע פעולות חשבוניות חייבים להשתמש ב @ • שימו לב: • יש לשים רווח אחרי '@' ולפני הפקודה • האסוציאטיביות אינה סטנדרטית. לדוגמא ערך הבטוי 2-3+4 הנו 5- ולא 3 כפי שניתן היה לצפות > @ i = 3 > echo $i 3 > @ i = $i + 1 > echo $i 4 > @ i ++ > echo $i 5 > set v = 12 > @ v = $v + $i > echo $v 17

  29. מחרוזות • ב - cshell, כל רצף של תווים נקרא מחרוזת, אולם אם רוצים לעבוד עם מחרוזות המכילות יותר ממילה אחת (מכילות רווחים) יש לתחום אותן בין גרשיים ( " ). > set a = "abc def ghe" > echo $a abc def ghe • שימו לב כי למרות שהמילה מכילה רווחים זו עדיין מילה אחת

  30. רשימות • עבור משתנה a המכיל רשימה של ערכים מציין הביטוי a[i] את האיבר ה-i ברשימת הערכים a • בcshell- מספור האיברים ברשימה a מתחיל מ1- (ולא מ0-). • cshell לא תומך ברשימות מקוננות (רשימה בתוך רשימה) ולכן על הפקודה: > set v[3] = (12 abc 34) נקבל שגיאה: set: syntax error > set v = (123 def ghi) > echo $v 123 def ghi > echo $v[2] def > set v[3] = ww > echo $v 123 def ww

  31. פעולות על רשימות עבור משתנה a המכיל רשימה של ערכים, • הביטוי ${#a} מציין את מספר האיברים ברשימה • הביטוי a[m-n] מציין את תת-הרשימה, מהאיבר ה- m עד לאיבר ה- n • הביטוי a[-n] מציין את תת-הרשימה, מהאיבר הראשון עד לאיבר הn- • הביטוי a[m-] מציין את תת-הרשימה, מהאיבר ה-m עד לסוף הרשימה • הביטוי a[*] מציין את הקבוצה המורכבת מכל איברי הרשימה

  32. רשימות - דוגמאות > set a = ( aa bb cc dd ee ) > echo $#a 5 >echo $a[3-] cc dd ee >echo $a[2-4] bb cc dd > echo $a[-3] aa bb cc עבור רשימת ערכים a, הפעולה shift a מזיזה את כל איברי הרשימה מקום אחד שמאלה ומבטלת את האיבר הראשון. > set v = ( go to the beach ) > echo $v[1] go > shift v > echo $v[1] to > echo $v to the beach

  33. נקודות מתקדמות בנוגע למשתנים • ניתן להתייחס לכל משתנה המכיל מחרוזת או מספר כרשימה בת איבר אחד. ולכן הפעולות: > set a = “abc def ghi” > echo $a[1] abc def ghe הינן חוקיות. אבל, הפקודה הבאה תגרום שגיאה > echo $a[2] a: Subscript out of range. • ניתן לפרק מחרוזת לרשימת המילים המופיעות בה ע"י השמת המחרוזת בתוך סוגריים. זו הדרך הסטנדרטית להפוך מחרוזת שבה רווחים רבים לרשימה שבה בין המילים מופיע רק רווח אחד >set b = ($a) >echo $b abc def ghe >echo $b[2] def • ניתן להשתמש בסוגריים מסולסלות בכדי להדגיש מהו שמו של משתנה. הדבר שימושי במיוחד כאשר רוצים להוסיף סיומת לערכו של משתנה: > set b = 123 > set a = ${b}4 > echo $a 1234

  34. Command substitution • ב - cshell אפשר להשתמש בפקודות מקוננות, כלומר, בתוך פקודה מסויימת אפשר להשתמש בתוצאה של פקודה אחרת הכתובה בתוכה • על מנת לעשות זאת יש להקיף את הפקודה המקוננת בגרשיים הפוכים (המכונים באנגליתbackquotes או backticks), ואז מובטח כי היא תתבצע לפני ביצוע שאר השורה ותוחלף בערך המוחזר מביצוע הפקודה > echo you have `ls | wc -l` files in `pwd` you have 43 files in /home/rotics • מתבצע קודם שיערוך של הפקודות הפנימיות (פקודה הסופרת את מספר השורות המתקבלות כתוצאה מהרצת הפקודה ls ופקודה המחזירה את השם של המדריך הנוכחי /home/rotics) ולאחר מכן תוצאותיהן משובצות בפקודה החיצונית - פקודת echo

  35. Command substitutionדוגמא > cat list file1 file2 file3 > cat file1 you are in file1 Buy a Selkom phone > cat file2 you are in file2 buy Motorola Pelephone > cat file3 you are in file3 Im Grimberg Matzliah Ata Marviach > cat `cat list` you are in file1 Buy a Selkom phone you are in file2 buy Motorola Pelephone you are in file3 Im Grimberg Mazliah Ata Marviach

  36. CSHELLכיצד עובד ה- • ניתן לראות את ה-C-Shell כ-Macro Processor מתוחכם, העובד בלולאה: • הצגת prompt • קבלת פקודה • נתוח הפקודה, עיבודה וביצועה • לצורך ביצוע עבודתו, תוכנית ה C-Shell מנהלת מספר מבני נתונים: • רשימת הפקודות האחרונות שבוצעו. • רשימת המשתנים • רשימת ה alias. סדר עבודת ה C-shell: • ניתוח הפקודה:הפקודה מופרדת למילים. התווים רווח ו-Tab משמשים כמפרידים בין מילים • עיבוד הפקודה:ביצוע החלפות לקבלת פקודה פשוטה. מבוצעות החלפות היסטוריה, משתנים וכד • ביצוע הפקודה:הפקודה הפשוטה שהתקבלה מבוצעת

  37. עיבוד הפקודה )pipeline ו redirection(ללא 1. במידה והפקודה מכילה שמוש בפקודות קודמות (ע"י השמוש בסימן !) מתבצע History Substitution 2. שורת הפקודה שהתקבלה נשמרת ברשימת ההיסטוריה של הפקודות שבוצעו. במידה ובוצעו החלפות ההסטוריה שורת הפקודה (לאחר ההחלפות) מודפסת למסך > echo AAA AAA > echo !! echo echo AAA echo AAA 3. אם המילה הראשונה בפקודה הנה שם של alias מתבצע alias substituion. 4. בצוע variable substitution 5. בצוע File name substitution 6. בצוע command substitution. הback-quoted string (`... `) מוחלפת בתוצאת הפקודה

  38. ביצוע הפקודה לאחר בצוע כל ההחלפות הפקודה מבוצעת. ישנן שתי סוגי פקודות: • פקודות חיצוניות • ניתן להריץ כל תוכנית הקיימת במערכת. ה-Shell יפעיל את התוכנית ויעביר לה את הארגומנטים (במידה וניתנו לה) • בכדי למצוא את התוכנית ניתן: • לתת את מיקומה המדויק (full path name). • לתת רק את שם התוכנית וה C-Shell יחפשה. החיפוש יתבצע בכל המדריכים המופיעים ברשימה של המשתנה path. • פקודות פנימיות • פקודות שניתנות לתוכנית ה C-shell עצמה ומבוצעות ע"י ה Shell שמפרש את הפקודה. • ניהול ההסטוריה (history) • ניהול רשימת המשתנים (set/unset/shift) • ניהול רשימת ה alias (alias/unalias) • שינוי ה working directory (cd) • בקרת זרימה בתסריטים (בתרגול הבא) • ניהול תהליכים

  39. עיבוד הפקודה – נקודות מתקדמות I/O redirection • I/O redirection מתבצע ע"י ה-Shell. תפקידו להפנות את הקלט והפלט של הפקודה המבוצעת לערוץ המתאים: מקלדת/מסך/קובץ • הפקודה המבוצעת כלל אינה מודעת לכך שבוצע I/O redirection, כיוון שכל ההפניות מבוצעות ע"י ה- Shell Pipeline • ה-pipeline הינו סדרת פקודות המופרדות ע"י התו ‘|’. הפקודות מבוצעות באופן סדרתי האחת אחר השניה, כאשר ה Shell מפנה את ה standard output של כל פקודה ב pipeline ל standard input של הפקודה הבאה האחריה מחרוזות • ה-shell מפריד את שורת הפקודה למילים. התווים רווח ו tab מהווים מפרידים בין מילים • במידה ונרצה שמילה תכיל רווחים (למשל כארגומנט לפקודה) יש לשים את המילים הנפרדות בתוך גרשיים וה shell יתייחס אליהן כאל מחרוזת – מילה אחת.

  40. עיבוד הפקודה – סוגי גרשיים ` - גרש הפוך (back quote) " - גרשים כפולות (double quote) ' - גרש יחיד (single quote) • back quotes משמשים לצורך command substitution. ה-shell מתייחס לכל המחרוזת בין ה-back quotes כאל פקודה אחת ומבצע אותה. תוצאת הפקודה מוחלפת במחרוזת הפקודה. במידה ובתוצאת הפקודה ישנם רווחים אזי ה-shell יתייחס לתוצאת הפקודה כאל מספר מילים • single quotes ו double quotes משמשים בכדי לגרום ל Shell להתייחס למספר מילים (מופרדות ברווחים וטאבים) כאל מילה אחת. ע"י השמת מחרוזת בין גרשיים ניתן לגרום ל-Shell להתנהג באופן שונה מהרגיל. • החלפת משתנים – במידה ומופיעה התייחסות למשתנה בתוך ה- double quoted string המשתנה יוחלף בערכו. במידה וההתיחסות מופיעה בתוך single quoted string לא תתבצע החלפה: > set a = AAA > echo “a=$a” a=AAA > echo ‘a=$a’ a=$a • החלפת שמות קבצים – לא מבוצעת עבור single or double quoted strings. • החלפת פקודות– כאשר המחרוזת ב back quotes מופיעה בתוך double quote ה shell מתייחס לתוצאת כאל מילה אחת.

More Related