68
ללללל6 ללללללל לללל ללללללללל- לUNIX C-Shell לל לללל- לל[email protected] לללל לללללל ל''ל לללל לללללללל

תרגול 6 תוכניות שרות סטנדרטיות ב -UNIX C-Shell לי-טל משיח [email protected]@cs.technion.ac.il נערך והורחב ע''י ודים

  • View
    234

  • Download
    0

Embed Size (px)

Citation preview

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

6תרגול

UNIXתוכניות שרות סטנדרטיות ב-C-Shell

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

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

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

UNIX תוכניות שרות סטנדרטיות ב- UnixUnixבכל מחשב בו מותקנת מערכת הפעלה מסוג •

((utilitiesutilities))תוכניות שרות תוכניות שרות מותקנות בנוסף מספר סטנדרטיותסטנדרטיות

סטנדרטיות ((commandscommands))פקודות פקודות בפשטות נקראות גם – יכול להריץ תוכניות אלה לצורך Unixכל משתמש •

ביצוע המשימות שלו)שרות ורגילות( לשלב בין תוכניות לשלב בין תוכניות ניתן Unixב-•

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

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

22

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

echoהפקודה

echo <parameters>echo <parameters>מדפיסה את הפרמטרים שלה•

33

>echo Hello world !Hello world !>echo Hello world !Hello world !

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

פקודות לעיבוד קבצים

Unixנלמד מספר פקודות לעיבוד קבצים ב-•

עיבוד קבצים:•קבציםתוכן תוכן הדפסת –מקבציםשורות מסוימות שורות מסוימות הדפסת –בצורה ממוינתבצורה ממוינתהדפסת קבצים –מקבציםחלקי שורות חלקי שורות הדפסת –, מילים ותווים בקבצים ספירת שורותספירת שורות–

44

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

פורמט של רוב הפקודות לעיבוד קבצים

command [options] [input files]command [options] [input files])דגלים(, בד''כ כלל אופציותאופציותהפקודה מקבלת •

תו "-" ואות אחת

קובצי קלטקובצי קלטהפקודה מקבלת אחד או כמה •

אם לא ניתן אף קובץ קלט הפקודה מצפה •הקלט הסטנדרטיהקלט הסטנדרטילקלט מ

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

55

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

headהפקודה head [-N] [input files]head [-N] [input files]

מתוך הקלטהשורות הראשונות Nמדפיסה •10ברירת מחדל היא –בהינתן הקבצים –

•a_file

•b_file

66

a line 1a line 2a line 3a line 4a line 5

a line 1a line 2a line 3a line 4a line 5

b line 1b line 2b line 3

b line 1b line 2b line 3

> head -2 a_filea line 1a line 2> head -1 < b_fileb line 1> head -2 a_file b_file==> a_file <==a line 1a line 2

==> b_file <==b line 1b line 2

> head -2 a_filea line 1a line 2> head -1 < b_fileb line 1> head -2 a_file b_file==> a_file <==a line 1a line 2

==> b_file <==b line 1b line 2

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

tailהפקודה

tail -N [input files]tail -N [input files]מתוך השורות האחרונות NNמדפיסה את •

הקלט10ברירת המחדל היא –

tail +N [input files]tail +N [input files]מתוך הקלט השורות האחרונות מדפיסה את •

NNהחל מהשורה החל מהשורה

77

> tail -2 a_filea line 4a line 5

> tail -2 a_filea line 4a line 5

> tail +2 a_filea line 2a line 3a line 4a line 5

> tail +2 a_filea line 2a line 3a line 4a line 5

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

3 ו-2להדפיס שורות משימה פשוטה:של קובץ

?tail ו-headאיך עושים את זה בעזרת •

> head -3 > first3> tail -2 first3a line 2a line 3> rm first3

> head -3 > first3> tail -2 first3a line 2a line 3> rm first3

מסורבל

88

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

פתרון פשוט : שילוב בין תוכניות pipelineבעזרת

בין תוכניות בעזרת מגנון לשלבלשלב ניתן Unixב-•pipelinepipeline:

> program1 | program2 | program3> program1 | program2 | program3מחובר מחובר command1 הסטנדרטי של הפלטהפלט•

בעזרת סימן command2הסטנדרטי של לקלט לקלט ''II''

99

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

Pipelining

> program1 | program2 | program3> program1 | program2 | program3את לוקחת כקלט לוקחת כקלט pipelineכל תוכנית ב-•

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

בשורה.head -3 a_file | tail -2 <פתרון של המשימה הקודמת בשורה אחת:–

a line 2a line 3

> head -3 a_file | tail -2a line 2a line 3

1010

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

catפקודה

cat file_1 file_2 … file_k cat file_1 file_2 … file_k ,file_1,file_2מדפיסה את תוכן הקבצים •

…,file_k אחד אחרי השניאחד אחרי השני לפלט הסטנדרטי

cat b_file a_file | head -4 <דוגמא : •b line 1b line 2b line 3a line 1

> cat b_file a_file | head -4b line 1b line 2b line 3a line 1

1111

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

lessהפקודה

less <input file>less <input file>עם הפסקה אחרי עם הפסקה אחרי מציגה את הקובץ על המסך •

כל דףכל דףבקובץ המוצג בעזרת לדפדף קדימה ואחורה לדפדף קדימה ואחורה ניתן –

מקשי החצים ואחריו / מחרוזת על ידי הקשת תו לחפשלחפשניתן –

המחרוזת לחיפושCtrl-c q או q:יוצאים מהפקודה על ידי הקשת –

1212

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

lsהתנהגות הפקודה

מדפיסה רשימת קבציםlsהפקודה •

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

מדפיסה את ls למסךלמסךאם הפלט מיועד –בשורותבשורותקבצים

pipepipe, lsלקובץ או ל-לקובץ או ל-אם הפלט מיועד –אחד בשורהאחד בשורהמדפיסה את הקבצים

> lsaaa ccc eeebbb ddd

> lsaaa ccc eeebbb ddd

> ls | cataaabbbcccdddeee

> ls | cataaabbbcccdddeee

> ls > out> less outaaabbbcccdddeee

> ls > out> less outaaabbbcccdddeee

1313

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

teeהפקודה

tee [options][files] tee [options][files] את כל מה שנכנס לקלט משכפלתמשכפלתהפקודה •

לפלט הסטנדרטי לפלט הסטנדרטי אותו הן ושולחתושולחתהסטנדרטי שלה [files]ב לכל אחד מהקבצים לכל אחד מהקבצים והן

לדוגמא, אם בנוסף להצגת השורה השנייה •והשלישית נרצה לשמור את שלוש השורות

בשני קבצים שונים, נוכל a_file הראשונות של הקובץ לבצע :

אופציות נוספות:• של הפלט לסוף הקבצים שרשורשרשור מאפשרת a-האופציה –

[files].במקום מחיקתם

> head –3 a_file | tee file1 file2 | tail –2> head –3 a_file | tee file1 file2 | tail –2

1414

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

teeתיאור גרפי של הפעולה של

1515

From From http://commons.wikimedia.org/wiki/File:Tee.svg, Creative Commons License, Creative Commons License

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

teeהפקודה

tee [options][files] tee [options][files] לא בפורמט לא בפורמט היא teeשימו לב שהפקודה •

הסטנדרטי של פקודות לעיבוד קבצים:רק מהקלט הסטנדרטירק מהקלט הסטנדרטיהיא מקבלת את הקלט –, ולא לקלטהקבצים לפלטהקבצים לפלטהיא מקבלת רשימת –

1616

From From http://commons.wikimedia.org/wiki/File:KF_25_Tee.jpg Creative Commons LicenseCreative Commons License

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

sortהפקודה

sort [options] [files]sort [options] [files]ממוינת ממוינת מדפיסה את תוכן הקלט בצורה •

מיון לקסיקוגרפי בררת מחדל:–אופציות:•

-n מספרימספרי ממיין בסדר-r את סדר המיון הופךהופך-k num החל ממילה החל ממילה לכל שורה מתייחסמתייחסnumnum המילים ,

1ממוספרות החל מ--fמתעלם מהבדלי uppercase/lowercaseuppercase/lowercase -m מספר קבצים שכבר מויינו לקובץ אחד )יותר יעיל ממזגממזג

מאשר למיין אותם שוב כקובץ אחד(-bרווחים בתחילת השורהרווחים בתחילת השורה מתעלם מ-d פיסוקפיסוק מתעלם מסימני

1717

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

- דוגמאותsortהפקודה > less data WorldwhouldforFather> sort dataFatherWorldforwhould> sort data -fFatherforwhouldWorld> sort data -rwhouldforWorldFather

> less data WorldwhouldforFather> sort dataFatherWorldforwhould> sort data -fFatherforwhouldWorld> sort data -rwhouldforWorldFather

> ls -altotal 6-rw------- 1 romano root 520 Nov 8 23:09 data-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 322 Nov 10 13:30 ex3> ls -al | sort -n -k 5total 6-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 322 Nov 10 13:30 ex3-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano root 520 Nov 8 23:09 data>

> ls -altotal 6-rw------- 1 romano root 520 Nov 8 23:09 data-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 322 Nov 10 13:30 ex3> ls -al | sort -n -k 5total 6-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 322 Nov 10 13:30 ex3-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano root 520 Nov 8 23:09 data>

1818

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

סדר מילוני לעומת מספרי

המילוניהמילוניבין הסדר להבדיללהבדיל חשובחשוב•המספריהמספרי)לקסיקוגרפי( והסדר

1919

> less numbers221113

> less numbers221113

> sort numbers111223

> sort numbers111223

> sort numbers -n322111

> sort numbers -n322111

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

grepהפקודה

grep [options] [^]word [files]grep [options] [^]word [files]wordמדפיסה שורות בהן מופיעה המילה •אופציות:•

-v לא מופיעה לא מופיעה הדפס את השורות, בהןword (פעולה הפוכהפעולה הפוכה)-i התעלם מהבדלי uppercase/lowercaseuppercase/lowercase-w מופיעהמופיעההדפס את כל השורות בהן word

)לא כתת מחרוזת( בדיוקבדיוק

2020

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

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

בהינתן הקובץ–•farm1

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

> grep cow farm1cow Betsyslim cow Dazytwo cows Dartsy & Teo

> grep cow farm1cow Betsyslim cow Dazytwo cows Dartsy & Teo

> grep -v cow farm1goat UptonFat Cow Burgerhorse Admiral

> grep -v cow farm1goat UptonFat Cow Burgerhorse Admiral

> grep -i cow farm1cow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teo

> grep -i cow farm1cow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teo

> grep -w cow farm1cow Betsyslim cow Dazy

> grep -w cow farm1cow Betsyslim cow Dazy

2121

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

נקודות נוספותgrep - הפקודה

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

כותבים את הביטוי בין גרשיים:

> grep "slim cow" file> grep "slim cow" file מדפיסה grep מופיע לפני המילה, ^כשסימן •

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

> grep ^cow file> grep ^cow file

2222

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

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

בהינתן הקובץ–•farm1

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

> grep "slim cow" farm1slim cow Dazy> grep "slim cow" farm1slim cow Dazy

> grep ^cow farm1cow Betsy> grep ^cow farm1cow Betsy

2323

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

- אופציות נוספותgrepהפקודה

-n בקבציםהשורות ואת מספרן השורות ואת מספרן הדפס את-l בהם השורות שמות הקבציםשמות הקבצים הדפס רק את

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

עצמן השורותהשורותהדפסת ללא ללא קובץ

2424

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

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

בהינתן הקבצים –•farm1

•farm2

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

sheep Brookcow Lenigoat Astercow Oreo

sheep Brookcow Lenigoat Astercow Oreo

> grep cow farm1 farm2farm1:cow Betsyfarm1:slim cow Dazyfarm1:two cows Dartsy & Teofarm2:cow Lenifarm2:cow Oreo

> grep cow farm1 farm2farm1:cow Betsyfarm1:slim cow Dazyfarm1:two cows Dartsy & Teofarm2:cow Lenifarm2:cow Oreo

> grep -n cow farm1 farm2farm1:2:cow Betsyfarm1:3:slim cow Dazyfarm1:5:two cows Dartsy & Teofarm2:2:cow Lenifarm2:4:cow Oreo

> grep -n cow farm1 farm2farm1:2:cow Betsyfarm1:3:slim cow Dazyfarm1:5:two cows Dartsy & Teofarm2:2:cow Lenifarm2:4:cow Oreo

> grep -l cow farm1 farm2farm1farm2

> grep -l cow farm1 farm2farm1farm2

> grep -c cow farm1 farm2farm1:3farm2:2

> grep -c cow farm1 farm2farm1:3farm2:2

2525

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

uniqהפקודה

uniq [options] [input_file [output_file]]uniq [options] [input_file [output_file]]הזהות הזהות מדפיסה עותק אחד של כל השורות •

הסמוכותהסמוכות )או בהיעדר output_fileהפלט הולך לקובץ •

, לערוץ הפלט הסטנדרטי(output_fileהקובץ לא בפורמט לא בפורמט היא uniq שימו לב שהפקודה •

הסטנדרטי של פקודות לעיבוד קבצים:רק מקובץ אחדרק מקובץ אחדהיא יכולה לקבל את הקלט –הפלטהפלטהוא קובץ הקובץ השני הקובץ השני –

2626

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

- אופציותuniqהפקודה

•-cספור עותקיםספור עותקים הדפס כל שורה פעם אחת בלבד ו של כל שורה.

•-d יותר מפעם אחתיותר מפעם אחתשורות המופיעות רקרק הדפס•-u מפעם אחת בלבדמפעם אחת בלבדשורות המופיעות רקרק הדפס

בו זמניתc/-d/-u-ניתן להשתמש רק באחת מהאופציות •

•-N מ- התעלםהתעלם“ N” לפני המילים הראשונות המילים הראשונות(קבלת ההחלטה אם שתי שורות זהות(

2727

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

- דוגמאותuniq הפקודה > less file3onetwotwothreethreethreeoneone> uniq file3 list> less listonetwothreeone>

> less file3onetwotwothreethreethreeoneone> uniq file3 list> less listonetwothreeone>

> less namesUriDanUriElenaAlexOfraUriOfra

> less namesUriDanUriElenaAlexOfraUriOfra

2828

> sort names | uniq -c 1 Alex 1 Dan 1 Elena 2 Ofra 3 Uri

> sort names | uniq -c 1 Alex 1 Dan 1 Elena 2 Ofra 3 Uri

> sort names | uniq -dOfraUri

> sort names | uniq -dOfraUri> sort names | uniq

AlexDanElenaOfraUri

> sort names | uniqAlexDanElenaOfraUri

> sort names | uniq -uAlexDanElena

> sort names | uniq -uAlexDanElena

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

cutהפקודה

cut options [files]cut options [files]הקלט משורותמשורותמכל אחת שדותשדותאו תוויםתוויםמדפיסה •אופציות: •

-c list של התווים לפי האינדקסים לפי האינדקסים תוויםתווים הוצא קבוצת”list“בשורה, המופיעים ב-

-f list של השדות שדות לפי האינדקסים שדות לפי האינדקסים הוצא קבוצת. ”list“בשורה, המופיעים ב-

תו מפריד כלשהו. ע''י ע''י המופרדותהמופרדותבשורה - קבוצות תווים שדותשדות של התו המפריד היא ברירת מחדל ברירת מחדל<<tabtab>>

-d”c ” משמשת בנוסף לאופציה -f את לקבועלקבוע ומאפשרת“c” המפריד כתו

2929

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

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

> less file1a11 a12 a13 a14 a15b21 b22 b23 b24 b25c31 c32 c33 c34 c35> cut -c1-3,5,8-10 file1a11a a1b21b b2c31c c3> cut -d" " -f2,4 file1a12 a14b22 b24c32 c34

> less file1a11 a12 a13 a14 a15b21 b22 b23 b24 b25c31 c32 c33 c34 c35> cut -c1-3,5,8-10 file1a11a a1b21b b2c31c c3> cut -d" " -f2,4 file1a12 a14b22 b24c32 c34

מספר שדה שאינו מספר שדה שאינו בשורה אך ניתן בשורה אך ניתן קיים התו המפרידקיים התו המפרידבמידה ובמידה ושורה ריקהשורה ריקה-תודפס -תודפס קיים קיים

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

> less file2a11:a12:a13 b21:b22 c31 c32 c33 > cut -d":" –f1 file2a11b21 c31 c32 c33 > cut -d":" –f3 file2a13 c31 c32 c33

> less file2a11:a12:a13 b21:b22 c31 c32 c33 > cut -d":" –f1 file2a11b21 c31 c32 c33 > cut -d":" –f3 file2a13 c31 c32 c33

3030

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

wcהפקודה

wc [options] [files]wc [options] [files] השורותהשורות או המיליםהמילים, מספר התוויםמספר התוויםמדפיסה •

בקלט

אופציות:•-c בלבד. התוויםהתווים הדפס את מספר-l בלבד. השורותהשורות הדפס את מספר-w בלבד. המיליםהמילים הדפס את מספר

3131

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

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

בפורמטבפורמט, הפלט מודפס באף אופציהבאף אופציהאם לא משתמשים •:הבא #<lines> <# words> <# chars> filename

, היא מדפיסה גם כמה קבצי קלטכמה קבצי קלטאם הפקודה מופעלת על •:סיכוםסיכום

> wc -w war_and_peace590234 war_and_peace> wc -l war_and_peace55480 war_and_peace> wc -c war_and_peace3348543 war_and_peace

> wc -w war_and_peace590234 war_and_peace> wc -l war_and_peace55480 war_and_peace> wc -c war_and_peace3348543 war_and_peace

> wc mtm_ex1.h 120 641 4161 mtm_ex1.h> wc mtm_ex1.h 120 641 4161 mtm_ex1.h

> wc mtm_ex1.h parsing_example.c 120 641 4161 mtm_ex1.h 136 692 4543 parsing_example.c 256 1333 8704 total

> wc mtm_ex1.h parsing_example.c 120 641 4161 mtm_ex1.h 136 692 4543 parsing_example.c 256 1333 8704 total

3232

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

•ShellShell (תוכנית שמספקת מעטפתמעטפת - ) ממשק ממשק (command line interfacecommand line interface) שורת הפקודהשורת הפקודה

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

תוכנה

חומרה

מערכת הפעלה

Shell

SHELL

3333

משתמש

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

Shells in UNIX

•shell ככל התוכניות. ב- תוכניתתוכנית היאUnix קיימות שונות, שפותחו בזמנים shellshellכמה תוכניות כמה תוכניות

שונים

שונה סינטקססינטקס יש shellלכל •

משלהיתרונות וחסרונות יתרונות וחסרונות יש shellלכל •

•shells ב- נפוציםנפוציםUnix: cshell,bash, kshell shellsשהוא אחד ה- C ShellC Shellאנו נלמד על •

הפופולארייםtcshtcsh שנקאת C shellנשתמש בגרסה המורחבת של –

3434

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

Shells in UNIX

שרץ עכשיו ?shellאיך יודעים מהו ה-•> echo $0> echo $0bashbash

אחר ?shellאיך עוברים ל-• בשורת הפקודה )הרי shellפשוט מקישים את שם ה-–

shell)היא תוכנית כמו כל התכניות

> tcsh> tcsh> echo $0> echo $0tcshtcsh

3535

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

SHELL תפקידיו של ה-

ממשקממשק הוא לספק shellהראשון של ה- התפקידהתפקיד•למשתמשכוח רב כוח רב שמקנה נוחנוחשורת פקודה

משתמש האינטליגנטימשתמש האינטליגנטיבמיוחד ל–תפקיד נוסף הוא לספק סביבת ריצה לתסריטים - –

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

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

3636

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

מנגנון נתינת כינויים alias :הפקודה לפקודות

alias <new name> <command + parameters>alias <new name> <command + parameters> עם command לפקודה new nameנותנת את השם •

הפרמטריםדוגמאות:•

> alias cdex1 cd ~mtm/public/0809b/ex1> cdex1> alias GCC gcc -std=c99 -Wall -pedantic-errors -

Werror -DNDEBUG> GCC hello.c -o hello

3737

מתבצע cd ~mtm/public/0809b/ex1

מתבצע gcc -std=c99 -Wall -pedantic-errors -Werror -DNDEBUG hello.c -o hello

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

aliasהפקודה כל כל מדפיסה את בלי פרמטרים בלי פרמטרים aliasהפקודה •

הידועים:הכינוים הכינוים > aliasGCC (gcc -std=c99 -Wall -pedantic-errors

-Werror -DNDEBUG)cdex1 (cd /u/023/mtm/public/0809b/ex1)

unaliasunaliasכינוי על ידי הפקודה לבטללבטלניתן •> unalias GCC> aliascdex1 (cd /u/023/mtm/public/0809b/ex1)

3838

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

File name expansion

•shell תבנית תבנית ע''י ציון לכמה קבצים לכמה קבצים מאפשר להתייחס שלהםהשמותהשמות

בתיקייה הנוכחיתc. מתייחסת לכל קבצי cc*.*.למשל תבנית –

מקבלות כפרמטרים שמות של UNIXUNIXהפקודות ב-הפקודות ב-רב •, לכן התכונה הזאת מועילה ביותרכמה קבציםכמה קבצים

תדפיס שורות המכילות h grep TODO *.c*.למשל הפקודה– בתיקיה הנוכחיתc. ו-h." בכל קבצי TODOמחרוזת "

בתיקיה הנוכחיתc.תקמפל את כל קבצי gcc *.cהפקודה –של כל שמות הקבציםנחסכת הקלדה נחסכת הקלדה –

3939

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

File name expansion

את התבנית בונים בעזרת תווים הנקראים •Wildcards

מתאים לכל מחרוזת תווים באורך אפס או יותר*– מתאים לכל תו בודד אחד?– מתאים לכל אחד מהתווים בין ] ל- [][–

הרחבה למספר מחרוזות}{–x{aa,bb,cc}y -> xaay, xbby, xccyללא קשר לקבצים בתיקיה •

a[rxz]b -> arb, axb, azb

4040

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

-File name expansionדוגמאות

4141

> lstest17.err test17.out test1.in test2.err test2.out test3.intest17.in test1.err test1.out test2.in test3.err test3.out

> lstest17.err test17.out test1.in test2.err test2.out test3.intest17.in test1.err test1.out test2.in test3.err test3.out

> ls test{17,2}.intest17.in test2.in

> ls test{17,2}.intest17.in test2.in

> ls *1*test17.err test17.in test17.out test1.err test1.in test1.out

> ls *1*test17.err test17.in test17.out test1.err test1.in test1.out

> ls test?.intest1.in test2.in test3.in

> ls test?.intest1.in test2.in test3.in

> ls test[1,3].intest1.in test3.in

> ls test[1,3].intest1.in test3.in

> ls test[1-3].intest1.in test2.in test3.in

> ls test[1-3].intest1.in test2.in test3.in

> echo W{hat,e,ant}What We Want

> echo W{hat,e,ant}What We Want

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

משתנים

(C)כמו בשפת משתניםמשתנים ניתן הגדיר CShellב-• על משתני אין צורך להכריזאין צורך להכריז, Cלהבדיל משפת •

CShellפעם פעם להם ערכים מציביםמציביםברגע ש מוגדריםמוגדריםהמשתנים –

ראשונהראשונה

set <variable> = <value>set <variable> = <value> לתוך משתנה <value> מציבה ערך setהפקודה •

<variable> אחריאחריובין אם לא, קיים קודם קיים קודם בין אם המשתנה היה –

שהוצב לתוכוקיים ומכיל את הערך קיים ומכיל את הערך ההצבה הוא 4242

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

משתנים

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

להוסיף להוסיף לציין את שמו - חייבים לפני השם של משתנה $$

משתנה בצורה לבטלניתן •unsetunsetמפורשת על ידי הפקודה

לא משתמשים בזה לעיתים –תכופות

4343

> echo $AA: Undefined variable.> echo $AA: Undefined variable.

> set A = 17> echo $A17

> set A = 17> echo $A17

>echo AA>echo AA

> set A = 777> echo $A777

> set A = 777> echo $A777

> unset A> echo $AA: Undefined variable.

> unset A> echo $AA: Undefined variable.

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

ערכים של משתנים

, שבה יש כמה Cלהבדיל משפת • CShellטיפוסים של משתנים, ב-

טיפוס אחדטיפוס אחדיש רק

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

4444

> set A = 17> echo $A17

> set A = 17> echo $A17

> set A = Matam> echo $AMatam

> set A = Matam> echo $AMatam

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

פעולות על משתנים מספריים

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

פשוטות: פעולות חשבון פעולות חשבון עליהם --,++,%,/,*,-,+

לשים לשים כדי לבצע פעולת חשבון חייבים •בתחילת השורהסימן @ סימן @

ברגע מוגדרמוגדר המשתנה @גם בשורות עם –פעם ראשונהפעם ראשונה בו ערך מציביםמציביםש

4545

> set i = 3> echo $i3

> set i = 3> echo $i3

> @ i = $i + 1> echo $i4

> @ i = $i + 1> echo $i4

> @ i ++> echo $i5

> @ i ++> echo $i5

> echo $vv: Undefined variable.

> echo $vv: Undefined variable.

> @ v = $i + 12> echo $v17

> @ v = $i + 12> echo $v17

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

פעולות על משתנים מספריים - רווחים

לשים רווח לשים רווח שימו לב: יששימו לב: יש•אחרי @אחרי @–לפני ואחרי כל מספר או לפני ואחרי כל מספר או לרוב, –

משתנהמשתנהלא חייבים לפני ואחרי =•לא חייבים לפני ++,--•

4646

> @i++@i++: Command not found.> @i++@i++: Command not found.

> @ j = 2+ $i@: Badly formed number.> @ j = 2+ $i@: Badly formed number.

> @ j = 2 +$i@: Variable name must begin with a letter.

> @ j = 2 +$i@: Variable name must begin with a letter.

> @ j = $i +2@: Variable name must begin with a letter.

> @ j = $i +2@: Variable name must begin with a letter.

> @ j = $i+ 2@: Badly formed number.> @ j = $i+ 2@: Badly formed number.

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

פעולות על משתנים מספריים

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

@סימן פעולת חשבון פעולת חשבון אם מפעילים •

- מקבלים שגיאה מחרוזתמחרוזתעל בפרט עם משתמשים ב-@ –

להצבת מחרוזת

4747

> @ i = 3> echo $i3

> @ i = 3> echo $i3

> set i = Matam> @ i++@: Expression Syntax.

> set i = Matam> @ i++@: Expression Syntax.> @ set i = Matam@: Expression Syntax.> @ set i = Matam@: Expression Syntax.

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

פעולות על משתנים מספריים

רק על רק על פעולות חשבון - •שלמיםשלמים

פעולת חשבון לא ניתן לשלב לא ניתן לשלב •עם פעולה אחרת, חוץ מאשר

while ו-ifבתנאי ב- ++, post ו-preאין משמעות ל-–

Cכמו ב-

4848

> set i = 7> @ echo ($i + 2)@: Unknown operator.

> set i = 7> @ echo ($i + 2)@: Unknown operator.

> echo ($i + 2)(7+2)> echo ($i + 2)(7+2)

> set i = 1.7> @ i++@: Badly formed number.

> set i = 1.7> @ i++@: Badly formed number.

> @ j = $i++@: Badly formed number.> @ j = $i++@: Badly formed number.

> @ ++i@: Variable name must begin with a letter.

> @ ++i@: Variable name must begin with a letter.

> if ($i + 2 > 8) echo yesyes> if ($i + 2 > 8) echo yesyes

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

פעולות על משתנים מספריים - סוגריים

בסוגרייםבסוגרייםניתן להשתמש •בפעולות חשבון

האסוציאטיביות האסוציאטיביות שימו לב:•אינה סטנדרטיתאינה סטנדרטית

4949

> @ i = 2 - 3 + 4> echo $i-5

> @ i = 2 - 3 + 4> echo $i-5

> @ i = (2 - 3) + 4> echo $i3

> @ i = (2 - 3) + 4> echo $i3

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

מחרוזות

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

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

יותר ממילה אחת יותר ממילה אחת ( יש רווחיםרווחים)מכילות

גרשייםגרשייםלתחום אותן בין ""

5050

> set A = abc def ghi> echo $Aabc

> set A = abc def ghi> echo $Aabc> set A = "abc def ghi"> echo $Aabc def ghi

> set A = "abc def ghi"> echo $Aabc def ghi

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

רשימות

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

ברשימהCבדומה למערך ב-–

האיברים מספורמספור -cshellב•--11מתחיל ממתחיל מ aברשימה

C, להבדיל מהמערכים ב-0ולא מ-–•cshell לא תומך ברשימות

מקוננות )רשימה בתוך רשימה(

> set v = (123 layla tov) > echo $v 123 layla tov > echo $v[2] layla> set v[2] = boker > echo $v 123 boker tov> echo $v[4]v: Subscript out of range.

> set v = (123 layla tov) > echo $v 123 layla tov > echo $v[2] layla> set v[2] = boker > echo $v 123 boker tov> echo $v[4]v: Subscript out of range.

5151

>set v[3] = (1 2 3)set: syntax error >set v[3] = (1 2 3)set: syntax error

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

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

מציין את מספר האיברים ברשימה{a$}#הביטוי • עבור המשתנים שהן לא רשומות1ערכו –

שלה על תת-רשימהתת-רשימה, ניתן לציין aבהינתן רשימה •ידי הביטויים הבאים:

a[m-n] n עד לאיבר ה-mמהאיבר ה-

a[-n] nמהאיבר הראשון עד לאיבר ה-

a[m-] עד לאיבר האחרוןmמהאיבר ה-

5252

> set a = ( aa bb cc dd ee )> echo $#a5>echo $a[3-]cc dd ee>echo $a[2-4]bb cc dd> echo $a[-3]aa bb cc

> set a = ( aa bb cc dd ee )> echo $#a5>echo $a[3-]cc dd ee>echo $a[2-4]bb cc dd> echo $a[-3]aa bb cc

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

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

shift <list>shift <list>מקום אחד list >את כל איברי הרשימה > מזיזהמזיזה•

ומבטלת את האיבר הראשון.שמאלהשמאלה

> set v = ( go to the beach )> echo $v[1] go > shift v> echo $v[1]to> echo $vto the beach

> set v = ( go to the beach )> echo $v[1] go > shift v> echo $v[1]to> echo $vto the beach

5353

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

משתנים: נקודות נוספות

כל משתנהכל משתנהניתן להתייחס ל•רשימה בת רשימה בת כאל Cshellב-

איבר אחדאיבר אחד

מחרוזתמחרוזת בין הבדלהבדלשימו לב ל•רשימהרשימהל

5454

> set A = 17 > echo $A 17> echo $A[1]17>echo $#A1

> set A = 17 > echo $A 17> echo $A[1]17>echo $#A1

> set A = " aa bb cc”> echo $A aa bb cc>echo $#A1> echo $A[1]aa bb cc> echo $A[2]v: Subscript out of range

> set A = " aa bb cc”> echo $A aa bb cc>echo $#A1> echo $A[1]aa bb cc> echo $A[2]v: Subscript out of range

> set A = (aa bb cc)> echo $A aa bb cc>echo $#A3> echo $A[1]aa> echo $A[2]bb

> set A = (aa bb cc)> echo $A aa bb cc>echo $#A3> echo $A[1]aa> echo $A[2]bb

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

משתנים: נקודות נוספות

לרשימת לפרק מחרוזת לפרק מחרוזת ניתן •המילים המופיעות בה ע"י

השמת המחרוזת בתוך סוגריים.

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

של משתנה. שמושמולהצמיד להצמיד נחוץ כשאר רוצים –

לערך של משתנה מחרוזת מחרוזת

5555

> set A = " aa bb cc”> echo $A[1]aa bb cc>set A = ($A)> echo $A[1]aa

> set A = " aa bb cc”> echo $A[1]aa bb cc>set A = ($A)> echo $A[1]aa

> set A = xxx> echo ${A}yyyxxxyyy> echo $AyyyAyyy: Undefined variable.

> set A = xxx> echo ${A}yyyxxxyyy> echo $AyyyAyyy: Undefined variable.

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

מנגנון ההיסטוריה

שבוצעו.לחזור על הפקודות לחזור על הפקודות מנגנון המאפשר •הפקודה האחרונההפקודה האחרונהאת מציין מציין - !!!!••!!gccgcc - ב- הפקודה האחרונה המתחילההפקודה האחרונה המתחילהאת מציין מציין gcc•historyhistory -שבוצעו. ניתן לקבוע רשימת הפקודות רשימת הפקודות את מדפיסמדפיס

"זוכר אחורה" על ידי shellאת מספר הפקודות אותן ה-historyקביעת ערכו של המשתנה

•<!<!nn>> - את הפקודה שמספרה מציין מצייןnברשימה מקשי מקשי מאפשר לבצע פקודות שבוצעו בעזרת shellבנוסף ה-•

)למעלה/למטה(החיצים החיצים

>set history=100100ל-מספר הפקודות הנזכרות מספר הפקודות הנזכרות הפקודה קובעת את •

5656

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

Command substitution

לשתול פקודה בתוך מחרוזת או לשתול פקודה בתוך מחרוזת או ניתן cshellב-•פקודה אחרתפקודה אחרת

`מקיפים את הפקודה הנשתלת בגרשיים הפוכים •backticksbackticksאו backquotesbackquotesהמכונים באנגלית–

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

> set A = “there are `ls | wc -l` files in `pwd` “> echo $Athere are 662 files in /usr/bin

> set A = “there are `ls | wc -l` files in `pwd` “> echo $Athere are 662 files in /usr/bin

5757

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

Command substitutionדוגמא

שמכיל רשימת קבצים farm_listבהינתן הקובץ •שמייצגים חוות

farm_listניתן לספור פרות בכל חווה שב-•בשורה אחת :

5858

farm1farm2farm1farm2

> grep -c cow `cat farms_list`farm1:3farm2:2

> grep -c cow `cat farms_list`farm1:3farm2:2

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

CShell אופן הפעולה של

•CShell עובד בלולאהעובד בלולאה :promptpromptהצגת –לפקודה המתנההמתנה– שלההביצועהביצוע בפקודה כולל טיפולטיפול–

מבני הנתונים מבני הנתונים מנהל את CShellלצורך עבודתו •הבאים:

רשימת ההיסטוריה–רשימת המשתנים –aliasesרשימת ה-–

5959

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

CShellטיפול בפקודה :

: הפקודה מופרדת למילים. ניתוח הפקודהניתוח הפקודה1.1.משמשים כמפרידים בין מיליםTabהתווים רווח ו-

,|, <,> מפרידים בין פקודותnewlineהתווים

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

, משתנים וכד'aliasesשמות הקבצים,

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

6060

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

עיבוד הפקודה

במידה והפקודה מכילה שימוש בפקודות קודמות )ע"י השמוש 1.. History Substitutionבסימן !( מתבצע

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

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

.variable substitutionביצוע 3.

.File name substitutionביצוע 4..5command substitution ה .back-quoted string) ... ( ` מוחלפת `

בתוצאת הפקודה

מבצעCShellבנוסף, .1I/O redirectionpipelineטיפול ב-2.

6161

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

History Substitution

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

6262

>ls farm*farm1 farm2 farms_list> !!ls farm*farm1 farm2 farms_list

>ls farm*farm1 farm2 farms_list> !!ls farm*farm1 farm2 farms_list

> echo AAAAAA> set last_command = "the last command was !!"set last_command = "the last command was echo AAA"> echo $last_commandthe last command was echo AAA

> echo AAAAAA> set last_command = "the last command was !!"set last_command = "the last command was echo AAA"> echo $last_commandthe last command was echo AAA

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

ביצוע הפקודה: סוגי הפקודה

•Cshell.מבצע את הפקודה בהתאם לסוג שלה ישנם שני סוגים של פקודות:CShellמבחינת • עצמו. פקודות אלה מבצעות CShell של (build-in) פקודות פנימיותפקודות פנימיות•

את משימות הבאות:(history)ניהול ההסטוריה ניהול ההסטוריה –( set/unset/shift) המשתניםהמשתניםרשימת ניהולניהול–aliasesaliases (alias/unalias) רשימת ה-ניהולניהול–(cd)התיקייה הנוכחית התיקייה הנוכחית שינוי –בקרת זרימה בתסריטים )בתרגול הבא(–ניהול תהליכים )בתרגול הבא(–

- כל פקודה שהיא לא פנימית. אלה יכולות להיותפקודות חיצוניות פקודות חיצוניות •תוכניות של משתמש–cat,ls,grepתוכניות שרות סטנדרטיות, כמו –

6363

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

ביצוע הפקודה: סוגי הפקודה

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

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

:(full path name)המלא המלא כולל המסלול הפקודההפקודהשל הפקודה, השם המלא השם המלא אם המשתמש ציין את –

CShell כמו שהוא כמו שהוא אותו שולחשולחאם המשתמש ציין רק את השם של הפקודה )בלי –

בכל התיקיות יחפש את הפקודה יחפש את הפקודה CShellהמסלול(, pathpathהמופיעות ברשימה של המשתנה

6464

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

חיפוש הפקודה

כלשהיא על ידי למצוא פקודה למצוא פקודה CShellניתן לבקש מ-•wherewhereהפקודה

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

ניתן להוסיף תיקיות לרשימת התיקיות לחיפוש •פקודות

mybin~/למשל הפקודה הבאה תוסיף את התיקיה –

> set path = ($path ~/mybin)

6565

> where cat/bin/cat> where cdcd is a shell built-in> where wherewhere is a shell built-in

> where cat/bin/cat> where cdcd is a shell built-in> where wherewhere is a shell built-in

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

סוגי גרשיים

(back quote)גרש הפוך גרש הפוך - ` ` command substitutionמשמש לצורך

(double quote)גרשיים כפולים גרשיים כפולים - "(single quote)גרש יחיד גרש יחיד - ' '

להתייחס למספר מילים )מופרדות ברווחים CShellמשמשים כדי לגרום ל-–וטאבים( כאל מילה אחת

גרשיים כפוליםגרשיים כפולים רק בתוךרק בתוךמתבצעת החלפת משתנים החלפת משתנים –

–command substitutioncommand substitution רק בתוך גרשיים כפוליםרק בתוך גרשיים כפוליםמתבצע`

6666

> set a = AAA> echo “the value of a is $a”the value of a is AAA> echo ' the value of a is $a 'the value of a is $a

> set a = AAA> echo “the value of a is $a”the value of a is AAA> echo ' the value of a is $a 'the value of a is $a

> echo '`ls` '> `ls `> echo '`ls` '> `ls `

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

File name expansion גרשיים:

•File name expansion בתוך לא מתבצע לא מתבצעגרשיים בודדים או כפולים:

6767

> echo farm*farm1 farm2 farms_list> echo “farm* ”farm*> echo ' farm* 'farm*

> echo farm*farm1 farm2 farms_list> echo “farm* ”farm*> echo ' farm* 'farm*

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

Command Substitution: נקודותנוספות

•CShell ממה בונה רשימה בונה רשימה backticksשהפקודה בתוך ה-

מדפיסה.הרשימה נבנת בצורה הבאה:•

בתוך בתוך לאלא backticksאם ה-1.טאב טאב , רווחרווח, כל גרשיים כפוליםגרשיים כפולים

מפריד בין מעבר שורה מעבר שורה סימןסימןאו האיברים ברשימה

בתוך גרשיים בתוך גרשיים backticksאם ה-2.רק סימן מעבר שורה רק סימן מעבר שורה , כפוליםכפוליםבין האיברים ברשימהמפריד מפריד

6868

> cat linesa bc d> set A = `cat lines`> echo $#A4> echo $A[1]a> echo $A[2]b> set A = "`cat lines`"> echo $#A2> echo $A[1]a b> echo $A[2]c d

> cat linesa bc d> set A = `cat lines`> echo $#A4> echo $A[1]a> echo $A[2]b> set A = "`cat lines`"> echo $#A2> echo $A[1]a b> echo $A[2]c d