תרגול 7 תסריטים ניהול תהליכים ב -unix לי-טל משיח...

61
ללללל7 ללללללל- ללללל ללללללל לUNIX לל לללל- לל[email protected] לללל לללללל ל'' לללל לללללללל

Post on 21-Dec-2015

249 views

Category:

Documents


4 download

TRANSCRIPT

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

7תרגול

תסריטים

UNIXניהול תהליכים ב-

[email protected]לי-טל משיח

נערך והורחב ע'' ודים אייזנברג

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

(scriptתסריטים )קבצי

shellסדרה של פקודות סדרה של פקודות אשר מכילים קבציםקבצים•shellshellשפת ה-שפת ה-הכתובות ב תוכניותתוכניותמהווים מעין –

רגילקובץ טקסטקובץ טקסטנכתבים ב•ניתן להריץ אותם מספר פעמים–אין צורך בהידוראין צורך בהידור–

cleanלדוגמא, קובץ טקסט בשם •

22

echo “Cleaning !”rm *.omv ex1 ex1.old

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

הרצת תסריטים

sourcesourceדרך אחת - הפקודה •> source clean

cleanתריץ את התסריט תריץ את התסריט • מכיל את הפקודות מהשקף cleanבמידה וקובץ •

הקודם: !”Cleaning“תודפס הודעה –יימחקו כל קבצי אובייקט בתיקייה הנוכחית–ex1.old ישונה לקובץ ex1שם הקובץ –

33

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

C-shellשפת התסריטים לכל דברשפת תכנות שפת תכנות היא C-shellשפת התסריטים •

משתניםמשתנים–כולם מאותו טיפוס - מחרוזת או רשימה של מחרוזות•

פעולות אריתמטיותפעולות אריתמטיות–רק בשלמים•

ואחרות(while) לולאותלולאות–(if else)משפטי תנאי משפטי תנאי –: מסימן # ועד סוף השורה הערותהערות––,goto, switch בדומה לשפת בדומה לשפת ודברים אחריםCC

44

בשביל מה צריך עוד שפת בשביל מה צריך עוד שפת תכנות ???תכנות ???

התשובה בסוף התרגולהתשובה בסוף התרגול

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

C-shellניצול יכולות של

בכתיבת תסריטים ניתן להיעזר בכל היכולות של• C-shell: שלמדנו

משתנים––Alias Substitution–File name expansion–Command Substitution

•backticks ``

–I/O redirection–pipelining

• 55

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

C-shell: repeat לולאות ב-

•cshell מבצע את הפקודה command בדיוק count פעמים :

להריץ גם להריץ גם ניתן C-shellשימו לב שכל לולאה של • command linecommand line ב-ב-

66

repeat <count> <cshell command>repeat <count> <cshell command>

<repeat 3 echo Congratulations, Shifra !Congratulations, Shifra ! Congratulations, Shifra !Congratulations, Shifra !>

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

C-shell: while לולאות ב-

77

while (<expression>)while (<expression>)<cshell commands><cshell commands>

endend> source count100123456789

# count10 script:@ i = 0while ($i<10) echo $i @ i++end

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

C-shell: foreach לולאות ב-

הלולאה מתבצעת מספר פעמים השווה לגודל •listהרשימה

variableשל הלולאה, המשתנה בכל איטרציה בכל איטרציה •לפי הסדרמקבל ערך אחד מהרשימה מקבל ערך אחד מהרשימה

88

foreach <variable> (<list>)foreach <variable> (<list>)<cshell commands><cshell commands>

endend

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

foreach דוגמאות :

99

# final_vote scriptset number = 1foreach name (Itai Yossi Leon Einav Shifra) echo for $name send the number $number @ number++end

> source final_votefor Itai send the number 1for Yossi send the number 2for Leon send the number 3for Einav send the number 4for Shifra send the number 5

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

foreach דוגמאות :

בתיקייה הנוכחית:cיצירת העתק של כל קבצי •

1010

foreach FILE (*.c) cp $FILE $FILE.backend

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

(if ... else)משפטי תנאי :שתי גרסאותשתי גרסאות•

– if בלי פקודה אחתפקודה אחת עם ,else

if (<expression>) <one cshell command>if (<expression>) <one cshell command>– if אופציה ל-אופציה ל-ועם כמה פקודות כמה פקודות עםelseelse

if (<expression>) thenif (<expression>) then<cshell commands><cshell commands>

[else[else<cshell commands>]<cshell commands>]

endifendif

1111

בגרסה הזאת בגרסה הזאת thenthenחייבים חייבים

בגרסה הזאת בגרסה הזאת thenthenחייבים חייבים

endifendifוגם וגם

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

ifדוגמא של

if ($votes_for_yossi > $votes_for_shifra) thenecho Yossi won !

elseecho Shifra won !

endif

1212

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

ifתנאים בתוך משפטי השוואת מחרוזות:•

if ($winner == "Yossi") …if ($winner == "Yossi") …השוואת מספרים:•

if ($votes > 1000000) …if ($votes > 1000000) …C-shellתנאים מיוחדים ל-•

if (-d aaa) ...if (-d aaa) ... קיימת בתוך aaaבשם התיקייההתיקייה אם trueמשוערך ל-–

התיקייה הנוכחיתif (-f aaa) ...if (-f aaa) ...

קיים בתיקייה aaa בשם הקובץהקובץ אם trueמשוערך ל-–(והוא לא תיקייהוהוא לא תיקייההנוכחית )

1313

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

- התאמת ifתנאים בתוך משפטי מחרוזות

~= ~= אופרטור •המחרוזת בצד שמאל המחרוזת בצד שמאל אם trueמשוערך ל-–

תבנית בצד ימיןתבנית בצד ימיןמתאימה ל ][ כגון: *,? אוסימנים מיוחדים סימנים מיוחדים התבנית יכולה לכלול •

שמשמעותם תוארה בתרגול הקודם

!!~~של האופרטור ~= היא השלילההשלילה•

1414

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

:התאמה בין ifתנאים בתוך משפטי מחרוזות

!~, =~אופרטורים •

1515

> if (end_with_z =~ *[zZ]) echo match> if (end_with_z =~ *[zZ]) echo matchmatchmatch> if ("no point in string" !~ *.*) echo "no point"> if ("no point in string" !~ *.*) echo "no point"no pointno point> if ("point - . - in string" !~ *.*) echo "no point"> if ("point - . - in string" !~ *.*) echo "no point">>

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

ifאופרטורים בתוך משפטי סיכום:אופרטורים של השוואהאופרטורים של השוואה•

מספריםמספריםמשווים בין <, =>>, <, = –מחרוזותמחרוזותמשווים בין ~! ,==, =!, ~= –

גם להשוואה בין מספרים אך ==, =!ניתן להשתמש באופרטורים •ההשוואה תתבצע בין המחרוזות שמייצגות את המספרים

למה ישוערכו הביטויים הבאים ?–•8 =< 08 •8 => 08 •8 == 08 •8 == 8 •8 =! 08 •8 ~! 08 •8 ~= 08

1616

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

ifאופרטורים בתוך משפטי סיכום:

-,f-: קבצים ותיקיות קבצים ותיקיות לעבודה עם אופרטוריםאופרטורים•d

אופרטורים לוגיים להרכבת תנאיםאופרטורים לוגיים להרכבת תנאים•C !, &&, || כמו ב-–Cניתן להשתמש בסוגריים כמו ב-–

if (($winner == "Yossi") || ($winner == "Einav")) thenecho the Bublil family won !

endif

1717

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

switchמשפטי switch (<variable or string>)

case <pattern1>: <cshell commands> [breaksw]

case <pattern2>: <cshell commands>[breaksw]

... case <pattern_n>: <cshell commands>

[breaksw][default:

<cshell commands>]endsw

1818

התאמת התאמת מחרוזות כמו מחרוזות כמו

=~=~באופרטור באופרטור

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

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

1919

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

gotoמשפטי

<:label>המסומן ב- קפיצה למקום קפיצה למקום מבצע •CCכמו ב-כמו ב-•

2020

goto >label<goto >label<

goto error...error:...

C וגם ב-C-Shellגם ב נחשב gotoשימוש ב-

לתכנות רע !משתמשים במנגנון

goto רק כשכל האלטרנטיבות האחרות

יותר גרועות

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

printfהפקודהprintf format stringsprintf format strings

formatלפי הפורמט לפי הפורמט stringsאת המחרוזות מדפיסהמדפיסה•.C ב-printfהפורמט דומה לפורמט של הפקודה –

תווי עריכהתווי עריכההפורמט יכול להכיל תווים רגילים או •דוגמאות של תווי עריכה:•

–%%ss מדפיסה את המחרוזת המתאימה מתוך הרשימה -strings.

– -]-[%]-[%m[.n]sm[.n]s מדפיסה את המחרוזת המתאימה מרשימתתווים, עם mmבאורך של באורך של המחרוזות כך שהתוצאה תהיה

)מתוך הגבלת מספר התווים המודפסיםהגבלת מספר התווים המודפסיםאפשרות לאלא מיושרת לימין מיושרת לימין . המחרוזת nnל - ל - המחרוזת הספציפית(

.--אם משתמשים באופרטור

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

- דוגמאותprintfהפקודה

יותר מחרוזותיותר מחרוזותשימו לב מה קורה כאשר ישנן שימו לב מה קורה כאשר ישנן ((ss)%)% מאשר תווי עריכהמאשר תווי עריכה stringsstringsברשימה ברשימה

> echo $HOME/home/rotics>> printf “My files are in %s\n“ $HOMEMy files are in /home/rotics>> printf “number is : %10.5s” 123456789anumber is: 12345>> printf “number is : #%-10.3s# %s\n” "123456789a“ xxxnumber is: #123 # xxx>> printf “My files are in %s\n“ $HOME “my PC”My files are in /home/roticsMy files are in my PC

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

הרצת תסריטים

:בשתי דרכיםבשתי דרכיםתסריטים להריץלהריץניתן •sourcesourceהפקודה הפקודה ע''י –

הנוכחי( shell)ב-מתבצע בסביבה הנוכחית מתבצע בסביבה הנוכחית התסריט •משתני הסביבה הנוכחיתמשתני הסביבה הנוכחיתיכול לשנות את •

ישירותישירות – חדש( shell)ב-בסביבה חדשה משלו בסביבה חדשה משלו התסריט מתבצע •משתני הסביבה הנוכחיתמשתני הסביבה הנוכחיתלא יכול לשנות את •

אלא אלא , בדרך השנייהבדרך השנייהלהריץ את התסריטים נהוגנהוג•לשנות את משתני הסביבה הנוכחיתלשנות את משתני הסביבה הנוכחיתרוצים אם אם

2323

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

הרצת תסריטים ישירות

לפני שמריצים תסריט בפעם הראשונה חייבים •הרשאת הרצההרשאת הרצהלתת לו

> chmod u+x myscript> chmod u+x myscript להריץלהריץאחרי שיש לקובץ הרשאת הרצה, ניתן •

: בצורה ישירהבצורה ישירהאותו > myscript> myscript

צריך להכיל את התיקיה pathכמובן המשתנה –הנוכחית, אחרת צריך להריץ בצורה הבאה:

> ./myscript> ./myscript

2424

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

הרצת קבצי סקריפט

לצורך חדש להפעיל חדש להפעיל shellshellאיזה איזה הנוכחי יידע -shellכדי שה•שורה ראשונה שורה ראשונה ביצוע התסריט, יש להוסיף לתסריט

יכולה להיות שונה המריץ המריץ shellshellכתובת ה-כתובת ה-במחשבים שונים •whichwhichניתן לברר מהי באמצעות הפקודה •

> which tcsh/bin/tcsh2525

#! /bin/tcsh -f#! /bin/tcsh -f

לא לבצע תסריטי לא לבצע תסריטיshellshellאומר ל-אומר ל- שיריץ את התסריט שיריץ את התסריטshellshellכתובת ה-כתובת ה-אתחול ולהתחיל יותר מהראתחול ולהתחיל יותר מהר

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

תסריטי אתחול

הם תסריטים מיוחדים אשר setup))תסריטי אתחול תסריטי אתחול •. בזמנים מסוימיםבזמנים מסוימיםע"י המערכת מורצים אוטומטית מורצים אוטומטית

–..loginlogin עם כניסה לחשבוןעם כניסה לחשבוןמבוצע–..cshrccshrc של כל בהתחלת הרצה בהתחלת הרצה מבוצע shell מסוג(C-Shell)

בהםנהוג להשתמש נהוג להשתמש • של סביבת העבודה. למשל,התאמה אישיתהתאמה אישיתל–

אתחול משתני סביבה נחוצים לעבודה•(alias)נתינת כינויים לפקודות •

בצורה אוטומטית בצורה אוטומטית שנרצה שיבוצעו משימותמשימותלביצוע – חדשshellבזמנים של כניסה לחשבון/פתיחת

2626

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

cshrc.דוגמא לתסריט

2727

set path = ($path .)alias cdex2 cd ~mtm/public/0809b/ex2alias gcc gcc -Wall -pedantic-errors -Werrorset savehist=1000

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

login.דוגמא לתסריט

2828

# welcome messageecho -------------- 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 assignmentset today = `date +%j`set assignment_day = 151set days_in_this_year = 365if( $today > $assignment_day) then @ remaining_days = $assignment_day + ($days_in_this_year - $today)else @ remaining_days = $assignment_day - $todayendifdateecho $remaining_days days until the submission of Matam assignment 2 !

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

העברת פרמטרים לתסריטים

לתסריטים בדומה להעביר פרמטרים להעביר פרמטרים ניתן •Cלהעברת פרמטרים לתוכנית

argv ניתן להתייחס לפרמטרים ע''י מערך Cב-–

ניתן להתייחס לפרמטרים C-Shell בתסריט •בצורה הבאה:

- הפקודה עצמה 0$0$––{${$nn}} או{${$argv[n]argv[n]}} -הפרמטר ה -n - רשימת כל הפרמטרים$*$*––#{$#{$argvargv}} -מספר הפרמטרים

2929

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

echo_scriptדוגמא:

3030

#! /bin/tcsh -fecho command: $0set number = 1foreach param ( $* ) echo parameter $number : $param @ number++end

> echo_script aaa bbb ccccommand: ./echo_scriptparameter 1 : aaaparameter 2 : bbbparameter 3 : ccc

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

> : אופרטור C-Shellקלט בשפת $>אופרטור • $< $

גורם לשורה שלמה להיקרא מערוץ הקלט הסטנדרטי –set line = “$<“

שורה שלמה אחת תיקרא מערוץ הקלט הסטנדרטי ותושם • בתור מחרוזת )כולל רווחים(lineלמשתנה

)(נהוג לבצע ישר המרה לרשימה על ידי שימוש ב-–set line = ($<)

line למשתנה ותושםותושם למילים תופרדתופרדמהקלט הסטנדרטי השורההשורה•בתור רשימה

אחרי הביצוע של השורה הזאת ניתן לבצע פעולות רגילות של •C-Shell : על רשימות $line[1], shift, ${#line}, $line[3-]'וכו

C-Shellב-לקרוא מקבצים לקרוא מקבצים וישירה אין דרך טבעית אין דרך טבעית •רק מהקלט הסטנדרטי–

3131

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

חלוקה פונקציונאלית של תסריטים

למודולים למודולים תוכניות לחלקלחלק למדנו Cבשפת •ופונקציותופונקציות

בקוד וכו'שימוש חוזר שימוש חוזר , קריאותקריאותלשיפור –

אין פונקציותאין פונקציות C-Shellבשפת •שמשתמש "התסריט הראשי" "התסריט הראשי" מחלקים תסריט ל–

"תסריטי עזר""תסריטי עזר"בכל "תסריט עזר" הוא תסריט בפני עצמו–

ניתן להריץ אותו בנפרד•הוא יכול להשתמש בתסריטים ותוכנות אחרות•

3232

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

תסריטים: העברת פרמטרים

בשורת הארגומנטיםבשורת הארגומנטים•

helper_script aaa bbb 17לתוך הערוץ הקלט הסטנדרטי pipelinepipelineב-ב-•

echo aaa bbb 17 | helper_scriptקובץ זמניקובץ זמנידרך •

echo aaa bbb 17 > tmphelper_script < tmp

3333

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

תסריטים: ערכי חזרה

backticksbackticksעל ידי •set result = `helper_script aaa bbb 17`

pipelinepipelineב-ב- לתסריט אחר העברה•helper_script aaa bbb 17 | another_script

קובץ זמניקובץ זמנידרך •

helper_script aaa bbb 17 > tmp

3434

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

קלט מקבצים

קלט קלט וישירה לקרוא דרך טבעית דרך טבעית C-shellב- כאמור, איןכאמור, אין•מקבציםמקבצים

הדרך הטבעית היא לקרוא שורות מערוץ הקלט הסטנדרטי על ידי –$>$>אופרטור אופרטור

לכן משתמשים בשיטה הבאה :•: לשני תסריטיםלשני תסריטיםאת משימת קריאת הקלט מחלקיםמחלקים–

"התסריט הראשי"•"תסריט העזר"•

לתסריט העזר: pipelinepipelineתוכן הקובץ ב-תוכן הקובץ ב-התסריט הראשי ישפוך את – cat file | helper_script

:הקלט הסטנדרטיהקלט הסטנדרטיישירות לערוץ יחבר את הקובץ יחבר את הקובץ או – helper_script < file

של תסריט העזרהקלט הסטנדרטי הקלט הסטנדרטי יועבר לערוץ תוכן הקובץ תוכן הקובץ •$> על ידי אופרטור יקרא מהקלט הסטנדרטייקרא מהקלט הסטנדרטיתסריט העזר –

3535

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

דוגמא

המכיל נתונים על שערים שהובקעו במשחקי המכיל נתונים על שערים שהובקעו במשחקי footballנתון קובץ נתון קובץ •כדורגל. כדורגל.

שהבקיע שהבקיע מספר השערים , , שם של שחקןכל שורה בקובץ מציינת כל שורה בקובץ מציינת •ושם בה הוא שיחק בה הוא שיחק שם הקבוצה מסוים, מסוים, תאריךבמשחק שנערך בבמשחק שנערך ב..הקבוצה היריבה

3636

>cat footballAlon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-AvivIzak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer-ShevaRonen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-AvivReuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-AvivEyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-HaifaAlon Miz. 2 26/10/93 Macabi-Haifa Beitar-JerusalemIzak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-HiafaAlon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-TikvaRonen Ha. 3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

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

דוגמא

. התסריטplayerברצוננו לכתוב תסריט בשם • של שחקן פרמטר שם מלאפרמטר שם מלאיקבל כ–מופיע מופיע בהן footballשל הקובץ השורותהשורותאת כל ידפיסידפיס –

שם השחקןשם השחקןשהוא סכום מספר השערים סכום מספר השערים את ידפיסידפיס ובנוסף –

הבקיע.

יהיה:.Alon Mizלדוגמא, הפלט עבור שורת הקלט •

3737

> player “Alon Miz.”Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-AvivAlon Miz. 2 26/10/93 Macabi-Haifa Beitar-JerusalemAlon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikvatotal number of goals: 6

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

פתרון

לא נוכל לבצע קריאת קלט playerבתסריט •footballמהקובץ

calc_totalבשם ניעזר בתסריט אחר ניעזר בתסריט אחר ולכן –שבהם מופיע ישפוך את השורות ישפוך את השורות playerהתסריט –

calc_total ל-pipelinepipelineב-ב-השחקן – calc_total שבהם מופיע השחקן יקרא את שורות יקרא את שורות

$>$>ידי אופרטור ידי אופרטור מערוץ הקלט הסטנדרטי על

3838

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

פתרון

3939

< cat calc-total#! /bin/tcsh -fset line = ($<)set line = ($<)set sum = 0while (${#line} != 0)while (${#line} != 0) @ sum = $sum + $line[3] echo $line set line = ($<)set line = ($<)endendecho "total number of goals: $sum"

< cat player#! /bin/tcsh -fgrep "$1" football | calc-total

: : בפונט מודגשבפונט מודגשהתבנית התבנית

הכללית של הכללית של עיבוד הקלטעיבוד הקלט

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

דוגמא נוספת

scoresבשם תסריט לדירוג שחקנים תסריט לדירוג שחקנים עלינו לכתוב •מועברים כפרמטרים מועברים כפרמטרים המלאים של השחקנים השמותהשמות–

בשורת הפקודהמספר השערים מספר השערים של כל שחקן ייקבע על פי הדירוגהדירוג–

footballהנתונים המוכלים בקובץ הנתונים המוכלים בקובץ שהוא הבקיע לפי שני שחקנים שהבקיעו מספר זהה של שערים יקבלו דירוג •

זהה.

את ,דירוגודירוגועבור כל שחקן את ידפיסידפיסהתסריט •שהבקיעמספר השערים מספר השערים ואת שמו המלא שמו המלא

4040

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

footballתזכורת: קובץ

4141

>cat footballAlon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-AvivAlon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-AvivIzak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer-ShevaIzak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer-ShevaRonen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-AvivRonen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-AvivReuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-AvivReuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-AvivEyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-HaifaIzak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-HaifaAlon Miz. 2 26/10/93 Macabi-Haifa Beitar-JerusalemAlon Miz. 2 26/10/93 Macabi-Haifa Beitar-JerusalemIzak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-HiafaIzak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-HiafaAlon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-TikvaAlon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-TikvaRonen Ha. 3 27/11/93 Hapoel-Tel-Aviv Macabi-HaifaRonen Ha. 3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

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

דוגמא להפעלת התסריט

4242

> scores "Alon Miz." "Izak Zoh." "Ronen Ha." "Reuven A."1 Alon Miz. 61 Ronen Ha. 62 Izak Zoh. 43 Reuven A. 2

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

פתרון

4343

> cat scores#! /bin/tcsh -f#! /bin/tcsh -f@ i = 1@ i = 1while ) $i >= ${#argv} (while ) $i >= ${#argv} ( grep "${argv[$i]}" football | calc_score <<! tempgrep "${argv[$i]}" football | calc_score <<! temp @ i++@ i++endendsort -n -k 3 -r temp | calc_placesort -n -k 3 -r temp | calc_placeif )-f temp( thenif )-f temp( then rm -f temprm -f tempendifendif

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

פתרון

4444

< cat calc_place#! /bin/tcsh -fset line = ($<)set place = 1@ goals = $line[3]while (${#line} != 0) if )$goals != $line[3]( then @ place++ @ goals = $line[3] endif echo "$place $line" set line = ($<)end

< cat calc_score#! /bin/tcsh -fset line = ($<)set sum = 0set player_name = )$line[1-2](while (${#line} != 0) @ sum = $sum + $line[3] set line = ($<)endecho "$player_name $sum"

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

C-shell לעומת C

שפת תסריטיםשפת תסריטים היא C-shellשפת • (scripting languagescripting language)

קיימות שפות תסריטים מתקדמות יותר:– Perl, Tcl, PHP, JavaScript, Python, Ruby

מזל טוב! למדתם שפת התסריטים מזל טוב! למדתם שפת התסריטים •הראשונה שלכם!הראשונה שלכם!

4545

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

C-shell לעומת C

שפת תכנות מערכתשפת תכנות מערכת היא Cשפת • (system languagesystem language)

קיימות שפות תכנות מערכת מתקדמות יותר:– C++, Java, C#

4646

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

C לעומת C-shellיתרונות של אחרותקל להריץ תוכניותקל להריץ תוכניות•

להעביר פרמטרים–לשלב פלט של תוכניות–לשלב בין תוכניות– שבה יש הרבה תוכניות סטנדרטיותUnixיתרון גדול בסביבת –

(sort, grep,cut)קבציםקבצים נוחה עם עבודה•מחרוזותמחרוזותעבודה נוחה עם •משתנים ותסריטי עזרמשתנים ותסריטי עזרעבודה נוחה עם •

לא צריך להגדיר טיפוסים, להכריז על משתנים ופונקציות–!בזמן קצר יותר בזמן קצר יותר תוכניות לפתחלפתחניתן •

קצרה יותר קצרה יותר 5יכולה להיות פי בשפת תסריטים בשפת תסריטים תוכנית שכתובה –Cבשפת מאותה התוכנית שכתובה

4747

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

C לעומת C-shellחסרונות של

- קל להכניס באגיםפחות בטיחותית פחות בטיחותית השפה •אין בדיקות טיפוסים–לא חייבים להגדיר משתנים לפני השימוש בהם–לדוגמא, איפה הבאג בקוד הבא ? –

מה יודפס בסוף הריצה שלו ?•

4848

set deposits = ($*)set account_balance = 100foreach d ($deposits) @ acount_balance = $account_balance + $dendecho $account_balance

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

C לעומת C-shellחסרונות של

יכול C-shellשל תוכנית שכתובה ב-זמן ביצוע זמן ביצוע •לעומת אותה פי כמה מאות ארוך יותר פי כמה מאות ארוך יותר להיות

Cהתוכנית שכתובה ב-

4949

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

C לעומת C-shellשימוש ב-

כאשרC-shellמשתמשים ב-•לא קריטיזמן ביצוע –

למשל כאשר המשימה מספיק קטנה כך שזמן הביצוע •לא מורגש

לא קריטיתאיכות התוכנה –או שהתכנית מספיק קטנה כדי שיהיה אפשר למצוא בה •

את כל הבאגים בצורה קלה

כאשרCמשתמשים ב-•חשובזמן ביצוע –היא קריטיתאיכות התוכנה איכות התוכנה –

5050

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

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

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

Unixתהליכים ב-

•Unix מספר מספר היא מערכת הפעלה המסוגלת לשרתרב של משתמשים בו זמניתרב של משתמשים בו זמנית

בו זמנית מספר רב של בו זמנית מספר רב של כל משתמש יכול להריץ –תהליכיםתהליכים

כהרצה של תוכנית כלשהי תהליךתהליךניתן לראות •יכולים להתקיים במקביל מספר תהליכים שכולם –

מריצים את אותה התוכנית

תהליך יכול•תהליכים נוספים ליצורליצור– תהליך שיצר להרוגלהרוג–לתהליכים אחריםלשלוח הודעות לשלוח הודעות –

5252

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

תהליכים בקורס מת''מ

במת''מ לא נלמד כיצד תהליכים מבצעים את •כל הפעולות הנ"ל

נשאיר זאת לקורס במערכות הפעלה– יכולמשתמשמשתמשנלמד כיצד –

מספר תהליכיםליצורליצור•

על אופן ביצועםלשלוטלשלוט•

תהליכיםלהרוגלהרוג•

5353

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

מצבים של תהליכים

(foregroundforeground) בחזיתבחזיתריצה •יכול לרוץ בחזיתתהליך אחד תהליך אחד רק –לקרוא מהמקלדתלקרוא מהמקלדתרק התהליך בחזית יכול –עד סיום נעלם נעלם promptpromptה-ה-כשהמשתמש מריץ תהליך בחזית –

התהליךלא ניתן להריץ פקודות נוספות•

(backgroundbackground) ברקעברקעריצה •מספר תהליכים בו זמניתמספר תהליכים בו זמניתברקע יכולים לרוץ –לא יכול לקרוא מהמקלדתלא יכול לקרוא מהמקלדתתהליך שרץ ברקע – חוזר חוזרpromptpromptה-ה-כשהמשתמש מריץ תהליך ברקע –

ניתן להריץ פקודות נוספות•

השעיההשעיה•עד שיעבירו אותו למצב ריצה נעצרנעצרהתהליך –

5454

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

יצירת תהליכים

הקשת שם של הקשת שם של יוצרים תהליכים על ידי •להרצה בשורת הפקודה:התוכנית התוכנית

בחזית–

ברקעברקע–

5555

> command &> command2 &> command&>

> command

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

בדיקת מצב תהליכים

jobsjobsהפקודה •

מספרי תהליךמספרי תהליךהמספרים בסוגריים מרובעים מציינים –מזהים תהליכים בשביל הפקודות לטיפול בתהליכים•

התהליך ה"נוכחי" התהליך ה"נוכחי" סימן ה-"+" מייצג את –לפקודות לטיפול בתהליכיםברירת המחדל ברירת המחדל •

5656

>jobs>jobs[1] + Running command[1] + Running command[2] - Running command2[2] - Running command2[3] Running command[3] Running command

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

השעיית תהליך

הפקודה•jobIDאת התהליך שמספרו משעהמשעה–

התהליך בחזיתהתהליך בחזיתאת משעהמשעה - Ctrl-zהקשת •

5757

stop stop [%jobID]

> command> commandCtrl-zCtrl-z[1] + Suspended command[1] + Suspended command<<

>jobs>jobs[1] + Running command[1] + Running command[2] - Running command2[2] - Running command2> stop %1> stop %1>jobs>jobs[1] + Suspended (signal) command[1] + Suspended (signal) command[2] - Running command2[2] - Running command2>>

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

העברת תהליך לחזית

הפקודה•לחזיתלחזית jobIDאת התהליך שמספרו מעבירהמעבירה–

5858

fgfg [%jobID] [%jobID]

> more try_input.c> more try_input.cmain()main(){{ char str[20];char str[20]; printf("I shall try to eat something");printf("I shall try to eat something"); scanf(“%s" , str);scanf(“%s" , str); printf(“Ate %s" , str);printf(“Ate %s" , str);}}

> try_input&> try_input&[1] 828[1] 828> I shall try to eat something> I shall try to eat something[1] + Suspended (tty input) try_input[1] + Suspended (tty input) try_input> jobs> jobs[1] + Suspended (tty input) try_input[1] + Suspended (tty input) try_input> fg %1> fg %1try_inputtry_inputcookiescookiesAte cookiesAte cookies> >

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

העברת תהליך לרקע

הפקודה•לרקעלרקע jobIDאת התהליך שמספרו מעבירהמעבירה–

5959

bgbg [%jobID [%jobID]

>jobs>jobs[1] + Suspended (signal) command[1] + Suspended (signal) command[2] - Running command2[2] - Running command2> bg %1> bg %1>jobs>jobs[1] Running command[1] Running command[2] + Running command2[2] + Running command2> >

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

הריגת תהליך

הפקודה•jobIDאת התהליך שמספרו הורגתהורגת–

התהליך בחזית התהליך בחזיתאתהורגת הורגת - Ctrl-cהקשת •

6060

kill -9kill -9 %jobID %jobID

> command> commandCtrl-cCtrl-c<<

>jobs>jobs[1] + Running command[1] + Running command[2] - Running command2[2] - Running command2> kill -9 %2> kill -9 %2>jobs>jobs[1] + Running command[1] + Running command[2] Terminated command2[2] Terminated command2>>

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

תרשים המצבים של תהליך

6161

חזיתחזית

רקערקע

השעיההשעיה

סיוםסיום

Ctrl-zCtrl-z

Ctrl-cCtrl-c

fgfg

fgfg

stopstop

killkill

killkill

bgbg