תסריטים ניהול תהליכים ב-UNIX

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
מבוא כללי למדעי המחשב תרגול 1. כתיבת התוכנה כתיבת התוכנית עצמה נעשית ע " י כתיבת קובץ טקסט רגיל אשר תוכנו מקיים את כללי שפת C כתיבת התוכנית עצמה נעשית.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תירגול 1 אדמיניסטרציה עבודה עם t2 מערכת הקבצים ב - Unix תכנית ראשונה ב -Unix, gcc.
תרגול 6 תוכניות שרות סטנדרטיות ב -UNIX C-Shell לי-טל משיח נערך והורחב ע''י ודים אייזנברג.
1 מבוא למדעי המחשב תרגול מספר 2. 2 בשיעור הקודם... הגדרות שפת מחשב, שפה עילית, קומפיילר, תוכנית בשפת C, קובץ הרצה קובץ (טקסט) המכיל תוכנית בשפת C (hello.c)
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
תרגול 7 תסריטים ניהול תהליכים ב -UNIX לי-טל משיח נערך והורחב ע'' ודים אייזנברג.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
חלון הפקודות מיועד לבצע פעולה אחת בכל פעם. כיצד אפשר לבצע רשימת פקודות או אפליקציות מורכבות ?
1 מבוא למדעי המחשב מבנה של תכנית. 2 מבנה של תכנית – חלוקה לקבצים  תכנית בשפת C הינה אוסף של הגדרות של:  משתנים (חיצוניים)  פונקציות  ניתן לפרוש תכנית.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
ברוכים הבאים למת"ם! אדמיניסטרציה מטרת הקורס: לימוד תכנון וכתיבת תוכניות מורכבות תוך שמוש בכלי פתוח תוכנה מתקדמים. אתר הבית:
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מנפה שגיאות - DEBUGGER מבוא למדעי המחשב (234114) רועי מלמד
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
1 מבוא למדעי המחשב ארגומנטים לתוכנית בזמן ריצה קבצים הקדם מעבד Preprocessor טיפוסים סדורים Enumerated Types Typedef.
תרגול 6 תוכניות שרות סטנדרטיות ב -UNIX C-Shell לי-טל משיח נערך והורחב ע''י ודים אייזנברג.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא לשפת C תרגול 4: ביטויים לוגיים ומשפטי תנאי מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב"
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Text to speech In Mobile Phones איתי לוי. הקדמה שימוש בהודעות טקסט על המכשירים הסלולארים היא דרך תקשורת מאוד פופולארית בימינו אשר משתמשים בה למטרות רבות,
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 1 שבוע : צור קשר מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. דואר אלקטרוני :
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
1 Shell Scripting (C shell) SungHo Maeung 10/27/2000 Tutorial section Computer Science Lab.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
מחרוזות – הטיפוס String
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
מבוא למדעי המחשב סיבוכיות.
קבצי script ניהול תהליכים ב-UNIX
כתיבת תסריטים ב-bash בקרת תהליכים ב-UNIX שאלות ממבחנים
תוכניות סטנדרטיות ב-UNIX C-Shell
Computer Programming Fall 2012 תרגול
עבודה עם נתונים באמצעות ADO.NET
מבוא ל Maven אליהו חלסצ'י תכנות מתקדם תרגול מספר 3
תזכורת על מה דיברנו שיעור שעבר? בנינו אתר אינטרנט עם כותרות
Shell Scripts בסביבת UNIX
תוכנה 1 תרגול 13 – סיכום.
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Shell Programming.
Presentation transcript:

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

תסריטים (קבצי script) קבצים אשר מכילים סדרה של פקודות shell נכתבים בקובץ טקסט רגיל ניתן להריץ אותם מספר פעמים אין צורך בהידור לדוגמא, קובץ טקסט בשם clean echo “Cleaning !” rm *.o mv ex1 ex1.old

הרצת תסריטים דרך אחת - הפקודה source > source clean תודפס הודעה “Cleaning !” יימחקו כל קבצי אובייקט בתיקייה הנוכחית שם הקובץ ex1 ישונה לקובץ ex1.old

שפת התסריטים C-shell שפת התסריטים C-shell היא שפת תכנות לכל דבר משתנים כולם מאותו טיפוס - מחרוזת או רשימה של מחרוזות פעולות אריתמטיות רק בשלמים לולאות (while ואחרות) משפטי תנאי (if else) הערות : מסימן # ועד סוף השורה ,goto, switch ודברים אחרים בדומה לשפת C בשביל מה צריך עוד שפת תכנות ??? התשובה בסוף התרגול

ניצול יכולות של C-shell משתנים Alias Substitution File name expansion Command Substitution backticks `` I/O redirection pipelining

לולאות ב- C-shell: repeat cshell מבצע את הפקודה command בדיוק count פעמים : שימו לב שכל לולאה של C-shell ניתן להריץ גם ב- command line repeat <count> <cshell command> <repeat 3 echo Congratulations, Shifra ! Congratulations, Shifra ! >

לולאות ב- C-shell: while while (<expression>) <cshell commands> end > source count10 1 2 3 4 5 6 7 8 9 # count10 script: @ i = 0 while ($i<10) echo $i @ i++ end

לולאות ב- C-shell: foreach foreach <variable> (<list>) <cshell commands> end הלולאה מתבצעת מספר פעמים השווה לגודל הרשימה list בכל איטרציה של הלולאה, המשתנה variable מקבל ערך אחד מהרשימה לפי הסדר

foreach : דוגמאות # final_vote script set number = 1 foreach name (Itai Yossi Leon Einav Shifra) echo for $name send the number $number @ number++ end > source final_vote for Itai send the number 1 for Yossi send the number 2 for Leon send the number 3 for Einav send the number 4 for Shifra send the number 5

foreach : דוגמאות יצירת העתק של כל קבצי c בתיקייה הנוכחית: foreach FILE (*.c) cp $FILE $FILE.back end

משפטי תנאי (if ... else) שתי גרסאות: if (<expression>) <one cshell command> if עם כמה פקודות ועם אופציה ל-else if (<expression>) then <cshell commands> [else <cshell commands>] endif בגרסה הזאת חייבים then וגם endif בגרסה הזאת חייבים then

דוגמא של if if ($votes_for_yossi > $votes_for_shifra) then echo Yossi won ! else echo Shifra won ! endif

תנאים בתוך משפטי if השוואת מחרוזות: if ($winner == "Yossi") … השוואת מספרים: if ($votes > 1000000) … תנאים מיוחדים ל-C-shell if (-d aaa) ... משוערך ל-true אם התיקייה בשם aaa קיימת בתוך התיקייה הנוכחית if (-f aaa) ... משוערך ל-true אם הקובץ בשם aaa קיים בתיקייה הנוכחית (והוא לא תיקייה)

תנאים בתוך משפטי if- התאמת מחרוזות אופרטור ~= משוערך ל-true אם המחרוזת בצד שמאל מתאימה לתבנית בצד ימין התבנית יכולה לכלול סימנים מיוחדים כגון: *,? או[] שמשמעותם תוארה בתרגול הקודם השלילה של האופרטור ~= היא ~!

תנאים בתוך משפטי if:התאמה בין מחרוזות אופרטורים =~, !~ > if (end_with_z =~ *[zZ]) echo match match > if ("no point in string" !~ *.*) echo "no point" no point > if ("point - . - in string" !~ *.*) echo "no point" >

סיכום: אופרטורים בתוך משפטי if אופרטורים של השוואה <, >, =<, => משווים בין מספרים ==, =!, ~=, ~! משווים בין מחרוזות ניתן להשתמש באופרטורים ==, =! גם להשוואה בין מספרים אך ההשוואה תתבצע בין המחרוזות שמייצגות את המספרים למה ישוערכו הביטויים הבאים ? 8 <= 08 8 >= 08 8 == 08 8 == 8 8 != 08 8 !~ 08 8 =~ 08 All the conditions are true except the third and the seventh

סיכום: אופרטורים בתוך משפטי if אופרטורים לעבודה עם קבצים ותיקיות : -f,-d אופרטורים לוגיים להרכבת תנאים !, &&, || כמו ב-C ניתן להשתמש בסוגריים כמו ב-C if (($winner == "Yossi") || ($winner == "Einav")) then echo the Bublil family won ! endif

התאמת מחרוזות כמו באופרטור =~ משפטי switch switch (<variable or string>) case <pattern1>: <cshell commands> [breaksw] case <pattern2>: ... case <pattern_n>: [default: <cshell commands>] endsw התאמת מחרוזות כמו באופרטור =~

משפטי switch: דוגמא switch($c) case "[a-z]": echo small letter breaksw case "[A-Z]": echo big letter case "[0-9]": echo digit case '$': echo dollar sign default: echo neither letter nor digit endsw

משפטי goto goto <label> כמו ב-C goto error ... error: גם ב C-Shell וגם ב-C שימוש ב-goto נחשב לתכנות רע ! משתמשים במנגנון goto רק כשכל האלטרנטיבות האחרות יותר גרועות

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

הפקודה 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 my PC שימו לב מה קורה כאשר ישנן יותר מחרוזות ברשימה strings מאשר תווי עריכה (%s)

הרצת תסריטים ניתן להריץ תסריטים בשתי דרכים: ע''י הפקודה source התסריט מתבצע בסביבה הנוכחית (ב-shell הנוכחי) יכול לשנות את משתני הסביבה הנוכחית ישירות התסריט מתבצע בסביבה חדשה משלו (ב-shell חדש) לא יכול לשנות את משתני הסביבה הנוכחית נהוג להריץ את התסריטים בדרך השנייה, אלא אם רוצים לשנות את משתני הסביבה הנוכחית

הרצת תסריטים ישירות לפני שמריצים תסריט בפעם הראשונה חייבים לתת לו הרשאת הרצה > chmod u+x myscript אחרי שיש לקובץ הרשאת הרצה, ניתן להריץ אותו בצורה ישירה: > myscript כמובן המשתנה path צריך להכיל את התיקיה הנוכחית, אחרת צריך להריץ בצורה הבאה: > ./myscript

הרצת קבצי סקריפט #! /bin/tcsh -f כדי שהshell- הנוכחי יידע איזה shell חדש להפעיל לצורך ביצוע התסריט, יש להוסיף לתסריט שורה ראשונה במחשבים שונים כתובת ה-shell המריץ יכולה להיות שונה ניתן לברר מהי באמצעות הפקודה which > which tcsh /bin/tcsh #! /bin/tcsh -f אומר ל-shell לא לבצע תסריטי אתחול ולהתחיל יותר מהר כתובת ה-shell שיריץ את התסריט which is an external utility (could run in any Shell) where is a C-Shell built-in utility (could run in C-Shell only)

תסריטי אתחול תסריטי אתחול ((setup הם תסריטים מיוחדים אשר מורצים אוטומטית ע"י המערכת בזמנים מסוימים. .login מבוצע עם כניסה לחשבון .cshrc מבוצע בהתחלת הרצה של כל shell(מסוג C-Shell) נהוג להשתמש בהם להתאמה אישית של סביבת העבודה. למשל, אתחול משתני סביבה נחוצים לעבודה נתינת כינויים לפקודות (alias) לביצוע משימות שנרצה שיבוצעו בצורה אוטומטית בזמנים של כניסה לחשבון/פתיחת shell חדש .cshrc זה קובץ איתחול של C-Shell. ל-shells אחרים שמות הקבצים הם שונים, למשל .bashrc

דוגמא לתסריט .cshrc set path = ($path .) alias cdex2 cd ~mtm/public/0809b/ex2 alias gcc gcc -Wall -pedantic-errors -Werror set savehist=1000 savehist - preserve history between sessions

דוגמא לתסריט .login # welcome message echo -------------- Welcome `whoami` ! -------------- echo You are in `pwd` directory of `hostname` echo OS is `uname -s` # echo disk usage is `du -sh | cut -f1` echo `who | wc -l` users are logged in # print a warning about Matam assignment set today = `date +%j` set assignment_day = 151 set days_in_this_year = 365 if( $today > $assignment_day) then @ remaining_days = $assignment_day + ($days_in_this_year - $today) else @ remaining_days = $assignment_day - $today endif date echo $remaining_days days until the submission of Matam assignment 2 ! שינוי קטן במספרים: set assignment_day = 151 set days_in_this_year = 365 למקרה ותרצו להשתמש בתסריט .login עבור המשתמש שלכם

העברת פרמטרים לתסריטים ניתן להעביר פרמטרים לתסריטים בדומה להעברת פרמטרים לתוכנית C ב-C ניתן להתייחס לפרמטרים ע''י מערך argv בתסריט C-Shellניתן להתייחס לפרמטרים בצורה הבאה: $0 - הפקודה עצמה ${n} או ${argv[n]} - הפרמטר ה-n $* - רשימת כל הפרמטרים ${#argv} - מספר הפרמטרים

דוגמא: echo_script #! /bin/tcsh -f echo command: $0 set number = 1 foreach param ( $* ) echo parameter $number : $param @ number++ end > echo_script aaa bbb ccc command: ./echo_script parameter 1 : aaa parameter 2 : bbb parameter 3 : ccc

קלט בשפת C-Shell : אופרטור $< אופרטור $< גורם לשורה שלמה להיקרא מערוץ הקלט הסטנדרטי set line = “$<“ שורה שלמה אחת תיקרא מערוץ הקלט הסטנדרטי ותושם למשתנה line בתור מחרוזת (כולל רווחים) נהוג לבצע ישר המרה לרשימה על ידי שימוש ב-() set line = ($<) השורה מהקלט הסטנדרטי תופרד למילים ותושם למשתנה line בתור רשימה אחרי הביצוע של השורה הזאת ניתן לבצע פעולות רגילות של C-Shell על רשימות : $line[1], shift, ${#line}, $line[3-] וכו' אין דרך טבעית וישירה לקרוא מקבצים ב-C-Shell רק מהקלט הסטנדרטי

חלוקה פונקציונאלית של תסריטים בשפת C למדנו לחלק תוכניות למודולים ופונקציות לשיפור קריאות, שימוש חוזר בקוד וכו' בשפת C-Shell אין פונקציות מחלקים תסריט ל"התסריט הראשי" שמשתמש ב"תסריטי עזר" כל "תסריט עזר" הוא תסריט בפני עצמו ניתן להריץ אותו בנפרד הוא יכול להשתמש בתסריטים ותוכנות אחרות

תסריטים: העברת פרמטרים בשורת הארגומנטים helper_script aaa bbb 17 ב-pipeline לתוך הערוץ הקלט הסטנדרטי echo aaa bbb 17 | helper_script דרך קובץ זמני echo aaa bbb 17 > tmp helper_script < tmp

תסריטים: ערכי חזרה על ידי backticks set result = `helper_script aaa bbb 17` העברה לתסריט אחר ב-pipeline helper_script aaa bbb 17 | another_script דרך קובץ זמני helper_script aaa bbb 17 > tmp

קלט מקבצים כאמור, אין ב-C-shell דרך טבעית וישירה לקרוא קלט מקבצים הדרך הטבעית היא לקרוא שורות מערוץ הקלט הסטנדרטי על ידי אופרטור $< לכן משתמשים בשיטה הבאה : מחלקים את משימת קריאת הקלט לשני תסריטים : "התסריט הראשי" "תסריט העזר" התסריט הראשי ישפוך את תוכן הקובץ ב-pipeline לתסריט העזר: cat file | helper_script או יחבר את הקובץ ישירות לערוץ הקלט הסטנדרטי: helper_script < file תוכן הקובץ יועבר לערוץ הקלט הסטנדרטי של תסריט העזר תסריט העזר יקרא מהקלט הסטנדרטי על ידי אופרטור $<

דוגמא נתון קובץ football המכיל נתונים על שערים שהובקעו במשחקי כדורגל. כל שורה בקובץ מציינת שם של שחקן, מספר השערים שהבקיע במשחק שנערך בתאריך מסוים, שם הקבוצה בה הוא שיחק ושם הקבוצה היריבה. >cat football Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer-Sheva Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva Ronen Ha. 3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

דוגמא ברצוננו לכתוב תסריט בשם player. התסריט יקבל כפרמטר שם מלא של שחקן ידפיס את כל השורות של הקובץ football בהן מופיע שם השחקן ובנוסף ידפיס את סכום מספר השערים שהוא הבקיע. לדוגמא, הפלט עבור שורת הקלט Alon Miz. יהיה: > player “Alon Miz.” Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva total number of goals: 6

פתרון בתסריט player לא נוכל לבצע קריאת קלט מהקובץ football ולכן ניעזר בתסריט אחר בשם calc_total התסריט player ישפוך את השורות שבהם מופיע השחקן ב-pipeline ל- calc_total calc_total יקרא את שורות שבהם מופיע השחקן מערוץ הקלט הסטנדרטי על ידי אופרטור $<

פתרון בפונט מודגש: התבנית הכללית של עיבוד הקלט > cat player #! /bin/tcsh -f grep "$1" football | calc-total בפונט מודגש: התבנית הכללית של עיבוד הקלט > cat calc-total #! /bin/tcsh -f set line = ($<) set sum = 0 while (${#line} != 0) @ sum = $sum + $line[3] echo $line end echo "total number of goals: $sum"

דוגמא נוספת עלינו לכתוב תסריט לדירוג שחקנים בשם scores השמות המלאים של השחקנים מועברים כפרמטרים בשורת הפקודה הדירוג של כל שחקן ייקבע על פי מספר השערים שהוא הבקיע לפי הנתונים המוכלים בקובץ football שני שחקנים שהבקיעו מספר זהה של שערים יקבלו דירוג זהה. התסריט ידפיס עבור כל שחקן את דירוגו, את שמו המלא ואת מספר השערים שהבקיע

תזכורת: קובץ football >cat football Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer-Sheva Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva Ronen Ha. 3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

דוגמא להפעלת התסריט > scores "Alon Miz." "Izak Zoh." "Ronen Ha." "Reuven A." 1 Alon Miz. 6 1 Ronen Ha. 6 2 Izak Zoh. 4 3 Reuven A. 2

פתרון > cat scores #! /bin/tcsh -f @ i = 1 while ( $i <= ${#argv} ) grep "${argv[$i]}" football | calc_score >>! temp @ i++ end sort -n -k 3 -r temp | calc_place if (-f temp) then rm -f temp endif

פתרון > cat calc_score #! /bin/tcsh -f set line = ($<) set sum = 0 set player_name = ($line[1-2]) while (${#line} != 0) @ sum = $sum + $line[3] end echo "$player_name $sum" > cat calc_place #! /bin/tcsh -f set line = ($<) set place = 1 @ goals = $line[3] while (${#line} != 0) if ($goals != $line[3]) then @ place++ endif echo "$place $line" end

C-shell לעומת C שפת C-shell היא שפת תסריטים (scripting language) קיימות שפות תסריטים מתקדמות יותר: Perl, Tcl, PHP, JavaScript, Python, Ruby מזל טוב! למדתם שפת התסריטים הראשונה שלכם! References: http://www.cio.com/article/446829/PHP_JavaScript_Ruby_Perl_Python_and_Tcl_Today_The_State_of_the_Scripting_Universe?contentId=446829&slug=& http://www.tcl.tk/doc/scripting.html

C-shell לעומת C שפת C היא שפת תכנות מערכת (system language) קיימות שפות תכנות מערכת מתקדמות יותר: C++, Java, C# References: http://en.wikipedia.org/wiki/System_programming_language

יתרונות של C-shell לעומת C קל להריץ תוכניות אחרות להעביר פרמטרים לשלב פלט של תוכניות לשלב בין תוכניות יתרון גדול בסביבת Unix שבה יש הרבה תוכניות סטנדרטיות (sort, grep,cut) עבודה נוחה עם קבצים עבודה נוחה עם מחרוזות עבודה נוחה עם משתנים ותסריטי עזר לא צריך להגדיר טיפוסים, להכריז על משתנים ופונקציות ניתן לפתח תוכניות בזמן קצר יותר ! תוכנית שכתובה בשפת תסריטים יכולה להיות פי 5 קצרה יותר מאותה התוכנית שכתובה בשפת C Perl, Python vs. C - http://www.codinghorror.com/blog/archives/000365.html - citation from Code Complete, second edition, p. 62 http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprt_computer2000.pdf

חסרונות של C-shell לעומת C השפה פחות בטיחותית - קל להכניס באגים אין בדיקות טיפוסים לא חייבים להגדיר משתנים לפני השימוש בהם לדוגמא, איפה הבאג בקוד הבא ? מה יודפס בסוף הריצה שלו ? set deposits = ($*) set account_balance = 100 foreach d ($deposits) @ acount_balance = $account_balance + $d end echo $account_balance the bug is in the line @ acount_balance = $account_balance + $d , the variable after @ is acount_balance with one ‘c’, which is a different variable and not the account_balance which we want to compute. At the end of the script the initial value of $account_balance (100) will be printed

חסרונות של C-shell לעומת C Benchmark comparisons of tcl and perl to C http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=tcl&lang2=gcc http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=perl&lang2=gcc

שימוש ב-C-shell לעומת C זמן ביצוע לא קריטי למשל כאשר המשימה מספיק קטנה כך שזמן הביצוע לא מורגש איכות התוכנה לא קריטית או שהתכנית מספיק קטנה כדי שיהיה אפשר למצוא בה את כל הבאגים בצורה קלה משתמשים ב-C כאשר זמן ביצוע חשוב איכות התוכנה היא קריטית

בקרת תהליכים ב-Unix

תהליכים ב-Unix Unix היא מערכת הפעלה המסוגלת לשרת מספר רב של משתמשים בו זמנית כל משתמש יכול להריץ בו זמנית מספר רב של תהליכים ניתן לראות תהליך כהרצה של תוכנית כלשהי יכולים להתקיים במקביל מספר תהליכים שכולם מריצים את אותה התוכנית תהליך יכול ליצור תהליכים נוספים להרוג תהליך שיצר לשלוח הודעות לתהליכים אחרים

תהליכים בקורס מת''מ במת''מ לא נלמד כיצד תהליכים מבצעים את כל הפעולות הנ"ל נשאיר זאת לקורס במערכות הפעלה נלמד כיצד משתמש יכול ליצור מספר תהליכים לשלוט על אופן ביצועם להרוג תהליכים

מצבים של תהליכים ריצה בחזית (foreground) ריצה ברקע (background) השעיה רק תהליך אחד יכול לרוץ בחזית רק התהליך בחזית יכול לקרוא מהמקלדת כשהמשתמש מריץ תהליך בחזית ה-prompt נעלם עד סיום התהליך לא ניתן להריץ פקודות נוספות ריצה ברקע (background) ברקע יכולים לרוץ מספר תהליכים בו זמנית תהליך שרץ ברקע לא יכול לקרוא מהמקלדת כשהמשתמש מריץ תהליך ברקע ה-prompt חוזר ניתן להריץ פקודות נוספות השעיה התהליך נעצר עד שיעבירו אותו למצב ריצה

יצירת תהליכים יוצרים תהליכים על ידי הקשת שם של התוכנית להרצה בשורת הפקודה: בחזית ברקע > command > command & > command2 & > command& >

בדיקת מצב תהליכים הפקודה jobs המספרים בסוגריים מרובעים מציינים מספרי תהליך מזהים תהליכים בשביל הפקודות לטיפול בתהליכים סימן ה-"+" מייצג את התהליך ה"נוכחי" ברירת המחדל לפקודות לטיפול בתהליכים >jobs [1] + Running command [2] - Running command2 [3] Running command

השעיית תהליך stop [%jobID] הפקודה הקשת Ctrl-z - משעה את התהליך בחזית >jobs [1] + Running command [2] - Running command2 > stop %1 [1] + Suspended (signal) command > > command Ctrl-z [1] + Suspended command <

העברת תהליך לחזית fg [%jobID] הפקודה > more try_input.c main() { char str[20]; printf("I shall try to eat something"); scanf(“%s" , str); printf(“Ate %s" , str); } > try_input& [1] 828 > I shall try to eat something [1] + Suspended (tty input) try_input > jobs > fg %1 try_input cookies Ate cookies >

העברת תהליך לרקע bg [%jobID] הפקודה מעבירה את התהליך שמספרו jobID לרקע >jobs [1] + Suspended (signal) command [2] - Running command2 > bg %1 [1] Running command [2] + Running command2 >

הריגת תהליך kill -9 %jobID הפקודה הקשת Ctrl-c - הורגת את התהליך בחזית >jobs [1] + Running command [2] - Running command2 > kill -9 %2 [1] + Running command [2] Terminated command2 > > command Ctrl-c <

תרשים המצבים של תהליך חזית השעיה רקע סיום Ctrl-z fg Ctrl-c bg kill fg stop רקע סיום kill