71
מערכות הפעלהUNIX תרגול4 משתנים ב- UNIX Shayke Billu PhD Chapter 5 - Windows Processes 1

UNIX Chapter 4

  • Upload
    sce

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

UNIXמערכות הפעלה

UNIX -משתנים ב – 4תרגול

Shayke Billu PhD Chapter 5 - Windows Processes 1

File name expansions

דוגמאות*.c

cכל הקבצים עם סיומת

*AD*

ADקבצים שבשמותיהם צירוף האותיות

> gcc -c *.c

c.תקמפל את כל הקבצים עם הסיומת

<rm prog1.?

ולאחר .prog1-תמחק את כל הקבצים שמתחילים ב

מכן יש בדיוק תו אחד

Chapter 5 - Windows Processes 2 Shayke Billu PhD

File name expansions

דוגמאותfile[13]

ושאחרי file -מציין את כל הקבצים ששמותיהם מתחילים ב

.3או 1אותיות אלו מופיע או

file[A-Za-z13]

ושאחרי file -מציין את כל הקבצים ששמותיהם מתחילים ב

ב האנגלי או אחת "א-אותיות אלו מופיעה אחת מאותיות ה

.3או 1מהספרות

Chapter 5 - Windows Processes 3 Shayke Billu PhD

משתניםset <variable> = <value>

בשםמגדירה משתנהvariable וקובעת את ערכו ל- value.

value יכול להיות:

של מחרוזות ומספרים מחרוזת או רשימה , שלמיםמספרים

אין צורך להכריז על משתניcshell מוגדרים ברגע כיוון שהמשתנים . שמציבים להם ערכים

בכדי לקבל את ערכו של המשתנה יש להשתמש ב- $

$<variable> מחזיר את ערך המשתנהvariable

> set v = abc

> echo $v

abc

> set v = 123

> echo $v

123

Chapter 5 - Windows Processes 4 Shayke Billu PhD

> @ i = 3

> echo $i

3

> @ i = $i + 1

> echo $i

4

> @ i ++

> echo $i

5

> set v = 12

> @ v = $v + $i

> echo $v

17

משתנים מספריים ב- cshell ניתן להשתמש במשתנים המכילים מספרים שלמים ולבצע

.פשוטותעליהם פעולות חשבון

בתחילת פקודה מסמן לחשב את הביטוי המספרי בפקודה' @'הסימן .

ורוצים לאתחל את ערכו של משתנה במידה

. setבפקודה להיעזר ניתן לקבוע

בכדי לבצע פעולות חשבוניות אולם

@ -חייבים להשתמש ב

לבשימו:

ולפני הפקודה' @'יש לשים רווח אחרי

האסוציאטיביות אינה סטנדרטית .

5הינו 2-3+4טוי יערך הב: לדוגמא-

לצפותכפי שניתן היה 3ולא

Chapter 5 - Windows Processes 5 Shayke Billu PhD

מחרוזות ב- cshell ,אולם אם רוצים , כל רצף של תווים נקרא מחרוזת

כלומר )לעבוד עם מחרוזות המכילות יותר ממילה אחת

כך ( ) " יש לתחום אותן בין גרשיים ( מכילות גם רווחים

.שכל המשפט יהווה מחרוזת שהיא מילה אחת

> set a = "abc def ghe"

> echo $a

abc def ghe

מילת זו עדיין גם רווחים שימו לב כי למרות שהמילה מכילה

.מחרוזת אחת המורכבת משלוש תת מחרוזות

לתת להן מספור ניצטרךעל מנת לייצג כל תת מחרוזת

Chapter 5 - Windows Processes 6 Shayke Billu PhD

רשימות

עבור משתנהa המכיל רשימה של ערכים מציין הביטויa[i] את aברשימת הערכים i-האיבר ה

בcshell- מספור האיברים ברשימהa

(.כמו במערכים -0ולא מ) -1ממתחיל

> set a = (123 def ghi)

> echo $a

123 def ghi

> echo $a[2]

def

> set a[3] = ww

> echo $a

123 def ww

Chapter 5 - Windows Processes 7 Shayke Billu PhD

רשימות

cshell רשימה בתוך )לא תומך ברשימות מקוננות

: ולכן על הפקודה( רשימה

> set a[3] = (12 abc 34)

שגיאהנקבל:

set: syntax error

Chapter 5 - Windows Processes 8 Shayke Billu PhD

פעולות על רשימות

: ערכיםהמכיל רשימה של aהמשתנה עבור

הביטוי${#a} מציין את מספר האיברים ברשימה

הביטויa[m-n] מהאיבר ה, הרשימה-מציין את תת- m עד

n -לאיבר ה

הביטויa[-n] מהאיבר הראשון עד , הרשימה-מציין את תת

-nלאיבר ה

הביטויa[m-] מהאיבר ה, הרשימה-מציין את תת-m עד לסוף

הרשימה

הביטויa[*] מציין את הקבוצה המורכבת מכל איברי הרשימה

Chapter 5 - Windows Processes 9 Shayke Billu PhD

דוגמאות -רשימות

> 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

Chapter 5 - Windows Processes 10 Shayke Billu PhD

דוגמאות -רשימות

מזיזה את כל shift aהפעולה , aעבור רשימת ערכים

איברי הרשימה מקום אחד שמאלה ומבטלת את האיבר

.הראשון ומסירה אותו מרשימת הערכים

> set v = ( go to the beach )

> echo $v[1]

go

> shift v

> echo $v[1]

to

> echo $v

to the beach

Chapter 5 - Windows Processes 11 Shayke Billu PhD

נקודות מתקדמות בנוגע למשתנים

ניתן להתייחס לכל משתנה המכיל מחרוזת או מספר . בת איבר אחדכרשימה

הפעולות הבאות הינן חוקיות:

> set a = “abc def ghi”

> echo $a[1]

abc def ghe

שגיאההפקודה הבאה תגרום , אבל:

> echo $a[2]

a: Subscript out of range.

Chapter 5 - Windows Processes 12 Shayke Billu PhD

נקודות מתקדמות בנוגע למשתנים

י "לפרק מחרוזת לרשימת המילים המופיעות בה עניתן . השמת המחרוזת בתוך סוגריים

הדרך הסטנדרטית להפוך מחרוזת שבה רווחים רבים זו רווח אחדאך ורק בין המילים מופיע שבה לרשימה

>set b = ($a)

>echo $b

abc def ghe

>echo $b[2]

def

Chapter 5 - Windows Processes 13 Shayke Billu PhD

נקודות מתקדמות בנוגע למשתנים

להדגיש מהו מסולסלים כדי להשתמש בסוגריים ניתן . שמו של משתנה

שימושי במיוחד כאשר רוצים להוסיף סיומת הדבר :לערכו של משתנה

> set b = 123

> set a = ${b}4

> echo $a

1234

Chapter 5 - Windows Processes 14 Shayke Billu PhD

Command substitution

החלפת פקודה ב- cshell בתוך , כלומר, אפשר להשתמש בפקודות מקוננות

להשתמש בתוצאה של פקודה אחרת ניתן מסויימתפקודה

הכתובה בתוכה

על מנת לעשות זאת יש להקיף את הפקודה המקוננת

או backquotesהמכונים באנגלית)בגרשיים הפוכים

backticks) , ואז מובטח כי היא תתבצע לפני ביצוע שאר

הפקודההשורה ותוחלף בערך המוחזר מביצוע

Chapter 5 - Windows Processes 15 Shayke Billu PhD

> echo you have `ls | wc -l` files in `pwd`

you have 43 files in /home/rotics

פקודה )קודם שיערוך של הפקודות הפנימיות מתבצע

הסופרת את מספר השורות המתקבלות כתוצאה מהרצת

ופקודה המחזירה את השם של המדריך הנוכחי lsהפקודה

/home/rotics ) ולאחר מכן תוצאותיהן משובצות בפקודה

echoפקודת -החיצונית

Chapter 5 - Windows Processes 16 Shayke Billu PhD

Command substitution

החלפת פקודה

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

Chapter 5 - Windows Processes 17 Shayke Billu PhD

CSHELL -כיצד עובד ה

ניתן לראות את ה-C-Shell כ-Macro Processor : העובד בלולאה, מתוחכם

הצגתprompt

קבלת פקודה

עיבודה וביצועה, הפקודהניתוח

תוכנית ה , לצורך ביצוע עבודתוC-Shell מנהלת מספר :מבני נתונים

רשימת הפקודות האחרונות שבוצעו.

רשימת המשתנים

רשימת הalias.

Chapter 5 - Windows Processes 18 Shayke Billu PhD

: shell-Cעבודת ה סדר

הפקודה מופרדת למילים: הפקודהניתוח .

רווח והתווים-Tab כסימנים אשר משמשים

מפרידים בין כל אחת מהמילים

ביצוע החלפות לקבלת פקודה פשוטה: עיבוד הפקודה .

וכדמשתנים , החלפות היסטוריהמבוצעות'...

הפקודה הפשוטה שהתקבלה : ביצוע הפקודה

.מיידיתמבוצעת

Chapter 5 - Windows Processes 19 Shayke Billu PhD

CSHELL -כיצד עובד ה

הפקודה עיבוד

)pipeline redirection -ו ללא )

י "ע)בפקודות קודמות שימוש והפקודה מכילה במידה

History Substitutionמתבצע !( השימוש בסימן

של ההיסטוריה הפקודה שהתקבלה נשמרת ברשימת שורת . הפקודות שבוצעו

לאחר )שורת הפקודה ההיסטוריה ובוצעו החלפות במידה מודפסת למסך ( ההחלפות

> echo AAA

AAA

> echo !!

echo echo AAA

echo AAA

Chapter 5 - Windows Processes 20 Shayke Billu PhD

המילה הראשונה בפקודה הנה שם של אםalias מתבצע

alias substitution.

ביצועvariable substitution.

ביצועFile name substitution.

ביצועcommand substitution .

ה- back-quoted string (`... `) מוחלפת בתוצאת

הפקודה

Chapter 5 - Windows Processes 21 Shayke Billu PhD

הפקודה עיבוד

)pipeline redirection -ו ללא )

ביצוע הפקודהישנן שתי . לאחר בצוע כל ההחלפות הפקודה מבוצעת

:סוגי פקודות

פקודות חיצוניות

ניתן להריץ כל תוכנית הקיימת במערכת .

ה-Shell יפעיל את התוכנית ויעביר לה את (במידה וניתנו לה)הארגומנטים

בכדי למצוא את התוכנית ניתן: לתת את מיקומה המדויק(full path name).

והלתת רק את שם התוכנית- C-Shell יחפשה.

יתבצע בכל המדריכים המופיעים בכל מקרה החיפוש .pathברשימה של המשתנה

Chapter 5 - Windows Processes 22 Shayke Billu PhD

פנימיותפקודות

הלתוכנית הניתנות פקודות- C-shell עצמה

.אותןשמפרש Shell -הי "ומבוצעות ע

סטוריה יההניהול(history)

ניהול רשימת המשתנים(set/unset/shift)

ניהול רשימת הalias (alias/un-alias)

השינוי- working directory (cd)

(בתרגול הבא)בקרת זרימה בתסריטים

תהליכיםניהול Chapter 5 - Windows Processes 23 Shayke Billu PhD

ביצוע הפקודה

נקודות מתקדמות –עיבוד הפקודה

I/O redirection - פקודת המיקום מחדש

I/O redirection י ה"מתבצע ע-Shell . תפקידו

להפנות את הקלט והפלט של הפקודה המבוצעת

קובץ/מסך/מקלדת: לערוץ המתאים

המבוצעת כלל אינה מודעת לכך שבוצע הפקודה

I/O redirection , כיוון שכל ההפניות מבוצעות

Shell -י ה"ע

Chapter 5 - Windows Processes 24 Shayke Billu PhD

Pipeline הצינור"פקודת"

ה-pipeline י התו "הינו סדרת פקודות המופרדות ע

‘|’ .

השנייהמבוצעות באופן סדרתי האחת אחר הפקודות ,

standard -פקודת המפנה את Shell -הכאשר

output של כל פקודה

של הפקודה standard input -ל pipeline -ב

. הבאה

Chapter 5 - Windows Processes 25 Shayke Billu PhD

נקודות מתקדמות –עיבוד הפקודה

טיפול במחרוזות

ה-shell התווים . מפריד את שורת הפקודה למילים

מהווים מפרידים בין מילים tab -ורווח

למשל )בתוכה רווחים במידה ונרצה שמילה תכיל

יש לשים את המילים ( מסויימתלפקודה כארגומנט

יתייחס אליהן כאל shell -וההנפרדות בתוך גרשיים

.מילה אחת –מחרוזת

Chapter 5 - Windows Processes 26 Shayke Billu PhD

נקודות מתקדמות –עיבוד הפקודה

סוגי גרשיים –עיבוד הפקודה ` - גרש הפוך(back quote)

" - גרשים כפולות(double quote)

' - גרש יחיד(single quote)

back quotes משמשים לצורךcommand substitution .

ה-shell מתייחס לכל המחרוזת בין ה-back quotes כאלתוצאת הפקודה מוחלפת במחרוזת . פקודה אחת ומבצע אותה

. הפקודה

ובתוצאת הפקודה ישנם רווחים אזי הבמידה-shell יתייחס מיליםלתוצאת הפקודה כאל מספר

Chapter 5 - Windows Processes 27 Shayke Billu PhD

סוגי גרשיים –עיבוד הפקודה

single quotes ו- double quotes משמשים בכדי

מופרדות )להתייחס למספר מילים Shellלגרום ל

. כאל מילה אחת( וטאביםברווחים

י השמת של מחרוזת בין גרשיים ניתן לגרום ל"ע-

Shell להתנהג באופן שונה מהרגיל.

Chapter 5 - Windows Processes 28 Shayke Billu PhD

סוגי גרשיים –עיבוד הפקודה

למשתנה במידה ומופיעה התייחסות –משתנים החלפת

המשתנה יוחלף double quoted string -בתוך ה

. בערכו

מופיעה בתוך במידה וההתייחסותsingle quoted string

:לא תתבצע החלפה

> set a = AAA

> echo “a=$a”

a=AAA

> echo ‘a=$a’

a=$a

Chapter 5 - Windows Processes 29 Shayke Billu PhD

סוגי גרשיים –עיבוד הפקודה

לא מבוצעת עבור –שמות קבצים החלפתsingle

or double quoted strings.

הנמצאת בכאשר המחרוזת –פקודות החלפת-

back quotes הסימון של מופיעה בתוךdouble

quote ה- shell מתייחס לתוצאת כאל מילה אחת.

Chapter 5 - Windows Processes 30 Shayke Billu PhD

קבצי סקריפט

קבציscript סדרה של פקודות שמכילים הם קבצים

shell , אלו מהווים מעין תוכניות הכתובות תסריטים

Shell -בשפת ה

אלו נכתבות בקובץ רגיל ולאחר מכן מורצותתוכניות

מספר דרכים להריץ תסריטיםישנן .

אחת הנה באמצעות הפקודה דרךsource .

>source clean

cleanתריץ את התסריט

. Chapter 5 - Windows Processes 31 Shayke Billu PhD

קבצי סקריפט

והקובץ במידהclean (אשר הנו קובץ טקסט רגיל )

:הבאותהכיל את הפקודות

rm *.o

mv ex1 ex1.old

הקבצים מסוג ימחקו כל , אזי לאחר ביצוע הפקודה

object ושם הקובץex1 לישונה-ex1.old.

Chapter 5 - Windows Processes 32 Shayke Billu PhD

C-shell שפת התסריטים של

:C-shellבכתיבת התסריטים נעזר בכל יכולות ה

nix במשתניםושימוש הגדרה

שימוש ב- File name expansion

תוכניות שמושיות בU –

יתרונו של התסריט ב-C-shell הנו יכולתו להריץ תוכניות

. שכבר נמצאות במערכת בקלות

מערכת בכלunix קיים סט של תוכניות שמושיות–

utilities בתסריטאשר ניתן לנצלן לצורך שילובן Chapter 5 - Windows Processes 33 Shayke Billu PhD

בבקרה מבני- C-shell

כ כ"משמשים בדמאלה אלא תסריטים אינם תחליף לתוכנית-

בין תוכניות קיימות" דבק חכם"

גם בעת ביצוע תסריט מתבצעות כל ההחלפות בעת ניתוח

פ אותו הסדר אשר הוצג בשיעור שעבר"שורת פקודה ע

Chapter 5 - Windows Processes 34 Shayke Billu PhD

C-shell שפת התסריטים של

CShell -מבני בקרה ב

ב- CShell יש מבני בקרה הדומים לאלה אשר בשפת

C

לולאות

משפטי תנאי

קפיצה בלתי מותנת

Chapter 5 - Windows Processes 35 Shayke Billu PhD

CShell -לולאות ב :repeatמשפטי

על הפקודה חוזרCShell command בדיוקcount פעמים.

>repeat 3 echo hello world

hello world

hello world

hello world

כפי שרואים פקודה זו שמושית גם בצורת עבודה .אינטראקטיבית

repeat <count> <cshell command>

Chapter 5 - Windows Processes 36 Shayke Billu PhD

CShell -לולאות ב משפטיwhile:

while (<expression>)

<cshell commands>

end

> source

count10

0

1

2

3

4

5

6

7

8

9

# count10 script:

@ i = 0

while ($i<10)

echo $i

@ i++

end

Chapter 5 - Windows Processes 37 Shayke Billu PhD

CShell -לולאות ב

לפי המוצגים ברשימה המשתנה מקבל את כל אחד מהערכים .סדר

הלולאהשל איטרציהערך אפשרי של המשתנה מתבצעת לכל ,או להתאים לתבנית , יכולה להיות כתובה במפורשהרשימה

.קבציםבדומה לשמות של

כי במדריך מסוים קיימים הקבצים הבאיםנניח:

amortize.c, helloworld.c, prog.c

foreach <variable> (<list of words>)

<cshell commands>

end

:foreach משפטי

Chapter 5 - Windows Processes 38 Shayke Billu PhD

CShell -לולאות ב

:הפקודה, אזי

foreach F (*.c)

echo $F

end

:תדפיס

amortize.c

helloworld.c

prog.c

בלולאותforeach ו- while ניתן גם להשתמש בפקודותbreak .C -כמו ב continue -ו

Chapter 5 - Windows Processes 39 Shayke Billu PhD

משפטי תנאי

:הינם ifהתנאים אותם ניתן לבחון במשפט ה תנאים חשבוניים :if ($a > 0( …

השוואת מחרוזות :if ($a == "kiko"( …

ל יחודייםתנאיםc-shell:

if (<expression>) <one cshell command>

או

if (<expression>) then

<cshell commands>

[else

<cshell commands>]

endif

:if משפטי

if (-d $dir) then

cd $dir

…..

endif

ואם כן עובר אליו, מכיל שם מדריך dirבודק אם המשתנה

Chapter 5 - Windows Processes 40 Shayke Billu PhD

התאמה בין מחרוזות -משפטי תנאי

י "עכזו המתבצעת , פרט להשוואה רגילה בין שתי מחרוזות

לבדוק התאמה בין מחרוזות באופן חלקי ניתן , ==האופרטור

=~באמצעות האופרטור

בצד שמאל של האופרטור חייבת להופיע מחרוזת מלאה אך

: בצד ימין יכולה להופיע מחרוזת הכוללת סימנים מיוחדים כגון

שמשמעותם תוארה בשקפים קודמים [ ]או , ?, $

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

Chapter 5 - Windows Processes 41 Shayke Billu PhD

התאמה בין מחרוזות -משפטי תנאי

> if (end_with_z =~ *[zZ]) echo match

match

> if ("no point in string" !~ *.*) echo "no point"

no point

> if ("no point - . - in string" !~ *.*) echo "no point"

>

.משווים בין מספרים( 'וכד= >, <, <)האופרטורים

.משווים בין מחרוזות! ~= , ~=!, ==האופרטורים

> if (0123 != 123) echo NOT

NOT

Chapter 5 - Windows Processes 42 Shayke Billu PhD

משפטי תנאיswitch (<string>)

case <string1>:

<cshell commands>

[breaksw]

case <string2>:

<cshell commands>

[breaksw]

.

.

.

case <string_n>:

<cshell commands>

[breaksw]

[default:

<cshell commands>]

endsw

switch ($F)

case "*.c":

lpr $F

breaksw

case "*.o":

rm $F

breaksw

endsw

:switch משפטי

Chapter 5 - Windows Processes 43 Shayke Billu PhD

קפיצה בלתי מותנת

:gotoמשפטי :<label> -קופץ למקום המסומן ב -

goto <label>

if (-f diary) then

lpr diary

else goto endprog

endif

if (-f diary2) then

lpr diary2

endif

endprog:

אחרת קופצים , אז מדפיסים אותו וממשיכים diaryאם קיים קובץ

.לסוף התוכנית

goto -בלא רצוי להשתמש !( כרגיל)אך , לטיפול בשגיאותשימושי

.באופן כלליChapter 5 - Windows Processes 44 Shayke Billu PhD

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

: בשתי דרכים scriptניתן להריץ את קבצי ה

י "להריץ את הקובץ בכל פעם עsource <file name>

הקובץ מורץ בתוך ה-shell ולכן יש לו גישה , הנוכחי

למשתנים שהגדרנו ושינויים שהוא יבצע במשתנים

"ייזכרו"

לקבוע את הקובץ כexecutable י "להריץ אותו ע, פעם אחת

<file name>

Chapter 5 - Windows Processes 45 Shayke Billu PhD

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

> chmod +x myscript

,כעת. executable -ל myscriptהופך את הקובץ

:הפקודה

> myscript

shellבתוך , scriptכקובץ myscriptתריץ את הקובץ

למשתנים לא ששינויים שיתבצעו כך , משל עצמוחדש

להרצה" מחוץ"ייזכרו

Chapter 5 - Windows Processes 46 Shayke Billu PhD

הרצת קבצי סקריפט כל קובץscript שרוצים להריץ בצורה זו חייב להתחיל עם

:השורה הבאה

#! /usr/local/bin/tcsh -f

. במחשבים שונים כתובת קובץ ההפעלה יכולה להשתנות•

שם של שבהינתן, whichלמצוא מהי באמצעות הפקודה ניתן •

, מכיר shell-ים שה-PATH-באחד הקובץ הפעלה שנמצא

.מחזירה את הכתובת המלאה שלו

יש להשתמש shellבאיזה

לצורך הרצת התסריט

לא לקרוא את קבצי shell-אומר ל

האתחול שנקראים בדרך כלל

Chapter 5 - Windows Processes 47 Shayke Billu PhD

setup קבצי שרצים אוטומטיתמיוחדים scriptהם קבצי setupקבצי

. בזמנים מסוימיםהמערכת י "ע

:אלו הםקבצים

.login - מבוצע עם כניסת משתמש לחשבונו

.cshrc - מבוצע בהתחלת כלshell

אלה מופעלים בצורה אוטומטית בזמנים קבצים

או , סביבה חשוביםבהם משתני לאתחל נהוג , מצוינים

. aliasלפקודות עם חדשים שמות להגדיר

:דוגמא

<cat .cshrc

set path = ($path ./)

set history=40

alias ll 'ls -al'

alias m 'more'

alias . 'pwd'

alias .. 'cd ..'

alias ... 'cd ../..'

Chapter 5 - Windows Processes 48 Shayke Billu PhD

סקריפט לקבציפרמטרים לקבציניתן לתת פרמטרים script .

לפרמטרים אלה בתוך קובץ הניתן להתייחס- script כדלקמן: $0 - הפקודה עצמה

$1 - הפרמטר הראשון(באופן כללי :${n} מתייחס לפרמטר ה-n.)

$* - רשימת כל הפרמטרים הנתונים לפקודה

{- ${#argv מציין את מספר הפרמטרים הנתונים לפקודה.

- ${argv[n]} מציין את הפרמטר מספרn.

שתפקידו להדפיס את הקבצים שהוא מקבל כפרמטרים printקובץ בשם

#! /usr/local/bin/tcsh -f

foreach F ($*)

lpr $F

end

: דוגמת הרצה

> print a.c b.c prog.c

Chapter 5 - Windows Processes 49 Shayke Billu PhD

קריאת שורות מקבצים קוראת שורה מה ( (>$הפקודה- standard input לתור רשימה.

> set str2 = ($<)

This line is typed by the user

> echo $str2

This line is typed by the user

> echo $str2[1]

This

> echo $str2[2]

line

כאן נוצרה רשימהstr2 התוכן שלה הוא שורת הקלט מהאשרstandard input -

!!!אפשרות לקרוא שורות קלט מקובץ cshell-אין ב standard input -רק מה

Chapter 5 - Windows Processes 50 Shayke Billu PhD

קריאת שורות מקבציםכותבים את ה, כאשר רוצים לקרוא קובץ-script שמטפל

standard-מידע מהבשורות הקובץ כאילו הוא מקבל קלט

input

לאחר מכן יוצרים קובץscript שתפקידו , "מעטפת" -חדש

תוך שהוא מפנה אליו את , המקורי script-להפעיל את ה

הקובץ שאותו רוצים לקרוא

: כלומר

אנחנו גורמים לקובץ שאנחנו pipelining -באמצעות השימוש ב

.הסקריפטשל standard input -הרוצים לקרוא להופיע בתור

Chapter 5 - Windows Processes 51 Shayke Billu PhD

דוגמא

>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 Har.3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

המכיל נתונים על שערים שהובקעו footballנתון קובץ

, שורה בקובץ מציינת שם של שחקןכל . במשחקי כדורגל

מספר השערים שהבקיע במשחק שנערך בתאריך

.שם הקבוצה בה הוא שיחק ושם הקבוצה היריבה, מסוים

Chapter 5 - Windows Processes 52 Shayke Billu PhD

דוגמאאשר יקבל כפרמטר , playerבשם scriptברצוננו לכתוב

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

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

Chapter 5 - Windows Processes 53 Shayke Billu PhD

פתרון

ב- script בשםplayer לא נוכל לבצע קריאת שורה-

ולכן נשתמש בו בתור footballשורה של הקובץ

script-את העבודה האמתית נבצע ב, מעטפת בלבד

אשר יבצע את מבוקשנו על קלט calc_totalאחר בשם

. standard input-שיתקבל מה

כעת ,script המעטפתplayer כעת יכול להשתמש

אל footballשל הקובץ על ידי הפנייה , calc_total -ב

.שלו standard input-ה

:את שני התסריטים לביצוע המשימהנציג

Chapter 5 - Windows Processes 54 Shayke Billu PhD

פתרון

> cat calc-total

#!/usr/local/bin/tcsh -f

set line = ($<)

set sum = 0

while (${#line} != 0)

@ sum = $sum + $line[3]

echo $line

set line = ($<)

end

echo "total number of goals: $sum"

> cat player

#!/usr/local/bin/tcsh -f

grep "$1" football | calc-total

Chapter 5 - Windows Processes 55 Shayke Billu PhD

דוגמא מסכמת

לפנינוscript בשםscores המדרג את השחקנים

לפי , אשר שמותיהם המלאים מועברים כפרמטר

. footballהנתונים המוכלים בקובץ

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

שני שחקנים שהבקיעו מספר זהה של כאשר , הבקיע

.שערים יקבלו דירוג זהה

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

.המלא ואת מספר השערים שהבקיע

Chapter 5 - Windows Processes 56 Shayke Billu PhD

דוגמא מסכמת

>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 Har.3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

Chapter 5 - Windows Processes 57 Shayke Billu PhD

דוגמא מסכמת

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

> 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

Chapter 5 - Windows Processes 58 Shayke Billu PhD

פתרון

> cat scores

#!/usr/local/bin/tcsh -f

@ i = 1

while ( $i <= ${#argv} )

grep "${argv[$i]}" football | calc_score >>! temp

@ i++

end

sort -n +2 -r temp | calc_place

if (-f temp) then

rm -f temp

endif

כ "יחזיר את שם השחקן וסה

הגולים שהבקיע ' מס

ימספר את השחקנים

בהתאם לדירוגם

Chapter 5 - Windows Processes 59 Shayke Billu PhD

פתרון

> cat calc_place

#!/usr/local/bin/tcsh -f

set 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

#!/usr/local/bin/tcsh -f

set line = ($<)

set sum = 0

set player_name = ($line[1-2])

while (${#line} != 0)

@ sum = $sum + $line[3]

set line = ($<)

end

echo "$player_name $sum"

Chapter 5 - Windows Processes 60 Shayke Billu PhD

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

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

וכמו כן כל משתמש יכול להריץ בו , משתמשים בו זמנית

תהליכים במקבילזמנית מספר רב של

להרוג תהליך שיצר , תהליך יכול ליצור תהליכים נוספים

ולשלוח הודעות לתהליכים אחרים במערכת

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

אלא נלמד כיצד , (נשאיר זאת לקורס במערכות הפעלה)ל "הנ

משתמש יכול לייצר מספר תהליכים ולשלוט על אופן ביצועם

Chapter 5 - Windows Processes 61 Shayke Billu PhD

יצירת תהליכים :ישנן שתי צורות להריץ תוכניות Unix -ב

foregroundהרצה בחזית

י כתיבת הפקודה"עמתבצעת:

<command>

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

הנוכחית לא הסתיימה

ברקע היותר הרצה בחזית יכולה להתבצע פקודה אחת לכלbackground

Chapter 5 - Windows Processes 62 Shayke Billu PhD

יצירת תהליכים י כתיבת הפקודה בתוספת "עמתבצעת& :

<command> &

>gcc Calc.c -o Calc

.הפקודה מורצת בחזית

>gcc Calc.c -o Calc &

>

.הפקודה מורצת ברקע

על מנת לבצע מספר תוכניות בו זמנית יש להריצן הפרומפטתחילת ביצוע פקודה ברקע מופיע לאחר . ברקע

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

Chapter 5 - Windows Processes 63 Shayke Billu PhD

בעזרת הפקודהjobs ניתן לבדוק אילו תהליכים

:shell-קיימים ב

התהליך –" נוכחי"מייצג את התהליך ה"+" -הסימן

שהוא ברירת המחדל לפקודות שנציג בהמשך

התהליך שיקבל את –" יורש"מייצג את ה" -"-סימון ה

אחרי שהתהליך הנוכחי יסיים את ריצתו"+" -סימן ה

Chapter 5 - Windows Processes 64 Shayke Billu PhD

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

< more forever.c

main()

{

printf("I am going to run forever !!!\n");

while (1) ;

}

> forever &

[1] 587

> I am going to run forever !!!

> jobs

[1] + Running forever

> kill -9 %1

>

[1] Killed forever

>jobs

[1] + Running cc prog.c

[2] - Running troff -me big_doc.roff

פקודות נוספות המאפשרות הצגה של

התהליכים

:שקיימים כרגע הן

ps -ו top .

ניתן למצוא את המידע שלהן man-בקבצי ה

Chapter 5 - Windows Processes 65 Shayke Billu PhD

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

פקודות לניהול תהליכים בכל הפקודות שנלמד בהמשך לניהול תהליכים יש מספר דרכים

:לציין תהליך מסוים

%n - תהליך מספרn.

%s - התהליך אשר שורת פקודתו מתחילה במחרוזתs.

%?s - job אשר שורת פקודתו מכילה את המחרוזתs.

%% - (.התהליך שסומן ב)התהליך הנוכחי"+"

%- - (.-"התהליך שסומן ב)התהליך הבא"

לדוגמא כל המחרוזות הבאות מתייחסות לאותו תהליך מהדוגמא :הקודמת

%1

%forever

%for

%?ever

Chapter 5 - Windows Processes 66 Shayke Billu PhD

העברת תהליכים לחזית

מעבירה את התהליך הנוכחי או[jobIDs] לחזית.

fg [jobIDs]

> more try_input.c

main()

{

char str[20];

printf("I shall try to eat something");

scanf("%s" , str);

printf("%s" , str);

}

> try_input&

[1] 828

> I shall try to eat something

[1] + Suspended (tty input) try_input

> jobs

[1] + Suspended (tty input) try_input

> fg %1

try_input

goodies

goodies

>

Chapter 5 - Windows Processes 67 Shayke Billu PhD

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

מעבירה את התהליך הנוכחי או[jobIDs] לרקע

bg [jobIDs]

> jobs

[1] + Suspended forever

> bg %1

[1] forever &

> jobs

[1] Running forever

>

Chapter 5 - Windows Processes 68 Shayke Billu PhD

השעיית תהליךCtrl-z - משעה את התהליך המתבצע כרגע בחזית .

י שימוש בפקודות "מושעה ניתן להעביר לחזית או לרקע עתהליךfg אוbg.

הפקודהstop jobIDs

jobIDsאת משעה

> nroff -ms report

Ctrl-z

[1] + Suspended nroff

<bg %

> emacs &

[1] 982

> forever&

[2] 991

> jobs

[1] + Running emacs

[2] - Running forever

> stop %2

>

[2] + Suspended (signal) forever

> jobs

[1] - Running emacs

[2] + Suspended (signal) forever

>

Chapter 5 - Windows Processes 69 Shayke Billu PhD

הריגת תהליך

Ctrl-c - הורג את התהליך המתבצע כרגע בחזית

הפקודהkill -9 jobID הורגת את התהליךjobID.

פקודת , שמה האכזרילמרותkill משמשת באופן כלליבפועל שתי ההודעות הנפוצות ביותר שאנו . לשליחת הודעות

תמות תכף "ו( SIGTERM" )תמות"שולחים לתהליכים הן (.SIGKILL!" )ומייד

< forever&

[1] 660

> I am going to run forever !!!

> kill -9 %fo

> jobs

>

Chapter 5 - Windows Processes 70 Shayke Billu PhD

הריגת תהליך הפרמטר הדרוש לפקודתkill ,הוא , בנוסף למזהה התהליך"-

n" , כאשרn הוא מספר מזהה של הודעה .

ברירת המחדל היא שליחת ההודעה , לא מוסיפים מספראם ". תמות" – 15שמזוהה עם המספר

ומיידתמות תכף "היא 9שמזוהה עם המספר ההודעה ."!

מאפשרת לתהליך " תמות"בן שתי ההודעות היא שההבדלכמו ביצוע סגירה של )להרוג את עצמו בצורה מסודרת

במערכת shut downהמחשב על ידי לחיצה על הכפתור תמות תכף "ואילו , ואפילו להתעלם מההוראה( ההפעלה

כמו ביצוע סגירה של ) ומיידהורגת את התהליך תכף !" ומייד (המחשב על ידי ניתוק מהחשמל

Chapter 5 - Windows Processes 71 Shayke Billu PhD