SlideShare a Scribd company logo
Shell Scripting
Shell scripting for beginners and intermediate levels
BASH SCRIPTING
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 1
‫الرحيم‬ ‫الرحمن‬ ‫اهلل‬ ‫بسم‬
‫الكتاب‬ ‫هذا‬ ‫من‬ ‫االنتواء‬ ‫علي‬ ‫اعانين‬ ‫الذي‬ ‫هلل‬ ‫احلند‬
‫ال‬ ‫لكتاب‬ ‫تزمجة‬ ‫هو‬ ‫الكتاب‬ ‫هذا‬Shell Scripting‫للنؤلف‬Hamish Whittal
‫ال‬ ‫يشزح‬ ‫كتاب‬ ‫وهو‬Shell Scripting‫وبسيط‬ ‫سول‬ ‫باسلوب‬‫املتوسط‬ ‫واملستوي‬ ‫للنبتدئني‬
‫و‬ ‫برتمجتى‬ ‫قنت‬ ‫ولقد‬‫إ‬‫التوضيحية‬ ‫الصور‬ ‫بعض‬ ‫ضافة‬‫ويسز‬ ‫بسوولة‬ ‫املعلومى‬ ‫تصل‬ ‫حيت‬
‫ا‬‫هذ‬ ‫حيقق‬ ‫ان‬ ‫متين‬‫وال‬ ‫املزجوة‬ ‫االستفادة‬ ‫الكتاب‬ ‫ا‬‫أ‬‫الكزيه‬ ‫اهلل‬ ‫وجى‬ ‫اال‬ ‫بى‬ ‫بغي‬
‫دعائكه‬ ‫صاحل‬ ‫من‬ ‫تنسونا‬ ‫ال‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 2
TABLE OF CONTENTS
What is Shell Scripting ...................................................................................7
Introduction to info, man and the whatis database.............................................9
info pages..................................................................................................9
Man Pages ...............................................................................................12
The whatis Database.................................................................................13
Revising some Basic Commands ....................................................................14
The who command....................................................................................14
The w Command ......................................................................................16
The "date" command.................................................................................18
The 'echo' command .................................................................................19
Running a Shell Script..................................................................................20
File Commands.........................................................................................20
Wildcards..............................................................................................20
Returning to file commands........................................................................23
ls.........................................................................................................23
cp........................................................................................................24
mv.......................................................................................................24
wc .......................................................................................................24
nl.........................................................................................................24
System Commands...................................................................................24
The df and du commands........................................................................25
the fdisk command.................................................................................26
The free command.................................................................................26
the vmstat command .............................................................................27
the iostat command ...............................................................................27
stdin, stdout, stderr.....................................................................................28
stdin .......................................................................................................28
stdout.....................................................................................................29
Using stdin and stdout simultaneously .........................................................30
Appending to a file....................................................................................31
stderr......................................................................................................32
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 3
stdout, stderr and using the ampersand)&( ..................................................33
Unamed Pipes ..........................................................................................34
Introduction................................................................................................36
What is the login shell?.................................................................................37
The job of the shell......................................................................................42
Command Interpreter................................................................................42
Allows for variables to be set......................................................................43
I/O redirection .........................................................................................43
Pipelines..................................................................................................43
Customising your environment ...................................................................43
Introduction................................................................................................44
What are regular expressions?.......................................................................44
The fullstop (period) ”.”.............................................................................44
Let's explore "sed" syntax..........................................................................46
Square brackets ( [ ] ), the caret ( ^ ) and the dollar ( $ ) .............................48
Using sed and pipes ..................................................................................50
The splat (asterisk) ) * ( ............................................................................52
The plus operator) + ( ...............................................................................53
Matching a specified number of the pattern using the curly brackets}{ ..........54
A detour - Using a different field separator in sed pattern matching ..............56
Using Word Encapsulating Characters .......................................................57
Returning from detour to our discussion on curly braces… .............................57
The tr command..........................................................................................57
The cut command........................................................................................59
The paste command.....................................................................................60
The uniq command ......................................................................................61
The Sort command ......................................................................................62
The grep command......................................................................................64
grep, egrep and fgrep ...............................................................................67
Section Techniques to use when writing, saving and executing Shell Scripts ........68
Detour: File Extension labels ...................................................................68
Comments in scripts...............................................................................69
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 4
Variables ..............................................................................................69
Shebang or hashpling!# .........................................................................70
Exit......................................................................................................70
Null and unset variables..........................................................................71
Variable Expansion.................................................................................73
Environmental vs shell variables ..............................................................74
Arithmetic in the shell.............................................................................75
Introduction................................................................................................77
Single Quotes or "ticks"................................................................................77
Double Quotes ............................................................................................78
Backticks....................................................................................................80
Shell Arithmetic's with expr and back quotes...................................................81
Another tip when using quotation marks.........................................................82
Introduction................................................................................................84
Positional Parameters 0 and 1 through 9.........................................................86
Other arguments used with positional parameters............................................87
$# How many positional arguments have we got ?........................................87
$* display all positional parameters ............................................................87
Using the "shift" command - for more than 9 positional parameters.................88
Exit status of the previous command...........................................................88
Making Decisions.........................................................................................90
Testing for a true or false condition.............................................................90
The test command .................................................................................90
What is "true" and "false"........................................................................91
Different types of tests ..............................................................................92
Testing a string .....................................................................................92
Has a variable been set or not ?...............................................................93
Numeric Tests .......................................................................................95
File test................................................................................................96
Logical Operators ........................................................................................98
Conditions in the shell................................................................................100
Using the "if" statement...........................................................................100
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 5
The "if" "then" "else" statement................................................................ 101
The "elif" statement ................................................................................102
The "case" statement..............................................................................102
Debugging your scripts...............................................................................103
The NULL command .............................................................................105
The || and && commands .....................................................................106
Introduction.............................................................................................. 109
The "for" loop.........................................................................................109
while and until loops ...............................................................................116
The break and continue commands ........................................................120
getopts Using arguments and parameters .....................................................123
Introduction.............................................................................................. 124
The read command....................................................................................124
Presenting the output.................................................................................127
The echo command.................................................................................127
The printf command...................................................................................128
The shell environmental variables pertaining to scripting.................................132
The Source command.................................................................................134
the exec command ....................................................................................136
Other methods of executing a script or a series of commands.......................136
Execution with Round brackets .............................................................. 136
Execution with Curly brackets................................................................ 137
Introduction.............................................................................................. 139
PARAM:-value........................................................................................... 139
PARAM:=value .......................................................................................... 141
${param:+value}......................................................................................141
${variable%pattern} .................................................................................142
MAGIC%%r*a........................................................................................... 143
variable#pattern .......................................................................................143
variable:OFFSET:LENGTH ...........................................................................145
#variable..................................................................................................145
Re-assigning parameters with set ................................................................ 146
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 6
Explaining the default field separator field - IFS.............................................147
Setting variables as "readonly"....................................................................147
The eval command ....................................................................................149
Running commands in the background using& ..............................................152
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 7
CHAPTER 1. INTRODUCTION TO
THE COURSE STRUCTURE
WHAT IS SHELL SCRIPTING
ٌٕٞ‫ر‬ ٕ‫ا‬ ‫اسدد‬ ‫ارا‬system administratorٌٕٞ‫ر‬ ٕ‫ا‬ ‫ٌغت‬ ‫عٍذ‬َ‫أُض‬ ٍٞ‫ٌو‬ ‫ٌٛزا‬ ، ٍٞ‫ًغ‬
‫ٝاعشع‬ َ‫ؼ‬‫ٝاك‬ ‫اثغؾ‬ ‫ثطشٌوخ‬ ‫رلٌش‬ ‫ؽٍ٘ئز‬ ٌٕٞ‫عز‬ ‫الٗي‬ ، ‫أُشٜٞس‬
ِْ‫رزؼ‬ ٕ‫ا‬ ‫اسدد‬ ‫ٝارا‬scripting‫ثطشٌوخ‬ ‫شًء‬ ‫اي‬ َ‫رلؼ‬ ‫كال‬manual‫ٛ٘بى‬ ّ‫ٓبدا‬script‫ٌغزطٍغ‬
‫رُي‬ َٔ‫ػ‬
ِْٝ‫ٗزؼ‬ ًٌُ ٌُٖscriptingِْ‫ٗؼ‬ ٕ‫ا‬ ‫ٌغت‬ٍ‫ا‬ ٞٛ ‫ٓب‬shell????
ٍ‫ا‬shellَُ ْ‫ٓزشع‬ ٞٛcommandsٍ‫ثب‬ ٍٚ‫شج‬DOSٍ‫ا‬ ٍ‫ثبعزوجب‬ ّٞ‫ٌو‬ ‫ؽٍش‬ ،commands
ٍ‫ا‬ ‫رٌزجٜب‬ ً‫اُز‬userٍ‫ا‬ ًِ‫ػ‬command line‫ٌٝزشعٜٔب‬
ٍ‫ا‬ ً‫ك‬ ‫االٓش‬ ‫ٛزا‬ ‫ثٌزبثخ‬ ‫هٔ٘ب‬ ‫كبرا‬terminal
# ls –l
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ًٍق‬linux‫ثز٘لٍز‬ً٘‫ٓؼ‬ ‫ٌؼشف‬ ‫ًٍٝق‬ ، ‫االٓش‬ ‫ٛزا‬“-l”‫عٍظٜش‬ ‫اُ٘برظ‬ ٕ‫ا‬ ‫ٌؼشف‬ ‫ًٍٝق‬ ،
، ‫اُشبشخ‬ ًِ‫ػ‬??? ‫ظذكخ‬ُ‫ثب‬ ‫ٌؼشف‬ َٛ
ٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٌؼشف‬ َ‫ث‬ ، ‫ظذكخ‬ُ‫ثب‬ ‫ٌؼشف‬ ‫ال‬ ٞٛ ، ‫ال‬shell
ٍ‫ٝا‬shell scriptٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ٞٛcommandsٍ‫ا‬ َ‫ثذاخ‬ ‫اُجؼغ‬ ‫ؼٜب‬‫ثؼ‬ ‫ٓغ‬ ‫رٌزت‬ ً‫اُز‬shell
ًٌُ ‫ٝاؽذ‬ ‫ِٓق‬ ً‫ك‬ ْٜ‫ٝػؼ‬ ْ‫ٌٝز‬ٍ‫ا‬ َ‫ًٔض‬ ِٚ‫ٓض‬ ،ٍٚ٘‫ٓؼ‬ ‫ثٞظٍلخ‬ ‫ٌوٞٓٞا‬DOS batch
: ٌٖ‫االٓش‬ ٌٖ‫ٛز‬ ‫ر٘لٍز‬ ‫اسدٗب‬ ‫ٝارا‬
# free
‫ٝاالٓش‬
# df -h
‫ؽذح‬ ًِ‫ػ‬ ‫آش‬ ًَ ‫ثز٘لٍز‬ ّٞ‫ٗو‬ ٕ‫ا‬ ًٛ ًُٝ‫اال‬ ‫كبُطشٌوخ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 8
‫ػالٓخ‬ ‫ثٞػغ‬ ‫ٝرُي‬ ‫اُغطش‬ ‫ٗلظ‬ ‫كت‬ ‫ثؼغ‬ ‫ٓغ‬ ٌٖ‫االٓش‬ ‫ثز٘لٍز‬ ّٞ‫ٗو‬ ٕ‫ا‬ ٝ‫ا‬“;”‫اُؼالٓخ‬ ‫ٗلظ‬ ًٛٝ
ٍ‫ا‬ ٍٖ‫ث‬ ‫رٞػغ‬ ً‫اُز‬E-mail address‫شؾض‬ ٖٓ ‫الًضش‬ ‫سعبُخ‬ َ‫ٗشع‬ ٕ‫ا‬ ‫ٗشٌذ‬ ‫ػ٘ذٓب‬
‫ٝؽٜذ‬ ‫ٝهذ‬ ‫ٝرٞكش‬ َ‫ؼ‬‫اك‬ ‫ؽشٌوخ‬ ‫ٛ٘بى‬ ‫ٓبصاُذ‬ ٌُٖٝ ، ‫ٝاُٞهذ‬ ‫اُغٜذ‬ ٖٓ ٍَِ‫اُو‬ ‫رٞكش‬ ‫اُطشٌوخ‬ ٙ‫كٜز‬ ‫ارا‬
‫أُِق‬ ْ‫اع‬ ‫ثٌزبثخ‬ ‫كوؾ‬ ّٞ‫ٗو‬ ‫ر٘لٍزٛٔب‬ ‫ٗشٌذ‬ ‫ٝػ٘ذٓب‬ ، ‫ِٓق‬ ً‫ك‬ ٌٖ‫االٓش‬ ٌٖ‫ٛز‬ ‫ٝػغ‬ ًٛٝ ‫اال‬ ، ‫اًضش‬
ٝ ، ‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫كزظٜش‬ًٔ‫ٌغ‬ ‫أُِق‬ ‫ٛزا‬script
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 9
INTRODUCTION TO INFO, MAN AND THE WHATIS DATABASE
ٍ‫ا‬ ًِ‫ػ‬ ‫اُزؼشف‬ ‫أُلٍذ‬ ٖٓman pagesٍ‫ٝا‬info pagesٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ َ‫هج‬scriptsٍ‫ٝا‬ ،
man pagesَُ ‫ظبس‬‫اخز‬ ًٛmanual pagesٍ‫ا‬ ٖ‫ػ‬ ‫ًضٍشح‬ ‫ٓؼِٞٓبد‬ ًِ‫ػ‬ ‫ٝرؾزٞي‬
commandsٚ‫ٗؾزبع‬ ‫ٓب‬ ‫ٗغذ‬ ‫ال‬ ‫هذ‬ ٌٍُٖٝ‫ا‬ ً‫ك‬man pagesٍ‫ا‬ ‫ٗؾزبط‬ ‫هذ‬ ‫ُزُي‬info pages
INFO PAGES
ٍ‫ا‬info pagesٍ‫ا‬ ‫رشجخ‬man pages‫ٝؽشٌوخ‬ ،‫اًضش‬ ‫ٓؼِٞٓبد‬ ًِ‫ػ‬ ‫رؾزٞي‬ ‫اٜٗب‬ ‫اال‬ ‫ًضٍشا‬
ٍ‫ا‬ ّ‫اعزخذا‬info pages‫ثٌزبثخ‬ ّٞ‫ك٘و‬ ٍٖ‫ٓؼ‬ ‫آش‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ٗغزؼشع‬ ٕ‫ا‬ ‫اسدٗب‬ ‫كبرا‬ ، ‫ثغٍطخ‬
: ٌَ‫اُش‬ ‫ثٜزا‬ ‫االٓش‬
# info ls
ٌٌٖٔٝ‫ا‬ٖٓ ‫ٓغٔٞػخ‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫عزؼشاع‬ٍ‫ا‬commandsٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫اُز‬text files‫ٓضال‬
‫ؽشٌن‬ ٖ‫ػ‬
# info coreutils
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 10
ٍ‫ٝا‬coreutils‫ظبس‬‫اخز‬ ٞٛcore utilitiesٍ‫ا‬ ٝ‫ا‬ ‫االدٝاد‬ ‫ٓغٔٞػخ‬ ًٛٝcommandsً‫اُز‬
ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ ّ‫رغزخذ‬text filesَ‫ٓض‬ls, mv, cp, ……
ٌَ‫اُش‬ ‫ٛزا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬ٍ‫ا‬info pageَُcoreutils: ًِ‫ػ‬ ‫رؾزٞي‬ ً‫ٝاُز‬
File: coreutils.infoٍ‫ا‬ ْ‫اع‬ ٞٛٝfileٍ‫ا‬ ٙ‫ٛز‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬Info
Node: Top‫ًِٝٔخ‬nodeً٘‫رؼ‬topicٝtopٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ً٘‫رؼ‬topicٍٝ‫ا‬ ٞٛtopicً‫ك‬
ٍ‫ا‬ ٙ‫ٛز‬info page
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 11
Next: introductionٍ‫ا‬ ٕ‫ا‬ ً٘‫ٝرؼ‬topicٔ‫اع‬ ‫اُزبٍُخ‬‫ٜب‬introductionٍ‫ا‬ ًُ‫ا‬ ‫ُِٝزٛبة‬
topic‫اُؾشف‬ ّ‫ٗغزخذ‬ ‫اُزبٍُخ‬“n”
Previous: disk usageٍ‫ا‬ ٕ‫ا‬ ً٘‫ٝرؼ‬topic‫اعٜٔب‬ ‫اُغبثوخ‬disk usageٌٌٖٔٝ
‫اُؾشف‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫اٍُٜب‬ ٍ‫االٗزوب‬“p”
Up : (dir)ٍ‫ا‬ ً٘‫ٝرؼ‬info page‫اُؾشف‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫اٍُٜب‬ ٍ‫االٗزوب‬ ٌٌٖٔٝ ‫اُغبثوخ‬“u”
‫ا‬ ‫ٝٗالؽع‬ًٔ‫ٌغ‬ ٕ‫ػ٘ٞا‬ ‫ٛ٘بى‬ ٕmenuٍ‫ا‬ ‫هبئٔخ‬ ًٛٝtopicsٙ‫ٛز‬ ً‫ك‬ ‫أُٞعٞدح‬ٍ‫ا‬
info pageًٝ‫اُز‬ٍْٜ٘‫ث‬ َ‫ٗز٘و‬ ٕ‫ا‬ ٌٌٖٔ
‫اي‬ ًُ‫ا‬ ‫ٓجبششح‬ ‫اُزٛبة‬ ٌٖٔ‫ٝث‬topicٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬ ٍٝ‫اُ٘ض‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ظلؾخ‬ُ‫ا‬ ً‫ك‬topic
ٕ‫ػ٘ٞا‬ ‫رؾذ‬ ‫أُٞعٞد‬menuًِ‫ػ‬ ‫ؼـؾ‬ُ‫ا‬ ْ‫ص‬enter‫اُزٛبة‬ ‫ٓضال‬ ‫اسدٗب‬ ‫كبرا‬ ،summarize
files topic‫ؼـؾ‬ٗ ْ‫ص‬ ٍُٚ‫ا‬ ْٜ‫ثبُغ‬ ٍٝ‫ثبُ٘ض‬ ّٞ‫ك٘و‬enter
ٍ‫ا‬ ‫طلؾخ‬ ًُ‫ا‬ ‫اُؼٞدح‬ ‫ٗشٌذ‬ ‫ٝػ٘ذٓب‬coreutils‫اُشئٍغٍخ‬Up : dir‫ؼـؾ‬ٗ“u”
‫ظلؾخ‬ُ‫ا‬ ‫ثذاٌخ‬ ًُ‫ا‬ ‫اُزٛبة‬ ‫اسدٗب‬ ‫ٝارا‬node: top‫ؼـؾ‬ٗ“t”
ٍ‫ا‬ ً‫ك‬ ٍٚ٘‫ٓؼ‬ ‫ًِٔخ‬ ٖ‫ػ‬ ‫ُِٝجؾش‬info page‫ثٌزبثخ‬ ّٞ‫ٗو‬“/”‫اُجؾش‬ ‫أُشاد‬ ‫أٌُِخ‬ ‫ٌزجؼٜب‬
٘‫ػ‬‫ٜب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 12
/Directory
ّ‫ٗغزخذ‬ ‫اخشي‬ ‫ٓشح‬ ‫أٌُِخ‬ ‫ٗلظ‬ ٖ‫ػ‬ ‫ٗجؾش‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬
/<ENTER>
ٍ‫ا‬ ٖٓ ‫ُِٝخشٝط‬info page‫ٌٗزت‬“q”
ّ‫ٗغزخذ‬ ًِ‫ُالػ‬ ‫طلؾخ‬ ٍ‫ُالٗزوب‬“backspace”
ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬helpٍ‫ثب‬ ‫اُخبص‬info page‫ٌٗزت‬“?”ٍ‫ا‬ ٖٓ ‫ُِٝخشٝط‬help‫ٌٗزت‬
“CTRL+x+0”
MAN PAGES
ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬Info pages‫اُطشٌوخ‬ ٌُٖٝ ، ‫أُغبػذح‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫اػبكٍخ‬ ‫ٝعٍِخ‬ ًٛٝ
ٍ‫ا‬ ًٛ ‫اٌٍُِ٘ظ‬ ً‫ك‬ ‫أُؼِٞٓبد‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫االعبعٍخ‬man pages
ٍ‫ا‬ ٕ‫ا‬ ‫ٝاُؾوٍوخ‬man pageٍ‫ا‬ ٍ‫خال‬ ٖٓ َٔ‫رؼ‬less commandٍ‫ا‬ ٚ‫ٌشج‬ ‫اُزي‬more
commandًِ‫ػ‬ ‫ٌؾزٞي‬ ٌُٚ٘ٝoptions‫اًضش‬
ٍ‫ا‬ ٍَ‫ُٝزشـ‬man pageٓ‫اال‬ ّ‫ٗغزخذ‬: ‫ش‬
man <command>
‫رغبٝي‬ ًٛٝ
man ls | less
ٍ‫ا‬ ً‫ك‬ ‫ًِٔخ‬ ٖ‫ػ‬ ‫ٗجؾش‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬man page‫ثٌزبثخ‬ ّٞ‫ٗو‬“/”‫أُشاد‬ ‫أٌُِخ‬ ‫ٌزجؼٜب‬
ٍ‫ا‬ ً‫ك‬ ‫ٌؾذس‬ ‫ًٔب‬ ‫ػٜ٘ب‬ ‫اُجؾش‬info pageَٔ‫ثؼ‬ ّٞ‫رو‬ ‫ٛ٘ب‬ ‫ٌُٜٝ٘ب‬forward search‫اي‬
ٍ‫ا‬ ٍٝ‫ا‬ ٖٓ ٌٌٕٞ ‫أٌُِخ‬ ٖ‫ػ‬ ‫اُجؾش‬ ٕ‫ا‬page‫اخشٛب‬ ًُ‫ا‬
ٗ‫اسد‬ ‫ٝارا‬َٔ‫ػ‬ ‫ب‬reverse search‫اُؼالٓخ‬ ّ‫ثبعزخذا‬ ّٞ‫ك٘و‬“?”ٖٓ ‫ثذال‬“/”‫ٌزجؼٜب‬ ْ‫ص‬
ٙ‫اػال‬ ًُ‫ا‬ ‫أُِق‬ َ‫اعل‬ ٖٓ ‫ػٜ٘ب‬ ‫اُجؾش‬ ‫أُشاد‬ ‫أٌُِخ‬
ٍ‫ا‬ ّ‫ٗغزخذ‬ ‫رٍِٜب‬ ً‫ُِز‬ ‫طلؾخ‬ ٖٓ ٍ‫ُٝالٗزوب‬space bar
‫اُؾشف‬ ّ‫ٗغزخذ‬ ‫رغجوٜب‬ ً‫ُِز‬ ‫طلؾخ‬ ٖٓ ٍ‫ُٝالٗزوب‬“b”
ٍ‫ا‬ ٖٓ ‫ُِٝخشٝط‬man page‫ٌٗزت‬“q”
ٍٞ‫ظ‬‫ُِٝؾ‬ٍ‫ا‬ ّ‫اعزخذا‬ ‫ًٍلٍخ‬ ً‫ك‬ ‫ٓغبػذح‬ ًِ‫ػ‬man pages‫ؼـؾ‬ٗ ‫ثذاخِٜب‬ َ‫ٝاُز٘و‬“h”
ٍ‫ا‬ ٞٛ ‫أُؼشٝع‬ ٕ‫ا‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ٖٓ ‫ٝٗالؽع‬ ،help‫ثبالٓش‬ ‫اُخبص‬lessَُ ‫ٍُٝظ‬man
pageٍ‫ا‬ ٕ‫ال‬man pageٍ‫ا‬ ‫ثٞاعطخ‬ ‫ػشػٜب‬ ْ‫ٌز‬ ‫ػبدٌخ‬ ‫طلؾخ‬ ‫ٓغشد‬ ًٛless
command
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 13
ٍ‫ا‬ ْ‫ٝر٘وغ‬Man page‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ًُ‫ا‬ٍsections:
1-Name sectionٍ‫ا‬ ْ‫اع‬ ٞٛ :command
2-SYNOPSIS section‫ٝاُجغٍطخ‬ ‫ظشح‬‫أُخز‬ ‫ظٞسح‬ُ‫ا‬ ً٘‫رؼ‬ ًٛٝ ‫ظبس‬‫االخز‬ ٝ‫ا‬ ‫أُِخض‬ ٝ‫ا‬ :
‫االٓش‬ ّ‫العزخذا‬
3-DESCRIPTION section‫االٓش‬ ‫ٝظٍلخ‬ ‫ٌششػ‬ ‫اُزي‬ ‫اُغضء‬ ٞٛٝ :
4-SEE ALSO section‫ا‬ ٖٓ ‫ٓضٌذ‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫اُطشم‬ ‫ثؼغ‬ ‫ٌٞػؼ‬ ‫اُغضء‬ ‫ٝٛزا‬ :ٍَ‫ُزلبط‬
THE W HATIS DATABASE
Whatisٞٛcommandٍ‫ا‬ ‫ٝظٍلخ‬ ‫ثٔؼشكخ‬ ‫ُ٘ب‬ ‫ٌغٔؼ‬command‫ؽٍش‬ ‫ظش‬‫ٝٓخز‬ ‫عشٌغ‬ ٌَ‫ثش‬
ٍ‫ا‬ ًَ ً‫ك‬ ‫ثبُجؾش‬ ّٞ‫ٌو‬manual pagesٍ‫ا‬ ً‫ك‬systemٍ‫ثب‬ ‫اُخبص‬ ‫اُغضء‬ ٖ‫ػ‬name
sectionٍ‫ا‬ ٙ‫ٛز‬ ً‫ك‬ ‫أُٞعٞدح‬man pageً‫ك‬ ْٜ‫ؼؼ‬‫ٝر‬ ْٜ‫ثزشرٍج‬ ّٞ‫رو‬ ْ‫ص‬database‫خبطخ‬
ٔ‫ػ‬ ْ‫ٌٝز‬َupdateٝ‫ا‬rebuild‫ُٜب‬at night
whatis nl
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 14
َٔ‫ثؼ‬ ّٞ‫ٗو‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬updateَُdatabase: ‫االٓش‬ ّ‫ٗغزخذ‬ ‫ٌذٌٝب‬
makewhatis -u -w
REVISING SOME BASIC COMMANDS
ٍ‫ا‬ ‫ثؼغ‬ ٖ‫ػ‬ ‫اُغضء‬ ‫ٛزا‬ ً‫ك‬ ‫ٗزؾذس‬ ‫عٞف‬basic commandsٍ‫ا‬ ٌٕٞ‫ٌز‬ ‫ٓٔب‬ ‫ٓؼشكخ‬ ٞٛ ‫ٛ٘ب‬ ‫ٝاُـشع‬commands
‫ٗغزخ‬ ‫ًٍٝق‬ٚٓ‫ذ‬
THE W HO COMMAND
ٍ‫ا‬ ‫ٛزا‬ ّ‫ٌغزخذ‬commandٍ‫ا‬ ‫ٓؼشكخ‬ ً‫ك‬logged userٍ‫ا‬ ًِ‫ػ‬systemٙ‫اعزخذٓ٘ب‬ ‫ٝارا‬ ،
‫اي‬ ٕٝ‫ثذ‬optionsٝ‫ا‬arguments: ًُ‫اُزب‬ ‫ُ٘ب‬ ‫كغٍظٜش‬
ٍ‫ا‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٌٖٔٝhelpٍ‫ا‬ ‫ُؼشع‬optionsٍ‫ا‬ ‫ٛزا‬ ‫ٓغ‬ ّ‫رغزخذ‬ ٕ‫ا‬ ٌٌٖٔ ً‫اُز‬command
who --help
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 15
ٍ‫ا‬ ‫ُٝؼشع‬logged usersًَ ٕ‫ػ٘ٞا‬ ‫اظٜبس‬ ‫ٓغ‬column
who -H
‫ُٝؼشع‬short listٍ‫ا‬ ٖ‫ػ‬logged users
who -s
ٍ‫ا‬ ‫ُٝؼشع‬logged usersٍ‫ٝا‬Process ID‟s
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 16
who -u
‫ٝارا‬‫اعزخذٓ٘ب‬“-H”‫ٓغ‬“-u”ٍ‫ا‬ ْ‫اع‬ ‫ٌظٜش‬ ‫كغٞف‬columnsٍ‫ا‬ ٝ‫ا‬headingٕ‫ا‬ ‫ٗغذ‬ ‫ٝعٞف‬ ،
ٍ‫ا‬columnًٔ‫ٌغ‬ ‫اُشاثغ‬IDLEٍ‫ا‬ َ‫ٌٔض‬ ٞٛٝ ،idle timeٌَُuserٍ‫ا‬ ٕ‫ا‬ ً٘‫ٌٝؼ‬userُْ
ٍ‫ا‬ ّ‫ٌغزخذ‬systemٍٚ٘‫ٓؼ‬ ٍٚ٘ٓ‫ص‬ ‫ُلزشح‬
ٍ‫ا‬ ّٞ‫ٌو‬ ُْ ‫ٝارا‬userٍ‫ا‬ ّ‫ثبعزخذا‬system‫ُٔذح‬15 min.ُٚ ‫ٌؾذس‬logout
who -uH
THE W COMMAND
ٍ‫ا‬ ٞٛ ‫ٓب‬w command?
ٍ‫ا‬ ٖ‫ػ‬ ّ‫ثبالعزؼال‬ ‫هٔ٘ب‬ ‫ارا‬w command‫االٓش‬ ّ‫ثبعزخذا‬whatis‫اال‬ ‫كغ٘غذ‬: ً‫ر‬
ٍ‫ا‬ ًِ‫ػ‬ ‫دخِٞا‬ ٌٖ‫اُز‬ ‫االشخبص‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ‫االٓش‬ ‫ٛزا‬ ٕ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬system‫كؼِٞا‬ ‫ٝٓبرا‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 17
ٕ‫ٌغٍٔب‬ ًٗ‫ٝاُضب‬ ٍٝ‫اال‬ ‫اُغطش‬ ٕ‫ا‬ ‫اُظٞسح‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬headingٝ‫ا‬header
User ٍ‫ا‬ ْ‫اع‬logged user
tty ٍ‫ا‬ ْ‫اع‬ttyٍ‫ا‬ ‫ػٍِٜب‬ ًُ‫ا‬user
login@ ٍ‫ا‬ ٍٞ‫دخ‬ ‫رٞهٍذ‬User
idle ‫اُزي‬ ‫اُٞهذ‬َُ ّ‫اعزخذا‬ ‫اخش‬ ‫ٓ٘ز‬ ‫ٓش‬terminal
JCPU ٍ‫ا‬ ‫عٍٔغ‬ ٚ‫هؼز‬ ‫اُزي‬ ٖٓ‫اُض‬processesٍ‫ٝا‬child processesٍ‫ا‬ ّ‫اعزخذا‬ ً‫ك‬terminal
PCPU ٍ‫ا‬ ٚ‫هؼز‬ ‫اُزي‬ ٖٓ‫اُض‬active processٍ‫ا‬ ّ‫اعزخذا‬ ً‫ك‬ ‫اُؾبٍُخ‬terminal
What ٍ‫ا‬ ْ‫اع‬processٍ‫ا‬ ٝ‫ا‬commandَٔ‫ٌؼ‬ ‫اُزي‬
ٍ‫ثب‬ ‫هبئٔخ‬ ٙ‫ٝٛز‬optionsٍ‫ا‬ ‫ٛزا‬ ‫ٓغ‬ ‫أُغزخذٓخ‬command
-h ٍ‫ا‬ ‫ظٜٞس‬ ‫رٔ٘غ‬header
-u Ignores the username while figuring out the current process and cpu times. To
demonstrate this, do a "su" and do a "w" and a "w -u".
-s ‫ثؼشع‬ ّٞ‫ٌو‬short formatٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ‫ٝال‬login timeٍ‫ٝا‬JCPU‫ٝا‬ٍPCPU
-f ‫ظٜٞس‬ ‫ٌٔ٘غ‬from‫اُ٘زٍغخ‬ ٖٓ
-V ٍ‫ا‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ٌؼشع‬version
user ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ٌؼشع‬userٍٖ‫ٓؼ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 18
ٍ‫ا‬ ٌٖ‫رخض‬ ْ‫ٌٝز‬logged user‫ِٓق‬ ً‫ك‬/etc/utmp
ٍ‫ا‬ ‫ٓؾبٝالد‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ٌٖ‫رخض‬ ْ‫ٌٝز‬login‫ِٓق‬ ً‫ك‬ ‫اُلبشِخ‬/etc/security/failedlogin
THE "DATE" COMMAND
ٗ‫ا‬ ً‫ك‬ ‫اُغجت‬ٍ‫ا‬ ٙ‫ٛز‬ ‫ٗغزشعغ‬ ‫٘ب‬commandsٍٝ‫ا‬ َٔ‫ثؼ‬ ّٞ‫ع٘و‬ ‫اٗ٘ب‬ ًٛ ‫اُجغٍطخ‬scriptً‫ك‬
ٍ‫ا‬ ‫ٛزا‬courseٍ‫ا‬ ٙ‫ثٜز‬commands
ًُ‫ا‬ ‫ٝع٘ؾزبط‬ٍ‫ا‬date commandٍ‫ا‬ ً‫ك‬scripting‫ٗؼشف‬ ٕ‫ا‬ ‫ٗؾزبط‬ ‫دائٔب‬ ‫الٗ٘ب‬‫ثذ‬ ‫ٓزى‬ٍ‫ا‬ ‫أ‬
scriptٍ‫ا‬ ّٞ‫ٌو‬ ‫ًٔب‬ ، ًٜ‫اٗز‬ ً‫ٝٓز‬ َٔ‫اُؼ‬ ً‫ك‬date commandٍٔ‫اُغ‬ ‫االشٍبء‬ ‫ثؼغ‬ َٔ‫ثؼ‬‫ِخ‬
ٍ‫ا‬ ٖٓ ٌَٞ‫اُزؾ‬ َ‫ٓض‬ ‫ٗؾزبعٜب‬ ً‫اُز‬unix timeٍ‫ا‬ ًُ‫ا‬human timeٍٖ‫ث‬ ٌَٞ‫اُزؾ‬ ٌٌٖٔ ‫ًٔب‬ ،
‫أُخزِلخ‬ ‫اُزبسٌخ‬ ‫ػشع‬ ‫طٍؾ‬
# info date
ٍ‫ا‬ ًُ‫ا‬ ‫ٗظشٗب‬ ُٞٝform: ًُ‫اُزب‬ ٌَ‫اُش‬ ‫كغ٘غذ‬ ًُٝ‫اال‬
date [+ ]
‫يساوي‬ ‫وىو‬
date + “ “
ٍ‫ا‬ ‫ٝػغ‬ ْ‫ٌٝز‬formٍ‫ا‬ ٍٖ‫ث‬ ‫أُطِٞثخ‬“ ”
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 19
THE 'ECHO' COMMAND
‫االٓش‬ ٞٛ ٕ‫اال‬ ٚ٘‫ػ‬ ‫ع٘زؾذس‬ ‫آش‬ ‫اخش‬echo‫اي‬ ً‫ك‬ ٚ٘‫ػ‬ ً٘‫ؿ‬ ‫ٝال‬ ‫االٍٛٔخ‬ ً‫ك‬ ‫ؿبٌخ‬ ‫آش‬ ٞٛٝscript
ٍ‫ا‬ ٕ‫ا‬commandsٍ‫ا‬ ًِ‫ػ‬ ‫ثغُٜٞخ‬ ‫ر٘لٍزٛب‬ ٌٌٖٔ ‫عبثوب‬ ‫ػٜ٘ب‬ ‫رؾذص٘ب‬ ً‫اُز‬terminal‫ٝسإٌخ‬
ً‫ك‬ ‫ٝػؼ٘بٛب‬ ‫ارا‬ ٌُٖٝ ،‫ؼب‬ٌ‫ا‬ ‫ٗزٍغزٜب‬script‫اُشب‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫رظٜش‬ ِٖ‫ك‬، ‫شخ‬‫ؽشٌوخ‬ ًٛ ‫كٔب‬ ‫ارا‬
??? ‫اُشبشخ‬ ًِ‫ػ‬ ‫اظٜبسٛب‬
‫االٓش‬ ّ‫اعزخذا‬ ًٛ ‫اُطشٌوخ‬echo‫اُشبشخ‬ ًِ‫ػ‬ ‫أٌُِبد‬ ‫ثطجبػخ‬ ّٞ‫ٌو‬ ‫اُزي‬
ٝechoٌٌٕٞ ‫اُٜٝٔب‬ ، ٍٖ‫ٗٞػ‬ ُٚbuilt in the shellٌٌٕٞ ‫ٝاالخش‬externalً‫ٓز‬ ‫الؽوب‬ ‫ٝع٘ؼشف‬
‫ا‬ ‫ػشع‬ ً‫ك‬ ٚٓ‫ٗغزخذ‬ ‫كغٞف‬ ‫ثزُي‬ ّٞ‫ٗو‬ ٕ‫ا‬ ًُ‫ا‬ ٌُٖٝ ‫ٗٞع‬ ًَ ّ‫ٗغزخذ‬: ًُ‫ًبُزب‬ ‫ُزبسٌخ‬
ًُ‫ًبُزب‬ ‫اُ٘زٍغخ‬ ‫ٝعزظٜش‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 20
RUNNING A SHELL SCRIPT
ٍ‫ا‬ ٍَ‫ُزشـ‬scriptُٚ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬execution permissionsّ‫اعزخذا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬
: ‫االٓش‬
Chmod u+x script.sh
Chmod g+x script.sh
Chmod o+x script.sh
Chmod x script.sh
ٝ‫اٌُٞ٘ذ‬ ٖ‫ػ‬ ‫ٌخزِق‬ ‫ثبُطجغ‬ ‫ٝٛزا‬‫آزذاد‬ ُٚ ‫ِٓق‬ ‫اي‬ ٕ‫ا‬ ‫ٌؼزجش‬ ‫اُزي‬ ‫ص‬.exeٝ‫ا‬.comٞٛexecutable
fileٚ‫ث‬ ‫ٍُظ‬ ‫اٌٍُِ٘ظ‬ ‫ثٍ٘ٔب‬extensionsٍ ‫ٝاعزخذآ٘ب‬“.sh”‫ًـ‬ ‫ٍُظ‬extensionٞٛ ‫ٝاٗٔب‬
ٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ًِ‫ػ‬ ‫كوؾ‬ ‫رٍٍٔض‬fileٞٛscript‫ر٘لٍز‬ ْ‫كغٍز‬ ‫اصُ٘بٛب‬ ُٞٝ ، ‫كوؾ‬ ‫ر٘ظٍٍٔخ‬ ‫ػٍِٔخ‬ ‫اٜٗب‬ ‫اي‬
ٍ‫ا‬script‫ؼب‬ٌ‫ا‬
‫ػذ‬ ‫ٝٛ٘بى‬ٍ‫ا‬ ٍَ‫ُزشـ‬ ‫ؽشم‬ ‫ح‬script: َ‫ٓض‬
./script.sh
OR
sh script.sh
OR
‫ال‬ ‫في‬ ‫وضعو‬ ‫يمكه‬/bin‫استخدام‬ ‫بدون‬ ‫وتنفيذه‬“./”
FILE COMMANDS
ٍ‫ا‬ ٖ‫ػ‬ ‫اُغضء‬ ‫ٛزا‬ ً‫ك‬ ٌِْ‫ع٘ز‬commandsٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫اُز‬filesَ‫ٓض‬“ls”ّ‫ٌغزخذ‬ ‫اُزي‬
َٔ‫ُؼ‬Listingَُfiles
W ILDCARDS
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 21
ٍ‫ا‬wildcard‫ٓغٔٞػخ‬ ًٍٛ‫ا‬ ٖٓcharacters‫ُ٘ب‬ ‫رغٔؼ‬ ً‫اُز‬ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ثبُؾ‬filesً‫اُز‬
ًٜ‫ر٘ز‬ ٝ‫ا‬ ٍٖ‫ٓؼ‬ ‫ثؾشف‬ ‫رجذأ‬ ً‫اُز‬ ‫أُِلبد‬ َ‫ٓض‬ ‫ٗشٌذٛب‬ ً‫اُز‬ ‫أُٞاطلبد‬ ‫ؽغت‬ ‫رؾذٌذا‬ ‫ػٜ٘ب‬ ‫ٗجؾش‬
ٍٖ‫ٓؼ‬ ‫ثؾشف‬
ٍ‫ا‬ ‫ثؼغ‬ ٙ‫ٝٛز‬wildcard characters
Symbole Name Purpose
* Splat ‫اي‬ َ‫رٔض‬characterٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ٝ‫ا‬characters
?
question
mark
َ‫رٔض‬character‫كوؾ‬ ‫ٝاؽذ‬
[]
square
brackets
ٍ‫ا‬ ‫ٓغٔٞػخ‬ َ‫رٔض‬characters‫االهٞاط‬ ٍٖ‫ث‬ ‫ظٞسح‬‫أُؾ‬
! bang ً‫اُ٘ل‬ ً٘‫رؼ‬
W ILDCARD CHARACTERS WITH THE ASTERISK)*(
َٔ‫ثؼ‬ ّٞ‫رو‬matching‫ُـ‬character: َ‫ٓض‬ ‫اًضش‬ ٝ‫ا‬ ‫ٝاؽذ‬
THE QUESTION MARK ( ? ) W ILDCARD CHARACTER
َٔ‫ثؼ‬ ّٞ‫رو‬matching‫ُـ‬character‫(اي‬ ‫كوؾ‬ ‫ٝاؽذ‬character)
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 22
THE SQUARE BRACKETS) ][ (
َٔ‫ثؼ‬ ّٞ‫رو‬matching‫االهٞاط‬ ٍٖ‫ث‬ ‫أُٞعٞد‬ ‫ُِٔذي‬
: ٍٖ‫ث‬ ‫اُلشم‬ ‫الؽع‬
ٍٖ‫ٝث‬
THE BANG) ! (
َٔ‫ثؼ‬ ّٞ‫رو‬inverse matchingُ٘‫ا‬ ‫عٍٔغ‬ ‫ثؼشع‬ ّٞ‫رو‬ ‫اُؼالٓخ‬ ٙ‫ٛز‬ ٕ‫ا‬ ‫اي‬‫رؾزٞي‬ ً‫اُز‬ ‫ػذا‬ ‫ٓب‬ ‫زبئظ‬
ٍْ‫اُو‬ ٙ‫ٛز‬ ًِ‫ػ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 23
: ‫امثلة‬
touch {planes,trains}_{10,11}.{bak,bat}
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandَٔ‫ثؼ‬touchٍ‫ا‬ ٖٓ ‫ُٔغٔٞػخ‬filesٍ‫ا‬ ‫ٛزا‬ ٖ‫ػ‬ ‫ٌٝ٘زظ‬ ،‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬
commandٍ‫ا‬ ٙ‫ٛز‬files
Planes_10.bak, planes_10.bat, planes_11.bak, planes_11.bat, trains_10.bak,
trains_10.bat, trains_11.bak, trains_11.bat
RETURNING TO FILE COMMANDS
ٍ‫ا‬ ْٛ‫ا‬ ٖ‫ػ‬ ‫ع٘زؾذس‬commandsٍ‫ا‬ ً‫ك‬ ‫أُغزخذٓخ‬bash scriptingٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫ٝاُز‬
files
LS
ٍ‫ا‬ ‫ٝٛزا‬commandَٔ‫ػ‬ ً‫ك‬ ّ‫ٌغزخذ‬Listٍ‫ا‬ ٌَُfilesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬directory،
‫ثؼغ‬ ًِ‫ػ‬ ‫ٌٝؾزٞي‬ٍ‫ا‬options
-lً٘‫ٌٝؼ‬ :long listٍ‫ا‬ ‫ٝٛزا‬optionٍ‫ا‬ ٖ‫ػ‬ ‫ظٍال‬‫رل‬ ‫اًضش‬ ‫ثٍبٗبد‬ ‫ثبظٜبس‬ ّٞ‫ٌو‬filesٍ‫ا‬ َ‫ٓض‬
permissionsٍ‫ٝا‬last modification timeٍ‫ٝا‬sizeٍ‫ٝا‬ownerٍ‫ٝا‬group
-aٍ‫ا‬ ‫ثبظٜبس‬ ّٞ‫ٌو‬ ٞٛٝ :hidden files).. ٝ .( ًِ‫ػ‬ ‫رؾزٞي‬ ً‫ٝاُز‬
ٍ‫ٝا‬files‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬ٍ‫ا‬ ًٛ ).( ًِhidden filesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬directoryًُ‫اُؾب‬
ٍ‫ا‬ ‫ثٍ٘ٔب‬filesٍ‫ا‬ ًٛ )..( ًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬hidden filesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬parent directory
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 24
CP
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandَٔ‫ثؼ‬copyَُfiles
MV
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandَٔ‫ثؼ‬moveَُfiles
W C
َٔ‫ثؼ‬ ّٞ‫ٌو‬countٍُ‫ا‬ ‫ؼذد‬Linesٍ‫ٝا‬charactersٍ‫ٝا‬words
NL
ٍ‫ا‬ ‫ػذد‬ ‫ٌٞػؼ‬linesٍ‫ا‬ ً‫ك‬file
SYSTEM COMMANDS
ٍ‫ا‬ ًٛcommandٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫اُز‬system: َ‫ٓض‬df, du, fdisk, iostat, vmstat,
free
df ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬free disk space
du ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬disk usage
fdisk ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬partitionsٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬hard disk
iostat ٍ‫ا‬ ‫ؽبُخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬input/outputٍ‫ا‬ ًِ‫ػ‬hard disk
vmstat ٍ‫ا‬ ‫ؽبُخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬virtual memory
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 25
free ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬free memory
THE DF AND DU COMMANDS
dfٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬ :partitions‫أُٞعٞدح‬ُ‫ا‬ َ‫ٓض‬ ْٜ٘‫ػ‬ ‫ٝٓؼِٞٓبد‬ ‫اُغٜبص‬ ًِ‫ػ‬‫اُلبسؿخ‬ ‫ٔغبؽخ‬
ٍ‫ٝا‬ ‫أُٔزِئخ‬ ‫ٝأُغبؽخ‬mounted partitions‫ٝؿٍشٛب‬
ٍ‫ا‬ ‫ٛزا‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬ ‫ارا‬commandَٔ‫ػ‬ ً‫ك‬scriptَٔ‫ثؼ‬ ّٞ‫ٌو‬checkٍ‫ا‬ ًِ‫ػ‬
partitions‫ٝاظٜبس‬alarmًُ‫ا‬ ُٚٞ‫ٝط‬ ٝ‫ا‬ ٚ‫آزالئ‬ ‫ػ٘ذ‬thresholdٍٖ‫ٓؼ‬
ٍ‫ا‬ ‫ٝٛزا‬commandٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬free disk spaceٍ‫ثب‬byteٌُٝ ،َٜ‫ٌغ‬ ٌَ‫ثش‬ ‫ُؼشػٜب‬ ٖ
ٍ‫ا‬ ‫ثؼغ‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬ ٚ‫هشاءر‬options: َ‫ٓض‬
df -hT
ٍ‫ا‬ ٕ‫ا‬ ‫ؽٍش‬“–h”ً٘‫رؼ‬human readable
ٍ‫ٝا‬“T”ً٘‫رؼ‬typeٍ‫ا‬ ‫ٗٞع‬ ‫رٞػؼ‬ ًٛٝpartitionٞٛ َٛext2, ext3,extended,
‫االٓش‬ ّ‫اعزخذا‬ ٌٌٖٔٝduٍ‫ا‬ ً‫ك‬ ‫ٓغبؽخ‬ ‫ٝرغزِٜي‬ ‫ًجٍش‬ ْ‫ؽغ‬ ‫ُٜب‬ ‫أُِلبد‬ ‫اي‬ ‫ٌٞػؼ‬ ‫اُزي‬hard
disk
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 26
‫اػبكخ‬ ٌٌٖٔٝ“-s”‫ُؼشع‬summaryٍ‫ا‬ ٖٓ ‫أُغزخذٓخ‬ ‫اٌٍُِخ‬ ‫أُغبؽخ‬ ٖ‫ػ‬file systemًِٚ
du -s
THE FDISK COMMAND
ٍ‫ا‬fdiskٍ‫ا‬ ‫اظٜبس‬ ًِ‫ػ‬ ‫االعبط‬ ً‫ك‬ ّٞ‫ٌو‬partitionsٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬HDD
ٍ‫ا‬ ‫ٝٛزا‬command‫ال‬ٙ‫ر٘لٍز‬ ‫ٌغزطٍغ‬ٍ‫ا‬ ‫اال‬root
THE FREE COMMAND
‫ا‬ ‫ٛزا‬ٍcommandٍ‫ا‬ ‫ثبظٜبس‬ ّٞ‫ٌو‬total memoryٍ‫ٝا‬usedٍ‫ٝا‬freeٍ‫ا‬ ‫ٝٓغبؽخ‬ ‫ٜٓ٘ب‬
swapٍ‫ٝا‬usedٍ‫ٝا‬free‫ؼب‬ٌ‫ا‬ ‫ٜٓ٘ب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 27
THE VMSTAT COMMAND
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬command‫ثبظٜبس‬how busy the system isٍ‫ا‬ ‫ٝػذد‬processٍ‫ٝا‬ َٔ‫رؼ‬ ً‫اُز‬
blocked process
ٍ‫ا‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ثبظٜبس‬ ‫ؼب‬ٌ‫ا‬ ّٞ‫رو‬ ‫ًٔب‬memoryٍ‫ا‬ ‫اعزٜالى‬ ‫ٓوذاس‬ َ‫ٓض‬swap daemonٍ‫ا‬ ٖٓ
memoryٍ‫ا‬ ‫هٍٔخ‬ ‫ٝٓب‬bufferٍ‫ٝا‬cache
ٍ‫ا‬ ‫ػذد‬ ًْٝprocessٍ‫ا‬ ‫دخِذ‬ ً‫اُز‬swapٍ‫ا‬ ٖ‫ػ‬ ‫ٝثٍبٗبد‬ ٚ٘ٓ ‫خشعذ‬ ً‫ٝاُز‬usersٍ‫ٝا‬
systemٍ‫ٝا‬idle and waiting time
THE IOSTAT COMMAND
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandٍ‫ا‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ثؼشع‬input/outputٍ‫ا‬ ً‫ك‬systemٖ‫ػ‬ ‫ٝٓؼِٞٓبد‬
ٍ‫ا‬system performance
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 28
ٍ‫ا‬ ٖ‫ػ‬ ‫أُؼِٞٓبد‬ ٖٓ ‫أُضٌذ‬ ‫ُٝٔؼشكخ‬system performanceَٔ‫ػ‬ ٌٌٖٔinstallَُsysstat
package
STDIN, STDOUT, STDERR
ٍ‫ا‬ ٍَ‫رشـ‬ ًِ‫ػ‬ ‫اٌٍُِ٘ظ‬ ّٞ‫ٌو‬commandsٍ‫ا‬ ً‫ك‬ ‫أٌُزٞثخ‬CLI‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫ٝاخشاط‬
‫ؽز‬ًِ‫ػ‬ ‫ٌؾزٞي‬ ٕ‫ًب‬ ٕ‫ا‬ ًerrorsٍ‫ا‬ ًِ‫ػ‬ ‫ٌؼزٔذ‬ ‫اٌٍُِ٘ظ‬ ٕ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬inputsٍ‫ٝا‬outputs
ٍ‫ٝا‬errorsٍٖ‫ٓؼ‬ ‫ثشٓض‬ ْٜ٘ٓ ٌَُ ‫ٌٝشٓض‬ ،
Type Symbol
standard input (stdin) 0<
standard output (stdout) 1>
standard error (stderr) 2>
ّ‫االسهب‬ ٙ‫ٝٛز‬(0, 1, 2)ًٔ‫رغ‬file descriptor‫اُضالصخ‬ ٖٓ ‫ٗٞع‬ ٌَُ
ٍ‫كب‬(0)َ‫ٌٔض‬file descriptorَُstandard input
ٍ‫كب‬(1)َ‫ٌٔض‬file descriptorَُstandard output
ٍ‫كب‬(2)َ‫ٌٔض‬file descriptorَُstandard error
STDIN
ٍ‫ا‬ ٍ‫ادخب‬ ٌٌٖٔ ً‫اُز‬ ‫اُطشم‬ ٖٓ ‫اُؼذٌذ‬ ‫ٛ٘بى‬data: ‫ٜٓ٘ب‬ ‫ٌٍُِ٘ظ‬
1-terminalٍ‫ا‬ ًٛٝ :CLIُ‫ا‬ٍ‫ا‬ ‫كٍٜب‬ ‫ٌٗزت‬ ً‫ز‬commands
2-deviceٍ‫ا‬ ًٛٝ :keyboardٍ‫ا‬ ٝ‫ا‬device‫ٜٓ٘ب‬ ‫اُجٍبٗبد‬ ٍ‫ثبدخب‬ ّٞ‫ٗو‬ ً‫اُز‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 29
3-fileٞٛٝ :fileًِ‫ػ‬ ‫ٌؾزٞي‬data‫ثٜب‬ ّٞ‫ٌو‬ ‫اخشي‬ ‫ػٍِٔخ‬ ً‫ك‬ ‫اٌٍُِ٘ظ‬ ‫ٌغزخذٜٓب‬َ‫ٓض‬
cat < myfirstscript
cat 0< myfirstscript
cat myfirstscript
ٍ‫ا‬ ‫ٝٛزا‬commandٖٓ ‫ٌطِت‬ٍ‫ا‬catٍ‫ا‬ ‫ٌؤخز‬ ٕ‫ا‬inputٖٓfileٚٔ‫اع‬myfirstscriptٖٓ ‫ثذال‬
ٍ‫ا‬keyboard‫اُشبشخ‬ ًِ‫ػ‬ ٚ‫ٌٝؼشػ‬
STDOUT
by defaultٍ‫ا‬ ‫ٌظٜش‬output، ‫اُشبشخ‬ ًِ‫ػ‬‫االٓش‬ ‫ثٌزبثخ‬ ‫هٔ٘ب‬ ‫كبرا‬
cat myfirstscript
ٍ‫ا‬ ٕ‫ا‬ ‫كغ٘غذ‬output‫اُشبشخ‬ ًِ‫ػ‬ ‫عٍظٜش‬
‫ث‬ ّٞ‫ٗو‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬ ، ‫رُي‬ ‫رـٍٍش‬ ٌٌٖٔ ٌَُٖٝٔ‫ؼ‬redirectَُoutput‫اخش‬ ٕ‫ٌٓب‬ ًُ‫ا‬ًٌِ ‫ًٔب‬
cat myfirstscript > newscript
cat myfirstscript 1> newscript
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 30
‫ٓؾزٌٞبد‬ ‫ػشػ٘ب‬ ‫كؼ٘ذٓب‬myfirstscriptٍ‫ا‬ ٕٝ‫ثذ‬redirectionٍ‫ا‬ ‫كظٜشد‬stdout،‫اُشبشخ‬ ًِ‫ػ‬
ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫ػ٘ذٓب‬ ٌُٖٝredirectionٍ‫ا‬ ‫ٝعؼِ٘ب‬stdoutًُ‫ا‬ ‫ٌزٛت‬fileًٔ‫ٌغ‬new script
ٍ‫ا‬ ‫ٌظٜش‬ ِْ‫ك‬outputٍ‫ا‬ ًُ‫ا‬ ‫رٛت‬ ٌُٖٝ ‫اُشبشخ‬ ًِ‫ػ‬file
ٍ‫ا‬ ٕ‫ًب‬ ‫ارا‬newscriptَٔ‫ثؼ‬ ّٞ‫ٌو‬ ‫كغٞف‬ ‫اعبعب‬ ‫ٓٞعٞد‬ ‫ؿٍش‬creationٍ‫ا‬ ٕ‫ًب‬ ‫ارا‬ ‫آب‬ ، ُٚ
newscriptٍ‫ا‬ ‫ٌٌٝزت‬ ٚ‫ٓؾزٌٞبر‬ ‫ٌٔغؼ‬ ‫كغٞف‬ ‫ٓغجوب‬ ‫ٓٞعٞد‬data‫اُغذٌذح‬
ٍ‫ا‬ ٕ‫كب‬ ‫ارا‬myfirstscriptٍ‫ا‬ ٞٛstdoutٍ‫ٝا‬newscriptٍ‫ا‬ ٞٛstdout
‫ٛ٘بى‬ ٌٌٖ ُْ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝmyfirstscriptٝ‫ا‬stdinًُ‫ا‬ ٚ‫ٓؾزٌٞبر‬ َ‫اٗو‬ ًٌُnewscript?
ٍ‫ا‬ ٕ‫ا‬ ًٛ ‫ٛ٘ب‬ ‫االعبثخ‬screen‫ظجؼ‬‫عز‬ ً‫اُز‬ ًٛstdin: ًُ‫اُزب‬ ٍ‫أُضب‬ ً‫ك‬ ‫ًٔب‬
‫آش‬ ‫اعزخذٓ٘ب‬ ‫ػ٘ذٓب‬catٍ‫ا‬ ‫ٓغ‬redirectionٍ‫ا‬ ٕ‫كب‬cat‫رغذ‬ ُْstdin‫ٓؾ‬ ‫رؤخز‬ ًٌُٚ‫زٌٞبر‬
ً‫ك‬ ‫ؼؼٜب‬‫ٝر‬newscript‫ا‬ ْ‫ر‬ ‫ُزُي‬ٍ‫ا‬ ٖ‫ػ‬ ‫العزؼبػخ‬input fileٍ‫ثب‬command line‫ظجؼ‬ٌ ًٌُ
ٍ‫ا‬ ٞٛinput methodٍ‫ا‬ َ‫كبٗزو‬ ، ‫اُجذٌِخ‬curserٍ‫ا‬ َ‫ٗذخ‬ ً‫ؽز‬ ‫ٝاٗزظش‬ ًُ‫اُزب‬ ‫ُِغطش‬inputs
ٍ‫ا‬ ٍ‫ادخب‬ ٖٓ ‫االٗزٜبء‬ ‫ٝثؼذ‬inputsًِ‫ػ‬ ‫ؼـؾ‬ُ‫ثب‬ ّٞ‫ٗو‬CTRL+D (^D)ٍ‫ا‬ ‫ٗخجش‬ ً‫ؽز‬catٕ‫ا‬
‫ػ‬ٍ‫االدخب‬ ‫ٍِٔخ‬‫هذ‬‫اٗزٜذ‬
USING STDIN AND STDOUT SIMULTANEOUSLY
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔstdinٍ‫ٝا‬stdoutٍ‫ا‬ ‫ُؼٍِٔخ‬ ٌَ‫ًجذ‬ ‫اُجؼغ‬ ‫ؼٜٔب‬‫ثؼ‬ ‫ٓغ‬copy‫أُِلبد‬ ٍٖ‫ث‬
cat myfirstscript newscript
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 31
cat < myfirstscript > newscript
‫ٓؾزٌٞبد‬ ‫ث٘غخ‬ ‫هٔ٘ب‬ ‫ٝٛ٘ب‬myfirstscriptًُ‫ا‬newscript‫ث‬ٍ‫ا‬ ّ‫بعزخذا‬redirection
APPENDING TO A FILE
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝredirectionٍ‫ا‬ ‫ػٍِٔخ‬ ً‫ك‬appendingٍ‫ا‬ ًُ‫ا‬ ‫اُجٍبٗبد‬ ‫اػبكخ‬ ً٘‫ٝرؼ‬file
‫اُوذٌٔخ‬ ‫اُجٍبٗبد‬ ‫ٓغؼ‬ ٕٝ‫ثذ‬
‫اُؼالٓخ‬ ‫اعزخذٓ٘ب‬ ‫ػ٘ذٓب‬ ‫اٗ٘ب‬ ‫ٛ٘ب‬ ‫ٝٗغذ‬(>>)ٍ‫ا‬ ٕ‫كب‬catًِ‫ػ‬ ‫ثبٌُزبثخ‬ ّٞ‫ٌو‬ ُْnewscript
‫ثبػبك‬ ّ‫هب‬ ‫ٝاٗٔب‬ٍُٚ‫ا‬ ‫اُغذٌذح‬ ‫اُجٍبٗبد‬ ‫خ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 32
STDERR
‫اي‬ ‫ر٘لٍز‬ ‫ػ٘ذ‬command:ٍٖ٘‫اص‬ ٖٓ ‫ٗزٍغخ‬ ٚ٘‫ػ‬ ‫ٌ٘زظ‬
1-ٍ‫ٗز‬‫طؾٍؾخ‬ ‫غخ‬(valid output)
2-( ‫خبؽئخ‬ ‫ٗزٍغخ‬error message)
ٍ‫ا‬ ‫ٓغ‬ ‫ٌؾذس‬ ‫ٝٓب‬outputٍ‫ا‬ ‫ٓغ‬ ‫ٌؾذس‬ ‫اُؼبدي‬error‫اُشبشخ‬ ًِ‫ػ‬ ‫ًالٛٔب‬ ‫ٌظٜش‬ ‫ؽٍش‬
ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫كبرا‬command‫ى‬normal userُٝ‫ى‬ ‫ٍظ‬root user
find / -name "*" -print
ًِ‫ػ‬ ‫رؾزٞي‬ ‫ؽٍش‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫كغزظٜش‬valid outputٝerror
message
ٍ‫ا‬ ‫اظٜبس‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝvalid outputٍ‫ا‬ ٍ‫ثبسعب‬ ّٞ‫ٗو‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬ ‫كوؾ‬errorًُ‫ا‬fileً‫ؽز‬ ‫اخش‬
ٍ‫ا‬ ‫ٝٛزا‬ ، ‫اُشبشخ‬ ًِ‫ػ‬ ‫ٌظٜش‬ ‫ال‬fileٌٌ ‫ٓب‬ ‫ؿبُجب‬ٕٞ/dev/null
ٍ‫ٝا‬/dev/nullٍ‫ا‬ ٚ‫رشج‬recycle binٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬windowsٍ‫ا‬ ًٖ‫ٝال‬/dev/null‫ال‬
ٍ‫ا‬ ً‫ك‬ ‫ٌؾذس‬ ‫(ًٔب‬ ‫اخشي‬ ‫ٓشح‬ ‫ٓؾزٌٞبرٜب‬ ‫اسعبع‬ ٌٌٖٔshift + deleteًٔ‫رغ‬ ًٜ‫ك‬ ‫ُزُي‬ )linux
black hole
ٍ‫ا‬ ٍ‫ٝالسعب‬errorٍ‫ا‬ ًُ‫ا‬/dev/nullٍ‫ا‬ ّ‫اعزخذا‬ ‫ٌغت‬file descriptor‫اُخب‬ٍ‫ثب‬ ‫ص‬stderr
(2>)ٍ‫ا‬ ٍٖ‫ث‬ ‫اُزٍٍٔض‬ ‫اٌٍُِ٘ظ‬ ‫ٌغزطٍغ‬ ً‫ؽز‬stdoutٍ‫ٝا‬stderr
find / -name "*" -print 2> /dev/null
ٍ‫ا‬redirection‫اخش‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬commandٍ‫ا‬ ً‫ك‬ ٙ‫ر٘لٍز‬ ْ‫ٌز‬script
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 33
ٍ‫ا‬ ٕ‫ا‬ ‫ٗغذ‬ ‫ٝٛ٘ب‬valid output‫اُشبشخ‬ ًِ‫ػ‬ ‫ظٜش‬ ‫اُزي‬ ‫اُٞؽٍذ‬ ٞٛ
ٍ‫ا‬ ٙ‫ٛز‬ ٌٕٞ‫ر‬ ‫ٝهذ‬errorsَٔ‫ػ‬ ‫ؽبُخ‬ ً‫ك‬ ‫ٓلٍذح‬diagnosticsٝ‫ا‬troubleshootingَ‫ؼ‬‫ٌل‬ ‫ُزُي‬
ٍ‫اسعب‬ٍ‫ا‬ ٙ‫ٛز‬errorsًُ‫ا‬fileٍ‫ا‬ ٙ‫ٛز‬ ًِ‫ػ‬ ‫االؽالع‬ ‫خالُخ‬ ٖٓ ٌٌٖٔ ‫خبص‬errorsٖٓ ‫ثذال‬
ٍ‫ا‬ ًُ‫ا‬ ُٚ‫اسعب‬null
STDOUT, STDERR AND USING THE AMPERSAND)&(
ٍ‫ا‬ ٍٖ‫ث‬ ‫اُذٓظ‬ ٌٌٖٔstdoutٍ‫ٝا‬stderrٍ‫ا‬ ‫ٗلظ‬ ً‫ك‬ ‫ٓؼب‬command‫ر٘لٍز‬ ‫اسدٗب‬ ‫ارا‬ ‫كٔضال‬
commandٍ‫ٝاسعب‬ ٍٖ‫ٓؼ‬valid outputًُ‫ا‬fileًٔ‫ٌغ‬validoutٍ‫ا‬ ٍ‫ٝاسعب‬errorًُ‫ا‬
fileًٔ‫ٌغ‬errorout‫كوؾ‬ ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫رُي‬ ‫ر٘لٍز‬ ٌٍٖٔ‫ك‬
find / -name "*" -print 2> errorout > validout
ٍ‫ا‬ ‫ٝرشرٍت‬redirectionّ‫ٛب‬ ‫ؿٍش‬
find / -name "*" -print 2> errorout > validout
find / -name "*" -print > validout 2> errorout
‫االٓش‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬ .... ‫اخشي‬ ‫ٓشح‬findٍ‫ثب‬normal user
find / -name "*" -print
ًِ‫ػ‬ ‫رؾزٞي‬ ‫ؽٍش‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫كغزظٜش‬valid outputٝerror
message
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 34
‫ػالٓخ‬ ّ‫ثبعزخذا‬ ‫هٔ٘ب‬ ‫ٝارا‬(>)ْ‫كغٍز‬َٔ‫ػ‬redirectَُvalid output‫كوؾ‬
‫ث‬ ‫هٔ٘ب‬ ‫ٝارا‬‫ػالٓخ‬ ّ‫بعزخذا‬(2>)َٔ‫ػ‬ ْ‫كغٍز‬redirectَُerror‫كوؾ‬
َٔ‫ثؼ‬ ّٞ‫ٗو‬ ًٌُٝredirectَُvalid outputٍ‫ٝا‬error‫اُؼالٓخ‬ ّ‫ثبعزخذا‬ ّٞ‫ٗو‬ ‫ٓؼب‬(&)‫ًٔب‬
ًٌِ
find / -name "*" -print 2> samefile 1>&2
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬ ‫ؽٍش‬commandٍ‫ا‬ ٍ‫ثبسعب‬errorٚٔ‫اع‬ ‫ِٓق‬ ًُ‫ا‬same fileٍ‫ا‬ َ‫ٌشع‬ ْ‫ص‬valid
outputٍ‫ا‬ ‫ٗلظ‬ ًُ‫ا‬fileٍ‫ا‬ ٍ‫اسعب‬ ْ‫ر‬ ‫اُزي‬errorٌَ‫اُش‬ ‫ثٜزا‬ ٚ‫ًزبثز‬ ٌٌٖٔٝ ، ُٚ
find / -name "*" -print 1> file 2>&1
ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬ ‫ؽٍش‬commandٍ‫ا‬ ٍ‫ثبسعب‬valid outputٚٔ‫اع‬ ‫ِٓق‬ ًُ‫ا‬fileٍ‫ا‬ َ‫ٌشع‬ ْ‫ص‬
errorٍ‫ا‬ ‫ٗلظ‬ ًُ‫ا‬fileٍ‫ا‬ ٍ‫اسعب‬ ْ‫ر‬ ‫اُزي‬valid outputُٚ
&>file
َٔ‫ثؼ‬ ّٞ‫ٌو‬redirectَُerrorٍ‫ٝا‬valid outputٍ‫ا‬ ًُ‫ا‬ ‫ٓؼب‬file
UNAMED PIPES
ٍ‫ا‬ َ‫ٗشع‬ ٕ‫ا‬ ‫اعزطؼ٘ب‬ ٕ‫اال‬ ً‫ؽز‬output‫الي‬commandًُ‫ا‬fileَ‫ٗشع‬ ٕ‫ا‬ ٌٌٖٔ َٛ ٌُٖٝ ،
ٍ‫ا‬ ‫ٛزا‬output‫ًـ‬inputًُ‫ا‬command??? ‫أُطِٞثخ‬ ‫اُ٘زٍغخ‬ ًِ‫ػ‬ َ‫ظ‬‫ٗؾ‬ ٕ‫ا‬ ًُ‫ا‬ ‫ٌٝٛزا‬ ‫اخش‬
ٝ !!! ْ‫ٗؼ‬ ًٛ ‫االعبثخ‬ٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬pipe (|)َ‫ٓض‬
ls -la /etc | less
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 35
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ٝٛ٘ب‬“ls -la”‫ثؼشع‬long listَ‫ثذاخ‬ ‫أُٞعٞدح‬ ‫ُِِٔلبد‬/etcْ‫ص‬ّٞ‫ٌو‬‫ثؤخز‬‫ٛزا‬ٍ‫ا‬
output‫ًـ‬ ِٚ‫ٌٝذخ‬input‫االٓش‬ ًُ‫ا‬less‫طلؾخ‬ ‫طلؾخ‬ ًُٝ‫اال‬ ‫اُ٘زٍغخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ‫اُزي‬
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝpipe: َ‫ٓض‬ ‫ٓشاد‬ ‫ػذح‬
ls –la | grep a| less
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝpipeٍ‫ا‬ ‫ٓغ‬redirection
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 36
CHAPTER 2. THE SHELL
INTRODUCTION
ٍ‫ا‬ ٞٛ ‫ٓب‬shell?
ٍ‫ا‬shellٍ‫ا‬ ْ‫ٓزشع‬ ٞٛcommands: ٕ‫ٗٞػب‬ ٚ٘ٓ ‫ٌٝٞعذ‬
1-Login shell
ٍ‫ا‬ ًُ‫ا‬ ‫دخُٞي‬ ٖ‫ػ‬ ٍٞ‫أُغئ‬ ٞٛٝsystemٍ‫ا‬ ‫كٍٜب‬ ‫ٌظٜش‬ ً‫ٝاُز‬usernameٍ‫ٝا‬
password
2-Non-login shell
ٍ‫ا‬ ًٛterminalٍ‫ا‬ ‫كٍٜب‬ ‫ٌٗزت‬ ً‫اُز‬commandsٍ‫ا‬ َ‫ٓض‬bash, sh, ksh, csh،
ٖٓ ‫ٌوشة‬ ‫ٓب‬ ‫ٝٛ٘بى‬50 non-login shell‫اعزخذآٜب‬ ٌٌٖٔ
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 37
ٍ‫ا‬ ْٜ‫ٗل‬ ًٌُٝshellٍ‫ا‬ ّ‫ع٘غزخذ‬ ‫اٗ٘ب‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫ٌغت‬ ٌُٖٝ ، َٔ‫رؼ‬ ‫ًٍق‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫ٌغت‬bash
‫رٞصٌؼ‬ ْ‫ٓؼظ‬ ً‫ك‬ ‫اعزخذآب‬ ‫االًضش‬ ٞٛ ٚٗ‫ال‬‫اٌٍُِ٘ظ‬ ‫بد‬
ٍ‫ا‬ ًٛ ‫ٓب‬ ‫ٗؼشف‬ ًٌُٝshell‫أُغزخذٓخ‬
echo $0
WHAT IS THE LOGIN SHELL?
ٍ‫ا‬login shellٖ‫ػ‬ ‫أُغئُٞخ‬ ًٛ:
1-ٍ‫ا‬ ٍَ‫رشـ‬non-login shell
2-َٔ‫ثؼ‬ ّٞ‫ٌو‬checkًِ‫ػ‬ٍ‫ا‬environment variablesٍ‫ا‬ ‫ٌؾزبعٜب‬ ً‫اُز‬systemَ‫ٓض‬
ٍ‫ا‬PATH, TERM, UID, GIDَُuser‫ا‬ ّ‫ٌغزخذ‬ ‫اُزي‬ٍsystem
3-ٍ‫ا‬ َٔ‫ثؼ‬ ّٞ‫رو‬default variablesٍ‫ا‬ َ‫ٓض‬USERNAME, HISTSIZE, HOSTNAME,
HOME
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 38
ٍ‫ا‬ ٍَ‫رشـ‬ ‫ثذاٌخ‬ ‫ٝػ٘ذ‬systemٍ‫ا‬ ّٞ‫ٌو‬login shellَٔ‫ثؼ‬checkٍ‫ا‬ ٖٓ ٍٖ‫ٗٞػ‬ ًِ‫ػ‬files:
1-User profile files
2-Shell rc files
َُ ‫ٝثبُ٘غجخ‬systemٍ‫ا‬ ٙ‫كٜز‬filesًٔ‫رغ‬profileٝbashrcًٝ‫ك‬ ‫رٞعذ‬/etcٝ‫رؾزٞي‬ ًٛ
ٍ‫ا‬ ًِ‫ػ‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ً‫ك‬ ّ‫رغزخذ‬ ً‫اُز‬systemٝ ًٌٍَ‫ا‬ ٞٛ ‫ػٜ٘ب‬ ٍٞ‫أُغئ‬
root
ٍ‫ا‬ ‫ٌٝؾزٞي‬/etc/profileٍ‫ا‬ ًِ‫ػ‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ٍٖ‫ٌغزؼ‬ ً‫اُز‬login shell
ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ُِذخ‬system
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 39
ٍ‫ا‬ ‫ٌؾزٞي‬ ‫ثٍ٘ٔب‬/etc/bashrcٍ‫ا‬ ًِ‫ػ‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ‫ٌؾزبعٜب‬ ً‫اُز‬non-login
shellٍ‫ا‬ ًُ‫ا‬ ٍٞ‫اُذخ‬ ‫ثذاٌخ‬ ‫ػ٘ذ‬terminalٍ‫ا‬ ‫ٌغزخذٜٓب‬ ً‫اُز‬ ‫االػذاداد‬ ًِ‫ػ‬ ‫ُِزؼشف‬userً‫ك‬
ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬shell
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 40
َُ ‫ثبُ٘غجخ‬ ‫آب‬normal usersًٔ‫رغ‬ ‫أُِلبد‬ ٙ‫كٜز‬.bashrcٝ.bash_profileٍ‫ا‬ ً‫ك‬ ‫ٝرٞعذ‬
home directoryٌَ‫ث‬ ‫اُخبص‬userٌٕٞ‫ٝر‬hiddenٍ‫ا‬ ٖ‫ػ‬ ‫ٓغئُٞخ‬ ًٛٝfunctionsٍ‫ٝا‬
aliasesٍ‫ثب‬ ‫اُخبطخ‬userٍ‫ا‬ ‫ٌٝغزطٍغ‬ ، ٚ‫ٗلغ‬user‫ُٜب‬ ‫ٝاالػبكخ‬ ‫ػٍِٜب‬ ٌَ‫اُزؼذ‬
‫ِٓق‬ ٕ‫ا‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬.bash_profileٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬aliasesٍ‫ٝا‬functions
ٍ‫ثب‬ ‫اُخبطخ‬Userٍ‫ا‬ ‫ٌؾزبعٜب‬ ً‫ٝاُز‬system‫ثذاٌخ‬ ‫ػ٘ذ‬ٍ‫ا‬ ًُ‫ا‬ ٍٞ‫اُذخ‬user profile
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 41
‫ِٓق‬ ‫ثٍ٘ٔب‬.bashrcٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ٜٞ‫ك‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ‫ٌغزخذٜٓب‬ ً‫اُز‬userً‫ك‬
ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬non-login shellٍ‫(ا‬terminal)ٚ‫ث‬ ‫اُخبطخ‬
‫ك‬ ‫ارا‬ٍ‫ثب‬ ‫اُخبطخ‬ ‫بُِٔلبد‬login shellًٛ
/etc/profile >>>>> for system
.bash_profile >>>>> for user
ٝ‫أُِلبد‬ ٙ‫ٛز‬ ‫رؾزٞي‬ًِ‫ػ‬system initialization dataٍ‫ا‬ ‫ٌغزخذٜٓب‬systemٍ‫ا‬ ‫ػ٘ذ‬login
ٍ‫ثب‬ ‫اُخبطخ‬ ‫أُِلبد‬ ‫ثٍ٘ٔب‬non-login shell: ًٜ‫ك‬
/etc/bashrc >>>>> for system
.bashrc >>>>> for user
ٍ‫ا‬ ّٞ‫ٌو‬ ٕ‫ا‬ ٌٌٖٔٝUser‫اي‬ ‫ٝاػبكخ‬ ٚ‫ِٓلبر‬ ًِ‫ػ‬ ٌَ‫ثبُزؼذ‬aliasٝ‫ا‬function‫ػِٜٔب‬ ‫ٌشٌذ‬
ٍ‫ا‬ ٌُٖٝroot userٍ‫ا‬ ‫ِٓلبد‬ ٌَ‫رؼذ‬ ًِ‫ػ‬ ‫اُوبدس‬ ‫اُٞؽٍذ‬ ٞٛ/etc/profileٝ/etc/bashrc
ٍ‫ا‬ ٍَ‫ثزشـ‬ ّٞ‫ٗو‬ ‫ٓشح‬ ًَ ً‫ٝك‬terminal (non-login shell or bash)ً‫ِٓل‬ ٍَ‫رشـ‬ ْ‫ٌز‬
/etc/bashrcٝ~/.bashrc
ًِ‫ػ‬ ٍٞ‫اُذخ‬ ٌٌٖٔٝbashٍ‫ا‬ ‫ٗلظ‬ ٖٓ ‫اخشي‬bashٍِٜ‫ػ‬ َٔ‫اػ‬ ً‫اُز‬‫االٓش‬ ‫ر٘لٍز‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ب‬
bash
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 42
ٍَ‫رشـ‬ ْ‫كٍز‬bash‫(ٍُٝظ‬ ‫عذٌذح‬tabٍ‫ا‬ ‫ٗلظ‬ ً‫ك‬ )‫عذٌذح‬terminal‫ُِٝخشٝط‬ ، ‫أُلزٞؽخ‬
‫االٓش‬ ‫ٌٗزت‬
exit
ٍ‫ٝا‬bashًٔ‫رغ‬ ‫االطٍِخ‬parent bashٍ‫ا‬ ‫ثٍ٘ٔب‬bashًٔ‫رغ‬ ‫اُغذٌذح‬child bashٝ‫ا‬sub-
shell
ًِ‫ػ‬ ٍٞ‫ثبُذخ‬ ‫هٔ٘ب‬ ‫ٝارا‬bashٍ‫ا‬ ٖٓ ‫عذٌذح‬bashٍ‫ا‬ ٕ‫كب‬ ‫اُوذٌٔخ‬systemٍ‫ا‬ ٍَ‫ثزشـ‬ ّٞ‫ٌو‬ ‫ال‬
profile files‫اخشي‬ ‫ٓشح‬
‫االٓش‬ ‫ثٌزبثخ‬ ‫اعزٔشسٗب‬ ‫ٝارا‬exitٍ‫ا‬ ٖٓ ‫ٗخشط‬ ‫كغٞف‬bashٍ‫ا‬ ًُ‫ا‬login shell
ٍ‫ا‬ ‫عٍٔغ‬ ٕ‫ا‬ ‫ٗغذ‬ ّ‫ػب‬ ٌَ‫ثش‬ ‫اٌٍُِ٘ظ‬ ً‫ٝك‬initialization filesًِ‫ػ‬ ‫رؾزٞي‬“rc”
‫كٜ٘بى‬.vimrcٍ‫ا‬ ٍَ‫رشـ‬ ٖ‫ػ‬ ‫أُغئُٞخ‬vimٝ‫ٛ٘بى‬rc0, rc1ٍ‫ا‬ ٖ‫ػ‬ ‫أُغئُٞخ‬runlevel
initialization‫ٌٛزا‬
THE JOB OF THE SHELL
َُ ‫اُلؼٍِخ‬ ‫اُٞظٍلخ‬ ‫ٓؼشكخ‬ ‫اسدٗب‬ ‫ارا‬shellٍ‫ا‬ ٕ‫ا‬ ‫كغ٘غذ‬shellّٞ‫ٌو‬: ً‫ثبالر‬
COMMAND INTERPRETER
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ؽٍش‬shellٍ‫ا‬ ‫ثزشعٔخ‬commandٍ‫ا‬ ً‫ك‬ ٚ٘‫ػ‬ ‫اُجؾش‬ ‫ؽشٌن‬ ٖ‫ػ‬PATH،ٚ‫ث‬ ‫اُخبص‬
: ‫كٔضال‬
‫اع‬ ‫ػ٘ذ‬‫االٓش‬ ّ‫زخذا‬cdٍ‫ا‬ ٕ‫كب‬command interpreterٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ِْ‫ٌؼ‬commandٞٛbuilt-
in commandًُ‫ا‬ ‫ُِزٛبة‬ ‫ٌؾزبط‬ ‫كال‬Pathٙ‫ثز٘لٍز‬ ّٞ‫ٌو‬ ‫ًٍق‬ ‫ُٔؼشكخ‬ ٚ‫ث‬ ‫اُخبص‬
‫االٓش‬ ّ‫اعزخذا‬ ‫ػ٘ذ‬ ٌُٖٝmv‫ٍُظ‬ ٜٞ‫ك‬built-in commandٍ‫ا‬ ًِ‫ػ‬ ‫ٌغت‬ ‫ُزُي‬shell‫ٓؼشكخ‬
ٍ‫ا‬ ‫ٛزا‬ ً٘‫ٓؼ‬command٘‫ر‬ ‫ٌغزطٍغ‬ ًٌُٙ‫لٍز‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 43
ٍ‫ا‬ ّٞ‫ٌٝو‬shellٍ‫ا‬ ‫ثزشعٔخ‬command‫خبؽئ‬ ّ‫ا‬ ‫طؾٍؼ‬ ٞٛ َٛ ‫ُٔؼشكخ‬
ALLOW S FOR VARIABLES TO BE SET
ٍ‫ا‬ ‫ٌغٔؼ‬shellٌَُ ‫ؼب‬ٌ‫ا‬userٍ‫ا‬ َٔ‫ثؼ‬variablesًِ‫ػ‬ ٌَ‫اُزؼذ‬ َ‫ٓض‬ ‫ػٍِٜب‬ ٌَ‫ٝاُزؼذ‬ ٚ‫ث‬ ‫اُخبطخ‬
ٍ‫ا‬HISTFILESIZEٍ‫ا‬ ٝ‫ا‬PATHٍ‫ا‬ ٝ‫ا‬HOSTNAME
I/O REDIRECTION
‫ثؼ‬ ‫ٌغٔؼ‬ ‫ًٔب‬َٔredirectionَُinputٍ‫ٝا‬Outputٍ‫ٝا‬errors
PIPELINES
ٍ‫ا‬ ْٜ‫ٌٝل‬shellٍ‫ا‬ ‫ؼب‬ٌ‫ا‬pipe line
CUSTOMISING YOUR ENVIRONMENT
ٍ‫ا‬ ‫ٌغٔؼ‬ ‫ًٔب‬shellَُUserٍ‫ا‬ ً‫ك‬ ٌْ‫ثبُزؾ‬environmentً‫ك‬ ٌْ‫اُزؾ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ٚ‫ث‬ ٚ‫اُخبط‬
ٍ‫ا‬variablesٍ‫ٝا‬running scriptsٍ‫ا‬ ٌَ‫ٝش‬prompt‫ٝؿٍشٛب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 44
CHAPTER 3. REGULAR
EXPRESSIONS
INTRODUCTION
ٍ‫ا‬regular expressionٍ‫ا‬ ً‫ك‬ ‫االشٍبء‬ ْٛ‫ا‬ ٖٓscripting
WHAT ARE REGULAR EXPRESSIONS?
ٍ‫ا‬regular expressionًٛpatternٝ‫ا‬ ٍُٞ‫ٓذ‬ ‫ُٜب‬characterَ‫ٓض‬ ٍٚ٘‫ٓؼ‬ ‫ٝظٍلخ‬ ُٚ(*)
َٔ‫ثؼ‬ ّٞ‫ٌو‬ ‫اُزي‬matching‫أل‬ٍ‫ا‬ ٖٓ ‫ػذد‬ ‫ي‬charactersٍ‫ا‬ ‫اٗٞاع‬ ‫ثؼغ‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ٝع٘زؾذس‬ ،
pattern
THE FULLSTOP (PERIOD) ”.”
ٍ‫ا‬fullstopً٘‫رؼ‬match any character
‫االٓش‬ ّ‫ثبعزخذا‬ ‫ٓضال‬ ‫هٔ٘ب‬ ‫كبرا‬sed‫اي‬ ٖ‫ػ‬ ‫ُِجؾش‬pattern‫ثـ‬ ‫ٌجذأ‬ ٌَ‫ش‬ ٝ‫ا‬“l”ْ‫ص‬“i”ْ‫ص‬“n”ْ‫ص‬
“u”ٌَ‫ثزجذ‬ ّٞ‫ٌو‬ ْ‫ص‬“l”ًُ‫ا‬“L”ٍ‫ٝا‬“i”ًُ‫ا‬“I”ٍ‫ٝا‬“n”ًُ‫ا‬“N”ٍ‫ٝا‬“u”ًُ‫ا‬“U”ّٞ‫ٌو‬ ْ‫ص‬
ٍ‫ا‬ ٌَ‫ثزجذ‬patternًُ‫اُزب‬‫كوؾ‬ًُ‫ا‬“X”‫االٓش‬ ّ‫كغ٘غزخذ‬
sed 's/Linu./LINUX/g' fullstop_test
ٍ‫ا‬ ‫ٝٛزا‬commandً٘‫ٌؼ‬
s (search for) / Linu. / (replace with) LINUX / g (globally)
<filename to search>
---------------^-------^----------------------^-------------^---
---------------------
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 45
ٕ‫ا‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٝالؽع‬“linu”ٍ‫ا‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬ ‫ؽٍش‬ ‫اعزجذاُٜب‬ ْ‫ٌز‬ ُْٝ ‫رزـٍش‬ ُْpattern
‫ثـ‬ ‫ٓزجٞػب‬character‫رطجٍن‬ ْ‫ٌز‬ ِٖ‫ك‬ ‫ٝاال‬ ‫اُششؽ‬ ٍِٚ‫ػ‬ ‫ٌطجن‬ ً‫ؽز‬ ‫اخش‬“sed”ٍ‫ا‬ ‫ٛزا‬ ًِ‫ػ‬
pattern
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔsedٍ‫ا‬ ‫ٓغ‬pipeًُ‫اُزب‬ ٍ‫ثبُٔضب‬ ‫ًٔب‬‫ؽٍش‬ ،“nl”ً٘‫رؼ‬number the lines
in the file
sed 's/Linu./LINUX/g' fullstop_test | nl
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 46
LET'S EXPLORE "SED" SYNTAX
ٍ‫ا‬ ٖ‫ػ‬ ‫هٍِال‬ ‫ُ٘زؾذس‬sed،ٖ‫ػ‬ ‫ثبُجؾش‬ ّٞ‫ٌو‬ ٜٞ‫ك‬patternٍٖ‫ٓؼ‬‫عطش‬ ‫عطش‬، ‫ثآخش‬ ُٚ‫ٝاعزجذا‬
ٝsedً٘‫ٌؼ‬stream editorٍ‫ٝا‬ ،streamٍ‫ا‬ ٖٓ ً‫ٌؤر‬fileٍ‫ا‬ ٖ‫ػ‬ ٍٚ‫ك‬ ‫اُجؾش‬ ‫أُشاد‬pattern
ٍٝ‫ا‬formٍ‫ا‬ ‫ُٜزا‬ ‫اُؼبٓخ‬commandًٛ
sed „[command] / pattern / [replace sequence] / [modifier]‟
[command]
sed 's/Linu./LINUX/g' fullstop_test
ٝsed‫ٌزجؼٜب‬commandٍ‫ا‬ ‫ٌٞػؼ‬ ‫اخش‬action، ِٚٔ‫ػ‬ ‫أُشاد‬ً‫ك‬ ‫ٝٛ٘ب‬ٍ‫ا‬ ‫ٛزا‬ ٕ‫كب‬ ‫ٓضبُ٘ب‬
commandٞٛ„s‟ً٘‫ٌٝؼ‬search
ٍ‫ا‬ ٙ‫ثؼذ‬ ً‫ٌؤر‬ ْ‫ص‬patternٍٖ‫ػالٓز‬ ٍٖ‫ث‬ ٚ‫ؼؼ‬ٗٝ ٚ٘‫ػ‬ ‫اُجؾش‬ ‫أُشاد‬“/”ٞٛٝlinu.‫ٓضبُ٘ب‬ ً‫ك‬
ٍ‫ا‬ ٚ‫ٌٝجزؼ‬replaced sequenceٍ‫ا‬ ٞٛٝpatternٌْ‫اُوذ‬ َ‫ٓؾ‬ َ‫عٍؾ‬ ‫اُزي‬ ‫اُغذٌذ‬‫ؼب‬ٌ‫ا‬ ‫ٌٝٞػغ‬
ٍٖ‫ػالٓز‬ ٍٖ‫ث‬“/”ٞٛٝ“LINUX”‫ٓضبُ٘ب‬ ً‫ك‬
ْ‫ص‬ٍ‫ا‬ ً‫ٌؤر‬modifierٞٛٝ“g”‫ٛزا‬ ‫ٓضبُ٘ب‬ ً‫ك‬ً٘‫ٌٝؼ‬globallyٍ‫ا‬ ‫ٌخجش‬ ٞٛٝ،sedَٔ‫ثؼ‬ ّٞ‫ٌو‬ ٕ‫ا‬
ٍ‫ا‬ ‫ٛزا‬replaceٍ‫ا‬ ًِ‫ػ‬fileٚ‫ٗزٍغ‬ ٍٝ‫ا‬ ‫ػ٘ذ‬ ‫ٌزٞهق‬ ‫ٝال‬ ًِٚ
ٍٝ‫ا‬ ٍ‫ٗغزجذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬matched patternْ‫اُشه‬ ‫ؼغ‬٘‫ك‬ ‫كوؾ‬“1”ٖٓ ‫ثذال‬“g”
ًٗ‫صب‬ ٍ‫ٗغزجذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬matched patternْ‫اُشه‬ ‫ؼغ‬٘‫ك‬ ‫كوؾ‬“2”ٖٓ ‫ثذال‬“g”
ٍ‫ا‬ ‫اُٜ٘بٌخ‬ ً‫ك‬ ً‫ٌؤر‬ ْ‫ص‬fileٍ‫ا‬ ٖ‫ػ‬ ِٚ‫ثذاخ‬ ‫اُجؾش‬ ‫أُشاد‬patterns
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 47
sed „/hi/p‟ myfirstscript
‫ؼغ‬ٗ ٕ‫ا‬ ٌٌٖٔ“p”ٍ‫ثذ‬“g”َٔ‫ثؼ‬ ّٞ‫ٌو‬ ًٌُprintَُMatched line
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 48
‫ؼغ‬ٗ ٕ‫ا‬ ٌٌٖٔٝ“d”َٔ‫ثؼ‬ ّٞ‫ٌو‬ ًٌُdeleteٍ‫ا‬ ٌَُlinesًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬“hi”
SQUARE BRACKETS ( [ ] ), THE CARET ( ^ ) AND THE DOLLAR ( $ )
ٍ‫ا‬square brackets ([abc])َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٚٗ‫ا‬ ً٘‫رؼ‬matchٍcharacterٍٖ‫ث‬ ٖٓ ‫ٝاؽذ‬
range of charactersٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬
ٍ‫ا‬caret (^hmed)َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٚٗ‫ا‬ ً٘‫رؼ‬matchٍ‫ا‬ ‫عٍٔغ‬lines‫ر‬ ً‫اُز‬‫ثؤي‬ ‫جذأ‬character
‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓٞعٞد‬
ٍ‫ا‬Dollar (ahme$)َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٚٗ‫ا‬ ً٘‫رؼ‬matchٍ‫ا‬ ‫عٍٔغ‬lines‫ر‬ ً‫اُز‬‫ثؤي‬ ًٜ‫٘ز‬character
‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓٞعٞد‬
sed „/^[ahl]/p‟ myfirstscript
ّ‫اعزخذا‬ ٌٌٖٔsedٍ‫ا‬ ‫ٓغ‬“^”َٔ‫ػ‬ ً‫ك‬invert selection‫ظٍـخ‬ُ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬“^/^[ahl]”
sed '/^[^ahl]/p‟ myfirstscript
ٍ‫ا‬ ‫ٛزا‬ ٕ‫كب‬ ‫ُزُي‬command‫اي‬ ‫اؽجغ‬ ً٘‫ٌؼ‬line‫ثؤي‬ ‫ٌجذأ‬character‫ؿٍش‬a,h,l
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 49
sed '/^[^ahl]/d‟ myfirstscript
ٍ‫ا‬ ‫عٍٔغ‬ ‫آغؼ‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬lines‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓٞعٞد‬ ‫ؿٍش‬ ‫ؽشف‬ ‫ثبي‬ ‫رجذأ‬ ً‫اُز‬
‫ًٝٔب‬ٍ‫ا‬ ً‫ك‬ ٍ‫اُؾب‬ ٞٛcaret (^)ٍ‫ا‬ ًِ‫ػ‬ ‫ؼب‬ٌ‫ا‬ ‫ٌغشي‬dollar ($)‫ث‬ ‫رٞػغ‬ ‫ٌُٜٝ٘ب‬ٍ‫ا‬ ‫ؼذ‬
brackets
sed '/[it]$/!d' myfirstscript
ٍ‫ا‬ ‫ٛزا‬ ً٘‫ٝٓؼ‬commandٍ‫ا‬ ًَ ‫ثٔغؼ‬ ّٞ‫رو‬ ‫اٗال‬linesٍ‫ثب‬ ًٜ‫ر٘ز‬ ً‫اُز‬“i”ٝ‫ا‬“t”‫ٝآغؼ‬
ً‫اُجبه‬
ٍ‫ا‬ ٕ‫ا‬ ‫ظٞسح‬ُ‫ا‬ ٙ‫ٛز‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬commandٍ‫ا‬ ًَ ‫ثٔغؼ‬ ّ‫هب‬ ٍٝ‫اال‬linesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬
file: myfirstscript‫ال‬ ‫ٗزٍغخ‬ ‫اي‬ ٚ٘‫ػ‬ ‫ٌظٜش‬ ٍُْ‫ا‬ ٕfile : myfirstscript‫اي‬ ٚ‫ث‬ ‫ٍُظ‬Line
ٍ‫ثب‬ ًٜ‫ٌ٘ز‬“a”ٝ‫ا‬“h”ٝ‫ا‬“l”ٍ‫ا‬ ًَ ‫ثٔغؼ‬ ّ‫كوب‬lines
ٍ‫ا‬ ً‫ك‬ ‫ثٍ٘ٔب‬commandٍ‫ا‬ ّ‫هب‬ ًٗ‫اُضب‬sedٍ‫ثب‬ ‫ثبالؽزلبظ‬lineٍ‫ثب‬ ًٜ‫ٌ٘ز‬ ‫اُزي‬“i”ً‫ثبه‬ ‫ٝٓغؼ‬
ٍ‫ا‬lines‫اُضبُش‬ ٍ‫أُضب‬ ً‫ك‬ ِٚ‫ٝٓض‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 50
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔ ‫ًٔب‬“^”ٍ‫ا‬ ‫ٓغ‬“$”‫ػ‬ ‫ُِذالُخ‬‫اُلبسؽ‬ ‫اُغطش‬ ًِ
sed „/^$/d‟ myfirstscript
ٍ‫ا‬ ‫ِٝٓخض‬expressions: ًٛ ‫اعزخذٓ٘بٛب‬ ً‫اُز‬
. any single character
[] a range of characters
^ start of line (when outside [ ])
^ do not (when inside [ ])
$ end of line
^$ empty line
* 0 or more of the previous pattern
+ 1 or more of the previous pattern
{n}
{n, }+
{n,m}
USING SED AND PIPES
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 51
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔsedٍ‫ا‬ ‫ٓغ‬pipeٍ‫ا‬ ‫ٗزٍغخ‬ ًِ‫ػ‬ ‫ػٍِٔخ‬ ‫اي‬ ‫اعشاء‬ ً‫ك‬ ‫اُشؿجخ‬ ‫ػ٘ذ‬ ‫ٝرُي‬sed
sed '/^[^ahl]/d' bazaar.txt | sed '/^$/d' | nl
ٍ‫ا‬ ‫دٓظ‬ ٌٌٖٔ ‫اُٞهذ‬ ‫ُٝزٞكٍش‬2 sed commandsٍ‫ا‬ ّ‫اعزخذا‬ ٕٝ‫ثذ‬ ‫ثؼغ‬ ‫ٓغ‬pipeّ‫ٝثبعزخذا‬
sedٍ‫ا‬ ‫ٝػغ‬ ‫ٓغ‬ ‫كوؾ‬ ‫ٝاؽذح‬2 command optionsٍٖ‫اُؼالٓز‬ ٍٖ‫ث‬„ „
sed '/^[^ahl]/d;/^$/d' bazaar.txt | nl
ّ‫اعزخذا‬ ٌٌٖٔٝform‫اخشي‬‫اُ٘زٍغخ‬ ‫ٗلظ‬ ً‫رؼط‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 52
cat myfirstscript | sed '/^[^ahl]/d;/^$/d'
THE SPLAT (ASTERISK) ) * (
ٍ‫ا‬asteriskّٞ‫ثٍو‬َٔ‫ثؼ‬matchingَُpatern‫أُٞعٞد‬‫هجِٜب‬ًِٚ‫ع‬ٍ‫ا‬ ‫ٛزا‬ ٕ‫ًب‬ ‫ٞاء‬pattern
‫ال‬ ّ‫ا‬ ‫ٌٓشس‬
sed '/ahm*/p' splatscript
grep “a*” splatscript
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 53
ٕ‫كب‬ ‫ظٞسح‬ُ‫ا‬ ٙ‫ٛز‬ ًٛٝgetٍ‫ا‬ ‫ٌؼشع‬patternٍ‫ا‬ ٕ‫ًب‬ ُٞ ً‫ؽز‬characterَُ ‫اُغبثن‬“*”‫ؿٍش‬
‫ك‬ ‫ًٔب‬ ‫ٓٞعٞد‬ٍٝ‫اال‬ ‫اُغطش‬ ً1999
THE PLUS OPERATOR) + (
ٍ‫ا‬plusَٔ‫ثؼ‬ ّٞ‫ثٍو‬matchingَُpaternٍ‫ا‬ ‫ٛزا‬ ٌٌٕٞ ٕ‫ا‬ ‫ثششؽ‬ ‫هجِٜب‬ ‫أُٞعٞد‬pattern
ًِٚ ‫ٓٞعٞد‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 54
MATCHING A SPECIFIED NUMBER OF THE PATTERN USING THE CURLY
BRACKETS}{
‫رٌشاس‬ ٌٌٖٔ ٚٗ‫ا‬ ٕ‫اُؼ٘ٞا‬ ‫ٛزا‬ ً٘‫ٝٓؼ‬pattern‫ُؼ‬ ٍٖ‫ٓؼ‬ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫أُشاد‬ ٖٓ ‫ذد‬{}
ٌَ‫اُش‬ ‫كٜزا‬a{4} = aaaa
sed '/19{3}/p' splatscript
‫ٝػغ‬ ‫ٌغت‬ ٌُٖٝ“”ٍ‫ا‬ َ‫هج‬“{“ٍ‫ٝا‬“}”
sed '/19{3}/p' splatscript
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 55
ٝ‫ا‬
grep “19{2}” splatscript
َٔ‫ػ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝmatching‫الي‬3 charactersٍ‫ا‬ ّ‫ك٘غزخذ‬form
grep “<[a-z][a-z][a-z]>” 3character
‫اُؼالٓخ‬ ٙ‫ٝٛز‬(< and >)ًٔ‫رغ‬encapsulationٍ‫ا‬ ‫ػذد‬ ً‫ك‬ ٌْ‫ُِزؾ‬letters
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 56
ٍ‫ا‬ ‫ٛزا‬ ‫ًزبثخ‬ ٌٌٖٔٝcommandٌَ‫اُش‬ ‫ثٜزا‬
grep “<[a-z]{3}>” 3character
A DETOUR - USING A DIFFERENT FIELD SEPARATOR IN SED PATTERN
MATCHING
‫اُج‬ ‫اسدٗب‬ ‫ارا‬ٍ‫ا‬ ‫ٛزا‬ ٖ‫ػ‬ ‫ؾش‬patternٍٖ‫ٓؼ‬ ‫ِٓق‬ ً‫ك‬
/home/hamish/some_where
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬sedٌَ‫اُش‬ ‫ثٜزا‬
sed „//home/hamish/some_where/!d‟ pathscript
ٍ‫ا‬ ٙ‫ٛز‬ ٌُٖٝformٍ‫ا‬ ٙ‫ٛز‬ ‫ًزبثخ‬ ٍَٜ‫ُٝزغ‬ ، ‫ٓب‬ ‫ؽذ‬ ًُ‫ا‬ ‫طؼجخ‬formٍ‫ا‬ ‫عٍٔغ‬ ٍ‫اعزجذا‬ ٌٌٖٔ
“”ٍ‫ا‬ ّ‫آب‬ ‫رٞػغ‬ ً‫اُز‬regular expressions‫ثـ‬“%”ٍ‫ا‬ ‫ثذاٌخ‬ ً‫ك‬ ‫كوؾ‬ ‫ٝاؽذح‬command
ٚ‫ٜٝٗبٌز‬
‫ػالٓخ‬ ٕ‫ا‬ ‫االػزجبس‬ ً‫ك‬ ‫االخز‬ ‫ٓغ‬“%”‫ؼب‬ٌ‫ا‬ ‫ٌغجوٜب‬ ٕ‫ا‬ ‫ٌغت‬“”
ٍ‫ا‬ ‫ػالٓخ‬ ٕ‫ال‬ ‫ٝٛزا‬“%”ٍ‫ا‬ ‫رخجش‬ ّٞ‫رو‬shellٞٛ ‫ثؼذٛب‬ ً‫ٌؤر‬ ‫عٞف‬ ‫ٓب‬ ٕ‫ا‬regular expression
sed „%/home/ahmed%!d‟ pathscript
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 57
USING W ORD ENCAPSULATING CHARACTERS
‫اُؼالٓخ‬ ٙ‫ٛز‬(< >)ًٔ‫رغ‬encapsulationِْٜ‫هج‬ ‫ٌٝٞػغ‬“”ٍ‫ا‬ ْٜ‫ٓؼ‬ َٓ‫ٌزؼب‬ ًٌُshell
ْٜٗ‫ا‬ ًِ‫ػ‬regular expresionsٌَ‫اُش‬ ‫ثٜزا‬ ‫ظجؾٞا‬ٍ‫ك‬(< >)
ٍ‫ا‬ ‫ٝٝظٍلخ‬encapsulationٍ‫ا‬ ‫رـٍِق‬ ًٛpattern‫ثذهخ‬ ٚ‫أُطِٞث‬ ‫اُ٘زٍغخ‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬
‫االٓش‬ ٍٖ‫ث‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫اُلشم‬ ‫الؽع‬ٌٖ
ٍ‫ا‬ ّ‫هب‬ ٍٝ‫اال‬ ‫االٓش‬ ٕ‫ا‬ ‫ؽٍش‬shellٍٝ‫ا‬ ٍ‫ثبعزجذا‬3 charactersًَ ٖٓlineّ‫ثبالسهب‬321ً‫ؽز‬
‫ٛ٘بى‬ ٕ‫ًب‬ ٕ‫ٝا‬Lineٖٓ ‫اًضش‬ ًِ‫ػ‬ ‫ٌؾزٞي‬3 characters
ٍ‫ا‬ ّ‫هب‬ ًٗ‫اُضب‬ ‫االٓش‬ ً‫ك‬ ‫ثٍ٘ٔب‬shellٍ‫ا‬ ٍ‫ثبعزجذا‬linesًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬3 characters‫كوؾ‬
RETURNING FROM DETOUR TO OUR DISCUSSION ON CURLY BRACES…
َٔ‫ػ‬ ٌٌٖٔmatching‫ُـ‬2 “a” characters‫ؽشٌن‬ ٖ‫ػ‬ َ‫االه‬ ًِ‫ػ‬
sed „/a{2,}/!d‟ infinit
‫اُوٞط‬ َ‫داخ‬ ‫ٝػؼ٘ب‬ ‫ٝارا‬{2,4}ً٘‫ٌؼ‬ ‫كٜزا‬matchًٗ‫اد‬ ‫ثؾذ‬2ً‫ظ‬‫اه‬ ‫ٝثؾذ‬4
sed „/a{2,4}/!d‟ infinit
THE TR COMMAND
ً٘‫ٌؼ‬translateّٞ‫ٌو‬ ُٞٛٝ‫ؽب‬ ‫ثزـٍٍش‬ٍ‫ا‬ ٖٓ ‫اُؾشف‬ ‫خ‬capitalٍ‫ا‬ ًُ‫ا‬small
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 58
ٍ‫ا‬ ‫ر٘لٍز‬ ٌٌٖٔٝcommandَٔ‫ٝػ‬ ٌَ‫اُش‬ ‫ثٜزا‬redirectَُoutputًِ‫ػ‬file
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔtr commandٍ‫ا‬ َٔ‫ػ‬ ٍَٜ‫رغ‬ ً‫ك‬reports‫اُزخِض‬ ًِ‫ػ‬ ‫ٌغبػذٗب‬ ‫ؽٍش‬ ،
ٍ‫ا‬ ٖٓspacesٍ‫ٝا‬tabs‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ ٍٚ‫ك‬ ‫ثٌضشح‬ ‫أُٞعٞدح‬option : -sٌ ‫اُزي‬ً‫ك‬ ‫غبػذ‬
ٍ‫ا‬ ‫ػـؾ‬charactersًُ‫ا‬ ٜٚ‫أُزشبث‬character‫كوؾ‬ ‫ٝاؽذ‬
‫االٓش‬ ‫ػشػ٘ب‬ ‫ارا‬ ‫كٔضال‬freeًَ ٍٖ‫ث‬ ‫أُغبكبد‬ ٖٓ ‫اٌُضٍش‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ٚٗ‫ا‬ ‫كغ٘غذ‬column، ‫ٝاخش‬
‫االٓش‬ ّ‫ك٘غزخذ‬ ‫ٓغبكخ‬ ‫ٝعؼِٜب‬ ‫أُغبكبد‬ ٙ‫ٛز‬ ‫ؼـؾ‬ٗ ٕ‫ا‬ ‫اسدٗب‬ ‫كبرا‬
free | tr –s “ ”
ٍ‫ا‬ ٍ‫اعزجذا‬ ٌٌٖٔٝspace‫ثؤي‬characterٚ‫ػـط‬ ‫ٗشٌذ‬ ‫اخش‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 59
THE CUT COMMAND
ٍ‫ا‬command : cutٍ‫ا‬ ٖٓ ٍٖ‫ٓؼ‬ ‫عضء‬ ‫هطغ‬ ً‫ك‬ ّ‫ٌغزخذ‬lineّ‫ثبعزخذا‬delimiter‫ُزؾذٌذ‬
‫اعبعٜب‬ ًِ‫ػ‬ ‫اُوطغ‬ ْ‫عٍز‬ ً‫اُز‬ َ‫اُلٞاط‬
ٍ‫ا‬ ٙ‫ٝٛز‬delimitersٍ‫ا‬ ً‫ك‬ ٙ‫ٓٞعٞد‬shell variablesْ‫ثبع‬IFS (Input Field
Separators)
ٕ‫كب‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬ٍ‫ا‬delimitersٍ‫ا‬ ‫ُذي‬ ‫أُؼشكخ‬cutًٛt = tab, n=new line,
“ ”= new line
free | tr -s ' ' | grep Mem | cut -d" " –f1-3
‫ؽٍش‬–d: delimiter
ٍ‫ٝا‬–f : field no.
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 60
ٍ‫ٝا‬fieldًُ‫ا‬ ْ‫ٌ٘وغ‬ ‫اُغطش‬ ٕ‫ا‬ ً٘‫ثٔؼ‬ ، ‫أُغبكخ‬ ‫ثؼذ‬ ً‫اُز‬ ‫اُؤٍخ‬ ٞٛfields‫ثٍٜ٘ب‬ َ‫ظ‬‫ٌل‬
( ‫ٓغبكبد‬delimiter)
ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٌٖٔٝ“-c”َٔ‫ُؼ‬cutَُcharacters
free | tr -s ' ' | grep Mem | cut -c6-13,15,17
ّ‫رغزخذ‬ ٕ‫ا‬ ‫اسدد‬ ‫ٝارا‬tabٖٓ ‫ثذال‬spaceٍ‫ا‬ ٌُٖٝdelimiterٖ‫ػ‬ ‫ػجبسح‬character‫كوؾ‬ ‫ٝاؽذ‬
ٍ‫ا‬ ‫ٌٗزت‬ ٕ‫ا‬ ٌٌٖٔ ‫ٝال‬tabٌَ‫اُش‬ ‫ثٜزا‬“t”ٍ‫ا‬ ً‫ك‬ ‫ًٔب‬IFS‫ؼـؾ‬ٗ ‫ُزُي‬ ،CTRL+vْ‫ص‬tab
THE PASTE COMMAND
ٍ‫ا‬command : paste‫ٓؾزٌٞبد‬ ‫ثذٓظ‬ ّٞ‫ٌو‬2 files‫ؼغ‬ٌ ‫ثؾٍش‬“tab”ًَ ٍٖ‫ث‬line‫ٝاالخش‬
paste pastescript pasteequal
ّ‫اعزخذا‬ ٌٌٖٔٝdelimitersٍ‫ا‬ ً‫ك‬ ‫ٌؾذس‬ ‫ًٔب‬command: cutٍ‫ا‬ ‫ٛزا‬ ‫ؼغ‬ٌ ‫ٛ٘ب‬ ٌُٖٝ
delimiterٍ‫ا‬ ٖٓ ‫ثذال‬tab
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 61
paste –d”;” pastescript pasteequal
THE UNIQ COMMAND
‫االٓش‬uniq‫ٓززبٍُخ‬ ٌٕٞ‫ر‬ ٕ‫ا‬ ‫ثششؽ‬ ‫أٌُشسح‬ ‫اُغطٞس‬ ‫ثؾزف‬ ّٞ‫ٌو‬
‫ِٓق‬ ‫ٓؾزٌٞبد‬ ‫ثبعزؼشاع‬ ‫هٔ٘ب‬ ‫كبرا‬/etc/passwdٍ‫ا‬ ًٛ ‫ٓب‬ ‫ٓؼشكخ‬ ‫ٝاسدٗب‬shells‫أُغزخذٓخ‬
ٍ‫ا‬ ‫ٗلظ‬ ‫ثٜب‬ ‫أٌُزٞة‬ ‫اُغطٞس‬ ٖٓ ‫اٌُضٍش‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫أُِق‬ ٕ‫ا‬ ‫ك٘غذ‬shells
‫ثبع‬ ّٞ‫ك٘و‬ّ‫زخذا‬uniq‫كوؾ‬ ‫أُخزِق‬ ًِ‫ػ‬ ‫ٝاُؾلبظ‬ ٜٚ‫أُزشبث‬ ‫اُغطٞس‬ ‫ثؾزف‬ ّٞ‫ٗو‬ ًٌُ
cut –d”:” –f7 /etc/passwd | uniq
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 62
‫ٗغذ‬ ‫ٝٛ٘ب‬ٕ‫ا‬uniqٜٚ‫ٝأُزشبث‬ ‫أُززبٍُخ‬ ‫اُغطٞس‬ ًَ ‫ثؾزف‬ ّ‫هب‬‫رظٜش‬ ‫ٓبصاُذ‬ ٌُٖٝ ،shells
َٔ‫ثؼ‬ ّٞ‫ٗو‬ ٕ‫ا‬ َ‫كبُؾ‬ ، ٜٚ‫ٓزشبث‬sortَُfileَٔ‫ثؼ‬ ّٞ‫ٗو‬ ْ‫ص‬ ‫اٝال‬uniq
cut –d”:” –f7 /etc/passwd | sort | uniq
THE SORT COMMAND
ٍ‫ا‬sort commandsٖٓٝ ‫االًجش‬ ًُ‫ا‬ ‫االطـش‬ ٖٓ ‫أُِق‬ ‫ٓؾزٌٞبد‬ ‫ثزشرٍت‬ ّٞ‫ٌو‬“a”ًُ‫ا‬“z”
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 63
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔoption : -o‫االٓش‬ ‫ٓغ‬sortٍ‫ا‬ ‫ػالٓخ‬ ٖٓ ‫ثذال‬redirectionً٘‫ٌؼ‬ ٞٛٝ
output
cut -d: -f7 /etc/passwd |sort -ruo test
ٍ‫ا‬ ‫ثؼغ‬ ٙ‫ٝٛز‬options‫االٓش‬ ‫ٓغ‬ ّ‫رغزخذ‬ ً‫اُز‬sort
Option Action
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 64
-o َٔ‫ثؼ‬ ّٞ‫ٌو‬redirectًِ‫ػ‬fileٖٓ ‫ثذال‬“>”
-u َٔ‫ُؼ‬uniq sort
+t ٍ‫ا‬ ٞٛdelimiterٍ‫ثب‬ ‫اُخبص‬sort
+3 ٍ‫ا‬ ‫ػذد‬fields‫عٍزغبِٜٛب‬ ً‫اُز‬
-n ‫اُؾشٝف‬ ‫ٍُٝظ‬ ّ‫االسهب‬ ‫ؽغت‬ ‫اُغطٞس‬ ‫ُزشرٍت‬
-r ٔ‫ُؼ‬َreverse sort
cut –d”:” –f3,7 /etc/passwd | sort –t: -rn
THE GREP COMMAND
ٍ‫ا‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٌٖٔgrep‫ًـ‬filterَ‫داخ‬ ‫ُِ٘ظش‬ ٝ‫ا‬fileٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ‫ٌغزطٍغ‬ ‫ًٔب‬regular
expression
ٍ‫ا‬ ّ‫اعزخذا‬ ‫اسدٗب‬ ‫ارا‬grepَ‫ثذاخ‬ ‫ُِ٘ظش‬fileٍ‫ا‬ ٙ‫ٛز‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬form
grep “/bin/bash” /etc/passwd
ٍ‫ا‬ ٕ‫ٝال‬patternًِ‫ػ‬ ‫ٌؾزٞي‬ ٚ٘‫ػ‬ ‫ٗجؾش‬ ‫اُزي‬“/”ٍ‫ا‬ ‫ٛزا‬ ‫ثٞػغ‬ ‫كؤ٘ب‬patternٍ‫ػالٓز‬ َ‫داخ‬ٖ
ٍ‫ا‬ ٕ‫ا‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫ٌغت‬ ‫ًٝزُي‬ ، ""grepٖ‫ػ‬ ‫ٌجؾش‬ ٌُٖٝ ‫ًِٔخ‬ ٖ‫ػ‬ ‫ٌجؾش‬ ‫ال‬pattern‫ثـ‬ ‫ٌجذأ‬“/”ْ‫ص‬
“b”‫اُخ‬
ٍ‫ا‬ ‫ثؼغ‬ ‫ٝٛ٘بى‬optionsَُ ‫أُلٍذح‬grep‫كٔضال‬:
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 65
‫اػبكخ‬ ٌٌٖٔoption : -B1ٍ‫ا‬ َ‫هج‬ ‫اُغطٞس‬ ٖٓ ٍٖ‫ٓؼ‬ ‫ػذد‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ًٌُpattern
‫اػبكخ‬ ٌٌٖٔٝ–A1ٍ‫ا‬ ‫ثؼذ‬ ‫ٝاؽذ‬ ‫عطش‬ ‫ُؼشع‬pattern
ّ‫اعزخذا‬ ٌٌٖٔٝ–vَٔ‫ُؼ‬reverseَُpatternٍ‫ا‬ ‫ػذا‬ ‫ٓب‬ ‫اُغطٞس‬ ًَ ‫ٌؼشع‬ ٚٗ‫ا‬ ً٘‫ثٔؼ‬
pattern
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 66
ّ‫اعزخذا‬ ٌٌٖٔٝ–nَٔ‫ُؼ‬lableَُpattern‫اُزي‬ ‫اُغطش‬ ْ‫سه‬ ‫ؼغ‬ٌ(ٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬pattern)
Option Action
-B1 ٍ‫ا‬ ‫ٌؼشع‬patternٍ‫ٝا‬lineٚ‫ٌغجو‬ ‫اُزي‬
-A1 ٍ‫ا‬ ‫ٌؼشع‬patternٍ‫ٝا‬lineٌٍِٚ ‫اُزي‬
-v ٍ‫ا‬ ًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬ ‫ػذا‬ ‫اُغطٞس‬ ًَ ‫ٌؼشع‬pattern
-n ٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬ ‫اُغطش‬ ْ‫سه‬ ‫ؼغ‬ٌpatternٚ‫ثغبٗج‬
‫ًِٔخ‬ ‫ٗغزخشط‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ahmedٍ‫ا‬ ‫عٍٔغ‬ ٖٓfilesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬working directory
ٍ‫ا‬ ْ‫سه‬ ‫ٝٓؼشكخ‬Lineٍ‫ا‬ ‫ٛزا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬patternٍ‫ا‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬form‫اُزبٍُخ‬:
ٍ‫ا‬ ْ‫اع‬ ٍ‫ثبعزجذا‬ ‫هٔ٘ب‬ ‫ؽٍش‬file‫ثـ‬“*”ٍ‫ا‬ ًَ ً‫ك‬ ‫ٌجؾش‬ ً‫ؽز‬filesٍ‫ا‬ ْ‫اع‬ ‫ثؼشع‬ ّ‫هب‬ ‫ٝٛ٘ب‬ ،
fileٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬Patternْ‫ٝسه‬ٍ‫ا‬ ً‫ك‬ ‫اُغطش‬file
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 67
ّ‫اعزخذا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬grep‫ًـ‬filter
ُ‫ر‬ ٌٍٕٞ‫ك‬‫ي‬ٍ‫ا‬ ّ‫اعزخذا‬ ‫ؽبُخ‬ ً‫ك‬grepٍ‫ا‬ ‫ٓغ‬pipeٍ‫ا‬ َ‫ٌذخ‬ ‫ؽٍش‬outputٍ‫ا‬ ًِ‫ػ‬ ‫ًبٓال‬grep
َٔ‫ثؼ‬ ّٞ‫كٍو‬filtrationٍ‫ا‬ ‫ٝاعزخشاط‬ ُٚdata‫أُطِٞثخ‬
ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ ‫ثٞػٞػ‬ ‫رُي‬ ‫ٌٝظٜش‬logs: ًُ‫اُزب‬ ٍ‫أُضب‬ ً‫ك‬ ‫ًٔب‬
tail -10 /var/log/messages |grep '19:[0-5][0-9]:[0-5][0-9]‟
‫كٜ٘ب‬ٍ‫ا‬ ‫اخزٗب‬outputٖٓtailٞٛٝ10ًِ‫ػ‬ ٙ‫ٝادخِ٘ب‬ ‫عطٞس‬grepَٔ‫ثؼ‬ ّ‫كوب‬filter‫ٝاخشط‬ ُٚ4
‫كوؾ‬ ‫عطٞس‬
GREP, EGREP AND FGREP
‫ٛ٘بى‬3ٍ‫ا‬ ٖٓ ‫اٗٞاع‬grep
Type Function
Grep ٍ‫ا‬ ٞٛstandard grep
Egrep ‫ث‬ ّ‫ٌغزخذ‬ٍ‫ا‬ ‫ٓغ‬ ‫ٌضشح‬extended regular expressions‫ثطئ‬ ٌُٚ٘ٝ
Fgrep ٍ‫ا‬ ‫ٓغ‬ ّ‫ٌغزخذ‬ ‫ال‬regular expressions‫عشٌغ‬ ٜٞ‫ك‬ ‫ُزُي‬
ٍ‫ٝا‬sedٍ‫ا‬ ٖٓ ‫هٍِال‬ ‫اعشع‬grep
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 68
CHAPTER 4. PRACTICALLY SHELL
SCRIPTING
SECTION TECHNIQUES TO USE WHEN WRITING, SAVING AND
EXECUTING SHELL SCRIPTS
‫اي‬ َٔ‫ػ‬ ‫ثذاٌخ‬ ً‫ك‬ ‫اٗ٘ب‬ ًِ‫ػ‬ ‫ٗزلن‬ ‫دػٞٗب‬scriptٍ‫ا‬ ‫ثزطجٍن‬ ‫ٗجذأ‬ ٕ‫ا‬ ‫ٌغت‬commandsٍ‫ا‬ ًِ‫ػ‬
command lineٍ‫ا‬ ًُ‫ا‬ ‫ث٘وِٜب‬ ّٞ‫ٗو‬ ‫عٍذ‬ ٌَ‫ثش‬ ‫ػِٜٔب‬ ٖٓ ‫اُزؤًذ‬ ‫ٝثؼذ‬script file
َٔ‫ػ‬ ‫اسدٗب‬ ‫كبرا‬scriptٍ‫ا‬ ‫ُٔؼشكخ‬ ّٞ‫ٌو‬shellsٍ‫ا‬ ً‫ك‬ ‫أُغزخذٓخ‬systemٍ‫ا‬ ‫ثزطجٍن‬ ‫اٝال‬ ّٞ‫ك٘و‬
commandًِ‫ػ‬ٍ‫ا‬terminal
cat –d: -f7 /etc/passwd | sort –u
ٍ‫ا‬ ‫ٛزا‬ ‫ثٞػغ‬ ‫رُي‬ ‫ثؼذ‬ ّٞ‫ٗو‬ ْ‫ص‬command‫ٓضال‬ ٍٚٔ‫ٝٗغ‬ ‫ِٓق‬ ً‫ك‬script.sh
ٍ‫ا‬ ٖ‫ػ‬ ‫ٗؼِٜٔب‬ ٕ‫ا‬ ‫ٌغت‬ ‫اُوٞاػذ‬ ‫ثؼغ‬ ‫ٛ٘بى‬ ٌُٖٝscriptٕ‫اال‬ ‫ػٍِٜب‬ ‫ٗزؼشف‬ ‫ٝعٞف‬
DETOUR: FILE EXTENSION LABELS
1-ٍ‫ثب‬ ْ‫ٌٜز‬ ‫ال‬ ‫اٌٍُِ٘ظ‬extensions
‫ال‬ ٚ‫ٌؼشك‬ ‫ٝال‬ٕ‫ا‬ ٍٚ‫ك‬ ‫االعبعٍخ‬ ‫اُوبػذح‬ ٕeverything is a fileْ‫اع‬ ًُ‫ا‬ ‫االٓزذاد‬ ‫ؼٍق‬ٗ ‫هذ‬ ‫ٌُٝ٘٘ب‬
ٍ‫ا‬fileٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ٖ‫ٗؾ‬ ‫ٗززًش‬ ًٌُfileٞٛscript‫اُخ‬ ً‫ظ‬ٗ ‫ِٓق‬ ٝ‫ا‬
script
script.sh
2-ٍ‫ا‬scriptٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬executable‫االٓش‬ ‫ثز٘لٍز‬ ‫ٝرُي‬
chmod +x script.sh
3-ٍ‫ا‬ ‫ُز٘لٍز‬script‫ؼغ‬ٗ ٕ‫ا‬ ‫ٌغت‬ٚٓ‫آب‬“./”ٝ‫ا‬“sh”ٍ‫ا‬ ‫ٌؼشف‬ ً‫ؽز‬shellٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬fileٞٛ
script
./script
sh script
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 69
COMMENTS IN SCRIPTS
ٍ‫ا‬ ً‫ك‬ ٍٖ‫ٓؼ‬ ‫عطش‬ ‫ٝظٍلخ‬ ‫ٗششػ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬scriptٍ‫ا‬ َ‫ثذاخ‬ ٚ‫ٌٗزج‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬script‫اػزجبس‬ ًِ‫ػ‬
ٚٗ‫ا‬commentٍ‫ا‬ ّٞ‫ٌو‬ ‫ٝال‬shell‫ؼغ‬ٗ ‫رُي‬ َٔ‫ُٝؼ‬ ، ٙ‫ثز٘لٍز‬(#)ٍ‫ا‬ ّ‫آب‬line‫ًـ‬ ٙ‫اػزجبس‬ ‫أُشاد‬
comment
#A script to produce the unique shells using the /etc/passwd
file
cut -d: -f7 /etc/passwd |sort -u
VARIABLES
ٍ‫ا‬variables‫أُؼِٞٓبد‬ ٌٖ‫ُزخض‬ ٚ‫ٓئهز‬ ‫ؽشٌوخ‬ ًٍٛ‫ا‬ ً‫ك‬ ‫ٓغبؽخ‬ ‫ؽغض‬ ْ‫ٌٝز‬memoryْ‫ثبع‬
ٍ‫ا‬variable nameٍ‫ا‬ ‫كٍٜب‬ ‫ٌٝٞػغ‬variable
NAME=”ahmed”
ٍ‫ا‬ ‫ؽٍش‬variable nameٞٛNAMEٍ‫ٝا‬ ،variableٞٛahmed
ٍ‫ا‬ ‫ٓغ‬ َٓ‫ُِزؼب‬ ٍٖٜٔٓ ٍٖ‫هبػذر‬ ‫ٝٛ٘بى‬variables
1-ٍ‫ا‬variableٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬capital‫ًِٔخ‬ ‫ٗشي‬ ‫ًٔب‬NAME
2-ٍ‫ا‬ ٍٖ‫ث‬ ‫ٓغبكبد‬ ‫اي‬ ‫رٞعذ‬ ‫ال‬variable name‫ٝػالٓخ‬“=”ٍ‫ا‬ ٍٖ‫ث‬ ‫ٝال‬“”ٍ‫ٝا‬value
ٛ ‫ٓغ‬ َٓ‫ُِٝزؼب‬ٍ‫ا‬ ‫زا‬variableٍ‫ثب‬ ‫ٝاالعزلبدح‬value‫ػالٓخ‬ ٚٓ‫آب‬ ‫ؼغ‬ٗ ٕ‫ا‬ ‫ٌغت‬“$”
echo "$NAME"
ٍ‫ا‬ ‫ًزبثخ‬ ٍ‫اشٌب‬ ‫اثغؾ‬ ٙ‫ٝٛز‬script
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 70
SHEBANG OR HASHPLING!#
ٍ‫ا‬ ّ‫ٌغزخذ‬ ‫ٓ٘ب‬ ‫اٌُضٍش‬bashٚٓ‫ٌغزخذ‬ ‫ال‬ ‫هذ‬ ‫اُجؼغ‬ ‫ٛ٘بى‬ ٌُٖ‫ثٌزبثخ‬ ‫هٔذ‬ ‫ٝارا‬ ،scriptٍٖ‫ٓؼ‬
ٍ‫ا‬ ًِ‫ػ‬Bash‫ػ‬ ‫طؾٍؼ‬ ٌَ‫ثش‬ َٔ‫ٌؼ‬ ‫ال‬ ‫كوذ‬ٍ‫ا‬ ٖٓ ‫اخش‬ ‫ٗٞع‬ ًِshells
ٍ‫ا‬ ‫اعجبس‬ ‫كٍغت‬ ‫ُزُي‬scriptً‫ك‬ َٔ‫ٌؼ‬ ٕ‫ا‬shellٍٚ٘‫ٓؼ‬: ٍٖ‫اُطشٌوز‬ ٖٓ ‫ٝاؽذ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬
1-ٍ‫ا‬ ٍَ‫رشـ‬script‫االٓش‬ ّ‫ثبعزخذا‬sh
sh script.sh
2-ٍ‫ا‬ ‫اػبكخ‬shebang
ٍ‫ٝا‬shebangٍ‫ا‬ ٖٓ ‫ٓضٌظ‬ ٞٛ“# : hash”ٍ‫ٝا‬“! : bang”ٍ‫ا‬ َ‫ثذاخ‬ ‫رٞػغ‬scriptٚ‫ثذاٌز‬ ً‫ك‬
ٍُِ‫ا‬ ‫ٗٞع‬ ًِ‫ػ‬ ‫ذالُخ‬interpreter‫ٓغ‬ َٓ‫عٍزؼب‬ ‫اُزي‬ٍ‫ا‬script
#!/bin/bash
EXIT
ٍ‫ا‬ ‫اُطشٌوخ‬ ‫ػشك٘ب‬ ٕ‫ا‬ ‫ثؼذ‬standardٍ‫ا‬ ‫ُجذاٌخ‬scriptًٜ٘ٗ ٕ‫ا‬ ‫ٌغت‬ ً‫اُز‬ ‫اُطشٌوخ‬ ًِ‫ػ‬ ‫ع٘زؼشف‬
ٍ‫ا‬ ‫ثٜب‬scriptٍ‫ثب‬ ‫ٌؼشف‬ ‫ٓب‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ending status
ٍٚ٘‫ٓؼ‬ ‫هٍٔخ‬ ‫رخشط‬ ‫ثشٗبٓظ‬ ‫اي‬ َٔ‫ػ‬ ‫اٗزٜبء‬ ‫كؼوت‬ًٜ‫اٗز‬ َٛ( ‫اُجشٗبٓظ‬ ‫ٛزا‬ َٔ‫ػ‬ ًٜ‫اٗز‬ ‫ًٍق‬ ‫رٞػؼ‬
ٍ‫ا‬ ًٔ‫رغ‬ ‫اُؤٍخ‬ ٙ‫ٝٛز‬ )‫اخطبء‬ ٚ‫ث‬ ّ‫ا‬ ‫طؾٍؼ‬ ٌَ‫ثش‬exit value
‫ٌؾذس‬ ُْٝ ‫طؾٍؼ‬ ٌَ‫ثش‬ ‫اُجشٗبٓظ‬ ًٜ‫اٗز‬ ‫كإرا‬errorsٍ‫ا‬ ٌٕٞ‫كز‬exit value =0
ٍ‫ا‬ ‫ثؼغ‬ ‫ٝؽذس‬ ‫طؾٍؼ‬ ٌَ‫ثش‬ ‫اُجشٗبٓظ‬ ًٜ‫ٌ٘ز‬ ُْ ‫ارا‬ ‫آب‬errorsٍ‫ا‬ ٌٕٞ‫كز‬exit value = 1-255
Exit Value Exit Status
0 (Zero) Success
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 71
Non-zero Failure
2 Incorrect usage
127 Command Not found
126 Not an executable my be the script is not executable
ٍ‫ا‬ ‫ٓؼشكخ‬ ‫ٌغت‬ ‫ُزُي‬exit statusًَ ‫ٜٗبٌخ‬ ً‫ك‬script‫ٜٗبٌخ‬ ً‫ك‬ ‫اُغطش‬ ‫ٛزا‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬
ٍ‫ا‬script
echo $?
NULL AND UNSET VARIABLES
ٍ‫ا‬ ‫ثؼغ‬ ‫ٛ٘بى‬variablesَ‫ٓض‬ ‫ػٜ٘ب‬ ‫ٗزؾذس‬ ٕ‫ا‬ ‫ٌغت‬ ً‫اُز‬ ‫اُٜبٓخ‬nullٝunset
ٍ‫ا‬ ٕ‫ا‬ ً٘‫ٝٓؼ‬variable nullٍ‫ا‬ ٕ‫ا‬ ٞٛvariable‫ٓٞعٞد‬‫ح‬(set)ُٜ ‫ٍُظ‬ ٌُٖٝ‫هٍٔخ‬ ‫ب‬
(null)ًُ‫ًبُزب‬
NAME=””
NAME=
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 72
ٍ‫ا‬ ٕ‫كب‬ ‫ٝٛ٘ب‬Variable=NAMEٚ‫هٍٔز‬ ٌُٖٝ ‫ٓٞعٞد‬null‫ٝالؽع‬ٍ‫ا‬ ٍٖ‫ث‬ ‫ٓغبكخ‬ ‫ٝعٞد‬ ّ‫ػذ‬“”
ٍ‫ا‬ ‫ٛزا‬ ٖ‫ػ‬ ‫ٌٝ٘زظ‬variable‫كبسؽ‬ ‫عطش‬
‫ٌغبٝي‬ ‫ال‬ ‫ٛزا‬ ٌُٖٝ
NAME=” ”
ٍ‫ا‬ ٍٖ‫ث‬ ‫أُغبكخ‬ ٕ‫ال‬“ ”ٖ‫ػ‬ ‫رؼجش‬value‫رغبٝي‬ ًٜ‫ك‬ ‫ُزُي‬
NAME=”ahmed”
ٍ‫ا‬ ‫آب‬Unsetٍ‫ا‬ ‫ثٔغؼ‬ ّٞ‫رو‬ ًٜ‫ك‬valueَُ ٚ‫ظ‬‫ظ‬‫أُخ‬variableًٌِ ‫ًٔب‬
unset NAME
ٍ‫ا‬ ٍٖ‫ث‬ ‫ٗلشم‬ ٕ‫ا‬ ‫ٌٝغت‬null valueٍ‫ٝا‬empty valueٍ‫أُضب‬ ‫ٗشي‬ ‫اًضش‬ ‫اُلشم‬ ‫ؼؼ‬‫ٌز‬ ًٌُٝ،
ًُ‫اُزب‬‫اُضالس‬ ٍٖ‫ث‬ ‫اُلشم‬ ‫ٝالؽع‬variables:
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 73
VARIABLE EXPANSION
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ًٍق‬ ٖ‫ػ‬ ‫ع٘زؾذس‬ ‫ٝٛ٘ب‬shellٍ‫ا‬ ‫ثزشعٔخ‬variablesٕ‫ًب‬ ‫كبرا‬ ،variable=NAME‫ُٜٝب‬
value = ahmed
NAME=”ahmed”
ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫ٝهٔذ‬echo‫ُؼشع‬ٍ‫ا‬ ‫هٍٔخ‬Value
echo $NAME
‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ‫اُ٘برظ‬ ٌٍٕٞ‫كغ‬
ٍ‫ا‬ ‫ًزج٘ب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝcommandٌَ‫اُش‬ ‫ثٜزا‬
echo $NAMEX
ٍ‫ا‬ ٕ‫كب‬shellٍ‫ا‬ ٕ‫ا‬ ‫عٍغذ‬NAMEXٍ‫ا‬ ‫خِق‬ ‫ًبِٓخ‬ ‫ٌٓزٞثخ‬$‫ٛ٘بى‬ ٕ‫ا‬ ٖ‫كٍظ‬variable‫اعٜٔب‬
NAMEXٝ ‫ٌغذٛب‬ ِٖ‫ك‬ ‫ػٜ٘ب‬ ‫ٌجؾش‬ ‫ػ٘ذٓب‬ ٌُٖٝ‫اُ٘زٍغخ‬ ٌٕٞ‫عز‬errorًٌِ ‫ًٔب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 74
‫عٍذا‬ ‫اُلشم‬ ‫ٝالؽع‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ًُ‫ا‬ ‫اٗظش‬
ٍ‫ا‬ ٍٖ‫ث‬ ‫ُِزلشٌن‬ ‫ؽشٌوخ‬ َ‫ؼ‬‫ٝاك‬variableٍ‫ا‬ ‫ؼغ‬ٗ ٕ‫ا‬ ًٛ ٌٍِٚ ‫شٍئ‬ ‫ٝاي‬ ٚ‫ٗلغ‬variableٍٖ‫ث‬
curly brackets {}
echo ${NAME}X
ٍ‫ا‬ ْٜ‫ٌل‬ ‫ٝعٞف‬shellٍ‫ا‬ ٕ‫ا‬variablٍ‫ا‬ ٕ‫ٝا‬ ‫االهٞاط‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ًٛX‫ٜٓ٘ب‬ ‫عضء‬ ‫ٍُغذ‬
ENVIRONMENTAL VS SHELL VARIABLES
‫ال‬shell variableٍ‫ا‬ ًٛvariableٍ‫ا‬ ًِ‫ػ‬ ‫رطجن‬ ً‫اُز‬shell‫كوؾ‬ ‫ؽبٍُب‬ ‫ػٍِٜب‬ َٔ‫ٗؼ‬ ً‫اُز‬
ُٖٝ‫اي‬ ًِ‫ػ‬ ‫رطجن‬shell‫ًبٗذ‬ ‫ارا‬ ً‫ؽز‬ ‫ٗلزؾٜب‬ ‫عذٌذح‬shellٍ‫ا‬ َ‫داخ‬ ‫ٓلزٞؽخ‬shellّ‫ثبعزخذا‬
‫االٓش‬Bash
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 75
‫ال‬environment variablesٍ‫ا‬ ًَ ًِ‫ػ‬ ‫رطجن‬shellsً‫ك‬ ‫أُٞعٞدح‬ٍ‫ا‬system‫ٌٝوشأٛب‬
ٍ‫ا‬systemٍ‫ا‬ ‫ػ٘ذ‬login
ٍ‫ا‬ ٍٞ‫اؽ‬ ٕ‫ا‬ ‫اسدد‬ ‫ٝارا‬shell variableًُ‫ا‬environment variable‫االٓش‬ ّ‫ٗغزخذ‬export
export NAME
ARITHMETIC IN THE SHELL
ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫اُؾغبثٍخ‬ ‫اُؼالٓبد‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ع٘زؾذس‬scriptingٍ‫ا‬ ٖ‫ػ‬ ‫ٝع٘زؾذس‬
integer arithmetic
ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫ظؾٍؾخ‬ُ‫ا‬ ‫اُؾغبثٍخ‬ ٍْ‫اُو‬ ‫ٓغ‬ َٓ‫ُِزؼب‬ ‫ؽشم‬ ‫ػذح‬ ‫ٝٛ٘بى‬scripts:
1-ٍ‫ا‬ ‫ٝػغ‬expressionٍٖ‫ٓضدٝع‬ ٍٖ‫هٞع‬ ً‫ك‬ ‫اُؾغبثٍخ‬ ‫أُؼبدُخ‬ ٝ‫ا‬ ً‫اُؾغبث‬$(( ))
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 76
ٍ‫ا‬ ً‫ك‬ ّ‫رغزخذ‬ ً‫اُز‬ ‫اُؾغبثٍخ‬ ‫اُؼالٓبد‬ ‫ثؼغ‬ ٙ‫ٝٛز‬script
Arithmetic operators action
+ ‫اُغٔغ‬ ‫ػالٓخ‬
- ُ‫ا‬ ‫ػالٓخ‬‫طشػ‬
* ‫ؼشة‬ُ‫ا‬ ‫ػالٓخ‬
/ ‫اُوغٔخ‬ ‫ػالٓخ‬
% ‫أُئٌٞخ‬ ‫اُ٘غجخ‬ ‫ػالٓخ‬
ٍ‫ا‬ ‫ٌُزبثخ‬ ‫اُطشم‬ ٙ‫ٛز‬ ًَ ٕ‫ا‬ ‫ٝالؽع‬expression‫اُ٘زٍغخ‬ ‫ٗلظ‬ ًُ‫ا‬ ‫رئدي‬
((J=I+5))
J=$((I+5))
J=$(( I + 5))
$(( J = I + 5))
ٚ٘‫ػ‬ ‫ٌ٘زظ‬ ‫عٞف‬ "=" ‫ػالٓخ‬ ‫ٝثؼذ‬ َ‫هج‬ ‫ٓغبكبد‬ ‫ٝعٞد‬ ٌُٖٝerror
J = $(( I + 5 ))
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 77
CHAPTER 5. USING QUOTATION
MARKS
INTRODUCTION
ٍ‫ا‬ ‫ٛزا‬ ً‫ك‬chapterٍ‫ا‬ ٖ‫ػ‬ ‫ع٘زؾذس‬quotation marks، ‫االخش‬ ٖ‫ػ‬ ‫ٝاخزالكٜب‬ ‫ٝٝظٍلزٜب‬
‫ٝٛ٘بى‬3ٍ‫ا‬ ٖٓ ‫اٗٞاع‬quotation marks
Our term Real term Symbol
Ticks Single quotes „
Back ticks Back quotes ` ("‫"ر‬ ٍ‫ا‬ ‫ؽشف‬ ًِ‫)ػ‬
Quotes Double quotes “
SINGLE QUOTES OR "TICKS"
1-ٍ‫ا‬ ّ‫ٗغزخذ‬single quotesٍ‫ا‬ ‫ؽجبػخ‬ ‫اسدٗب‬ ‫ارا‬charactersً‫ؽز‬ ٌَ‫اُش‬ ‫ث٘لظ‬ ‫ًبِٓخ‬
ًِ‫ػ‬ ‫رؾزٞي‬ ‫ًبٗذ‬ ‫ارا‬special characters‫رزشعٜٔب‬ ‫ال‬ ًٜ‫ك‬
2-ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ‫اص٘بء‬ ٚٓ‫اعزخذا‬ َ‫ؼ‬‫ٌل‬ ‫ال‬filesًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬spacesٌَ‫اُش‬ ‫الؽع‬ ،
‫اُزب‬ًُ
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 78
3-َٔ‫ُؼ‬ ‫اعزخذآٜب‬ ٌٌٖٔsetَُvariablesٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ ّ‫رغزخذ‬ ‫ٝال‬variables
ٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬commands
‫الؽع‬ٕ‫ا‬ٍ‫ا‬shellٕ‫ا‬ ‫اػزجشد‬ٍ‫ا‬valueًٛahmed gamilٍ‫ثب‬ ‫ٓـِلخ‬ ‫الٜٗب‬ ‫ًِٜب‬single
quotes
4-َٔ‫ُؼ‬ ‫اعزخذآٜب‬ ٌٌٖٔnew line
DOUBLE QUOTES
5-ٍ‫ا‬ ‫ٓغ‬ ّ‫رغزخذ‬special characters
ٕ‫ا‬ ‫ٝالؽع‬ٙ‫ٛز‬ٍ‫ا‬commands‫اُ٘زٍغخ‬ ‫ٗلظ‬ ًُ‫ا‬ ‫ٌئدٝا‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 79
ٍ‫ا‬ ًَspecial charactersٍ‫ا‬ َ‫ثذاخ‬ ‫أُٞعٞدح‬“”‫ًـ‬ ‫ٓؼٜب‬ َٓ‫اُزؼب‬ ْ‫ٌز‬characters‫ٝال‬ ‫ػبدٌخ‬
َٔ‫ػ‬ ْ‫ٌز‬expansionٍ‫ا‬ ‫ػذا‬ ‫ُٜب‬$ٝ„
ٍ‫ا‬ ّ‫اعزخذا‬ ‫اسدٗب‬ ‫ارا‬“$”‫ًـ‬character‫ٍُٝظ‬ ‫ػبدي‬special character‫ػالٓخ‬ ‫ؼغ‬٘‫ك‬“”
ًُ‫ًبُزب‬
ٍ‫ا‬ ٕ‫ا‬ ‫ٗغذ‬ ‫ٝٛ٘ب‬shellٍ‫ا‬ َٓ‫ٌؼب‬“”‫ًـ‬escape characterٍ‫ا‬ ٌَٞ‫ثزؾ‬ ّٞ‫رو‬special
characterًُ‫ا‬ ‫ٌٍِٜب‬ ‫اُزي‬character‫ػبدي‬ٚ‫رشعٔز‬ ْ‫ٌز‬ ‫ال‬ ً‫ُط‬
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔ“”‫االٓش‬ ‫ٓغ‬ ‫اخش‬ ٌَ‫ثش‬echo –eٍ‫ا‬ َٓ‫رؼب‬ ‫ؽشٌوخ‬ ‫ثزـٍٍش‬ ّٞ‫ٌو‬ ‫اُزي‬shell‫ٓغ‬
ٍ‫ا‬“”ٌٌٕٞ ‫ؽٍش‬
Action Command
n ‫عذٌذ‬ ‫ُغطش‬ ٍٝ‫اُ٘ض‬
t ‫اػبكخ‬tab
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 80
BACKTICKS
ٍ‫ا‬ ّ‫رغزخذ‬(``)ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬‫ٗ٘لز‬commandٍ‫ا‬ ‫ٝٗؤخز‬output‫كبرا‬ ،‫اخشي‬ ‫ٓشح‬ ٚٓ‫ٝٗغزخذ‬
‫االٓش‬ ّ‫ك٘غزخذ‬ ًُ‫اُؾب‬ ‫اُزبسٌخ‬ ‫ػشع‬ ‫اسدٗب‬
date
ٍ‫ا‬ ٍَ‫رشـ‬ ‫اص٘بء‬ ًُ‫اُؾب‬ ‫اُزبسٌخ‬ ‫ٗؼشع‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝscriptٕ‫ا‬ ‫كٍغت‬ً‫ك‬ ٚ‫ؼؼ‬ٗvariableْ‫ص‬
ٍ‫ا‬ ‫ٛزا‬ ّ‫ٗغزخذ‬Variableٍ‫ا‬ ً‫ك‬scriptٌَ‫اُش‬ ‫ثٜزا‬
ٍ‫ا‬ ‫هٍٔخ‬ ٕ‫ا‬ ‫الؽع‬ ٌُٖٝDATEٍ‫ا‬ ٕ‫ال‬ ‫اخشي‬ ‫ٓشح‬ ‫رزـٍش‬ ُٖٝ ًٛ ‫ًٔب‬ َ‫عزظ‬variable : DATE
ٍ‫ا‬ ٍَ‫رشـ‬ ْ‫ر‬ ‫ارا‬ ‫كوؾ‬ ‫ٝاؽذح‬ ‫ٓشح‬ ‫ٌزـٍش‬commandٍ‫ا‬ ٍٖ‫ث‬backticks
? َ‫اُؾ‬ ‫كٔب‬ ‫ارا‬
َٔ‫ػ‬ ‫ٌغت‬resetَُDATEٍ‫ا‬ ‫ٌظٜش‬ ٕ‫ا‬ ‫ٗشٌذ‬ ‫ٓشح‬ ًَ ً‫ك‬date‫ظٍض‬‫رخ‬ ‫اػبدح‬ ‫ؽشٌن‬ ٖ‫ػ‬ ًُ‫اُؾب‬
ٍ‫ا‬variable‫اخشي‬ ‫ٓشح‬
DATE=`date`
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ٝثزُي‬variable : DATEٍ‫ا‬ ‫ثوشاءح‬valueَُ ‫اُغذٌذح‬date
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 81
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔ ‫ًٔب‬variable : DATEٍ‫ا‬ ‫ٛزا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ٙ‫ٝؽذ‬ ‫اُٞهذ‬ ‫ُؼشع‬command
TIME=`echo $DATE | cut –d‟ ‟ –f4`
ٍ‫ا‬ ً‫ك‬ ‫اُزـٍٍش‬ ٕ‫كب‬ ‫ٝثزُي‬DATE variableٍ‫ا‬ ً‫ك‬ ‫رـٍٍش‬ ٚ‫ٌزجؼ‬TIME variable
ٍ‫ا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝback ticksٍ ‫ظٜب‬ٍ‫ظ‬‫رخ‬ ٕٝ‫ثذ‬ ‫ٗلغٜب‬variableٍ‫أُضب‬ ً‫ك‬ ‫ًٔب‬
ًُ‫اُزب‬
ٍ‫ا‬ ًُ‫ا‬ ‫اُ٘زٍغخ‬ ‫خشعذ‬ ٌُٖٝ ٙ‫ر٘لٍز‬ ْ‫ر‬ ‫االٓش‬ ٕ‫ا‬ ‫ع٘غذ‬command lineُ‫ُز‬ ، ‫ُز٘لٍزٛب‬ٍ‫ا‬ ‫ظٜش‬ ‫ي‬
error‫ٌٞعذ‬ ‫ال‬ ٚٗ‫ال‬commandٚٔ‫اع‬08:49:46،‫ظٍض‬‫رخ‬ َ‫ؼ‬‫ٌل‬ ‫ُزُي‬variableَُback
ticks commands
‫ػالٓخ‬ ّ‫اعزخذا‬ ‫ؼب‬ٌ‫ا‬ ٌٌٖٔ$()ٍ‫ا‬ ٖٓ ‫ثذال‬back ticksٍ‫ا‬ ٕ‫ال‬back ticks‫سإٌزٜب‬ ‫ؼؼت‬ٌ ‫سثٔب‬
ٍ‫ا‬ ً‫ك‬script
SHELL ARITHMETIC'S WITH EXPR AND BACK QUOTES
‫رؾذص‬ ‫ُوذ‬ٖ‫ػ‬ ‫عبثوب‬ ‫٘ب‬$(())ٍ‫ا‬ ‫ثؼغ‬ ‫ٛ٘بى‬ ٌُٖٝ ‫اُؾغبثٍخ‬ ‫اُؼٍِٔبد‬ ً‫ك‬ ّ‫رغزخذ‬ ً‫اُز‬shells
‫ثـ‬ ‫ػٜ٘ب‬ ‫االعزؼبػخ‬ ٌٖٔ‫ث‬ ‫ُزُي‬ ‫رلٜٜٔب‬ ‫ال‬ ‫اُوذٌٔخ‬commandٚٔ‫اع‬exprً‫ًبالر‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 82
i=0
i=$((i+1))
‫ٌغبٝي‬ ‫ٝٛزا‬
i=0
i=$(expr i+1)
‫ؼب‬ٌ‫ا‬ ‫ٌغبٝي‬ ٞٛٝ
i=`expr i+1`
ANOTHER TIP WHEN USING QUOTATION MARKS
‫ظٍض‬‫ثزخ‬ ‫هٔ٘ب‬ ‫ارا‬variable : file‫االٓش‬ ‫ٗزغخ‬ ‫ُؼشع‬ls –al‫اُ٘زٍغخ‬ ‫ثؼشع‬ ‫ٝهٔ٘ب‬
file=`ls -al`
echo $file
‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫ًِٜب‬ ‫اُ٘زٍغخ‬ ‫كغزظٜش‬Unformatted
‫ؼٍق‬ٗ ٕ‫ا‬ ‫كٍغت‬ ‫أُشٌِخ‬ ٙ‫ٛز‬ ‫ٗؼبُظ‬ ًٌُٝ“”
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 83
echo “$file”
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 84
CHAPTER 6. SO, YOU WANT AN
ARGUMENT?
INTRODUCTION
ًٔ‫اي‬ ٍَ‫ُزشـ‬ ٕ‫ا‬ ‫ػِٔ٘ب‬ ‫ب‬scriptًُ‫ًبُزب‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬
./script.sh
ًُ‫ًبُزب‬ ‫رشـٍِخ‬ ‫ؼب‬ٌ‫ا‬ ٌٌٖٔ ٌُٖٝ
./eatout.sh file.txt
ٍ‫ا‬ ٙ‫ٝٛز‬formٍ‫ا‬ ‫ر٘لٍز‬ ‫اسدٗب‬ ‫ارا‬ ‫ٓلٍذح‬scriptًِ‫ػ‬fileٍٖ‫ٓؼ‬
ٍ‫ا‬ ‫ر٘لٍز‬ ٌٌٖٔٝscriptٍ‫ا‬ َ‫ثذاخ‬ ‫رٞعذ‬ ‫ًِٔخ‬ ًِ‫ػ‬file‫ٛ٘ب‬ ًٔ‫رغ‬ ‫أٌُِخ‬ ٙ‫ٝٛز‬ ،argument
./eatout.sh Word-in-file.txt
‫ُذٌ٘ب‬ ٕ‫ا‬ ‫ٗلزشع‬script : eat.shٝfile : restaurant.txtًِ‫ػ‬ ‫ٌؾزٞي‬dataْ‫أُطبػ‬ ٖ‫ػ‬
ٌٍُٖٝ ْ‫أُطبػ‬ ٖٓ ٍٖ‫ٓؼ‬ ‫ٗٞع‬ ‫ثٍبٗبد‬ ‫ٗغزخشط‬ ٕ‫ا‬ ‫ٝٗشٌذ‬Italian
ٍ‫ا‬ ٕ‫ٝا‬scriptً‫االر‬ ًِ‫ػ‬ ‫ٌؾزٞي‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 85
ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ّٞ‫ٗو‬ ًٌُٝscriptُ‫ثب‬ ‫االٓش‬ ‫ثٌزبثخ‬ ّٞ‫ٗو‬ًُ‫اُزب‬ ٌَ‫ش‬
./eat.sh Italian
ٍ‫ا‬ ً‫ك‬ ًٗ‫اُضب‬ ‫اُغطش‬ ٕ‫ا‬ ‫عٍذا‬ ‫الؽع‬script‫اُشٓض‬ ًِ‫ػ‬ ‫ٌؾزٞي‬$1‫ٛ٘بى‬ َٛٝ ٙ‫ٓؼ٘ب‬ ‫كٔب‬$0ٝ$2
‫اُخ‬
ٍ‫كب‬ ْ‫ٗؼ‬shell‫اعضاء‬ ‫ٓغٔٞػخ‬ ًُ‫ا‬ ‫االٓش‬ ‫ٛزا‬ ٍْ‫ثزوغ‬ ّٞ‫رو‬
./eat.sh Italian
َ‫رٔض‬ ‫ؽٍش‬./eat.sh‫ثبُشٓض‬$0
ٍ‫ٝا‬italian‫ثبُشٓض‬$1
‫اي‬ ‫ٝػؼ٘ب‬ ‫ٝارا‬argument‫ثؼذ‬ ‫اخش‬italian‫ثبُشٓض‬ ُٚ ‫كٍشٓض‬$2‫اُخ‬
ًٔ‫رغ‬ ‫اُشٓٞص‬ ٙ‫ٝٛز‬positional parameters
ٍ‫ا‬ ٌَ‫ثزؼذ‬ ‫هٔ٘ب‬ ‫كبرا‬scriptٍ‫ا‬ ‫ٝعؼِ٘ب‬TYPE = $2
ٍ‫ا‬ ‫ثز٘لٍز‬ ‫ٝهٔ٘ب‬script‫ثؼشع‬ ّ‫هب‬ ٙ‫ٗغذ‬ٍ‫ا‬ ‫ثٍبٗبد‬argumentٞٛٝ ًٗ‫اُضب‬smart
ٍ‫ا‬ ْ‫اع‬ َ‫ٗغؼ‬ ٕ‫ا‬ ‫ؼب‬ٌ‫ا‬ ٌٌٖٔٝfile : restaurant.txt‫اي‬ ‫ٝػغ‬ ٌٌٖٔ ‫ثؾٍش‬ ‫ٓزـٍش‬file‫اخش‬
ٍ‫ا‬ َ‫داخ‬ ٍُٚ‫ا‬ ‫ٝٗشٍش‬script‫ثبُشٓض‬$2ًُ‫ًبُزب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 86
ٍ‫ا‬ ‫ر٘لٍز‬ ‫ٝػ٘ذ‬scriptٍ‫ا‬ ّ‫ٗغزخذ‬form‫اُزبٍُخ‬
POSITIONAL PARAMETERS 0 AND 1 THROUGH 9
ٍ‫ا‬ ٕ‫ا‬ ‫رًشٗب‬ ‫ًٔب‬positional parametersٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ًٛparametersًُ‫ا‬ ‫رشٍش‬ ً‫اُز‬
ٍ‫ا‬ ٕ‫ٌٓب‬argumentٍ‫ا‬ ً‫ك‬ ّ‫عٍغزخذ‬ ‫اُزي‬script
ٍ‫ا‬ ٖٓ ‫ػذد‬ ‫ٝاًجش‬parametersٍ‫ا‬ ‫ٓغ‬ ٚٓ‫اعزخذا‬ ٌٌٖٔscriptٞٛ10 parametersٖٓ ‫اي‬$0
ًُ‫ا‬$9
ٍ‫ا‬ ‫ٌٝشٍش‬$0ٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬script
ٍ‫ا‬ ‫ٌٝشٍش‬$1ٍٝ‫ا‬ ًُ‫ا‬argument‫ٌٝٛزا‬
ٍ‫ا‬ ٕ‫ا‬ ‫عٍذا‬ ‫رززًش‬ ٕ‫ا‬ ‫ٌغت‬ ٌُٖٝ$0ٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬ ‫رشٍش‬scriptّ‫اعزخذ‬ ‫ارا‬ٍ‫ا‬ ‫ٓغ‬script‫ثٍ٘ٔب‬
ٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬ ‫رشٍش‬shell‫ًـ‬ ٙ‫اعزخذٓ٘ب‬ ‫ارا‬ ّ‫أُغزخذ‬commandًُ‫ًبُزب‬ َ‫ظ‬‫ٓ٘ل‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 87
‫ظٍض‬‫رخ‬ َ‫ؼ‬‫ٌل‬variableَُargument‫ظٍض‬‫رخ‬ َ‫ؼ‬‫االك‬ ٖٓ ٚٗ‫ا‬ ً٘‫ثٔؼ‬TYPE=$1ّ‫ٝاعزخذا‬
ٍ‫ا‬variableٍ‫ا‬ ً‫ك‬ ‫ٗلغٜب‬scriptٍ‫ا‬ ‫ٍُٝظ‬argument‫اُغطش‬ ً‫ك‬ ‫ًٔب‬
grep $TYPE $FILE
‫ثؼذ‬ ‫الٗ٘ب‬َٔ‫ػ‬ ‫ًٍلٍخ‬ ٖ‫ػ‬ ‫ع٘زؾذس‬ ٍَِ‫ه‬shiftَُarguments‫ٓؾزٌٞبد‬ ‫رـٍٍش‬ ًُ‫ا‬ ‫عٍئدي‬ ‫ٝٛزا‬
ٍ‫ا‬positional argumentsٕٝ‫كب‬ ًُ‫ثبُزب‬$1ٍ‫ا‬ ‫ٗلظ‬ ًِ‫ػ‬ ‫رؾزٞي‬ ُٖargumentٍٝ‫اال‬
ٍ‫ا‬ ‫ثؾلع‬ ّٞ‫ٗو‬ ٕ‫ا‬ َ‫ؼ‬‫كبالك‬ ‫ُزُي‬positional argumentً‫ك‬variable
OTHER ARGUMENTS USED WITH POSITIONAL PARAMETERS
ٍ‫ا‬ ‫ػذد‬ ٕ‫ا‬ ‫عبثوب‬ ‫رًشٗب‬ ‫ًٔب‬positional argumentٞٛ10ّ‫اعزخذا‬ ٌٌٖٔ ‫اُؾوٍوخ‬ ً‫ك‬ ٌُٖٝ
‫رُي‬ ٖٓ ‫اًضش‬
$# HOW MANY POSITIONAL ARGUMENTS HAVE W E GOT ?
ٍ‫ا‬ ‫ػذد‬ ًْ ‫ٗؼشف‬ ًٌُpositional argumentsٍ‫ا‬ ً‫ك‬ ‫ٗغزخذٜٓب‬ ً‫اُز‬script‫ؼغ‬ٗ ٕ‫ا‬ ٌٌٖٔ
‫اُشٓض‬“$#”ٍ‫ا‬ ً‫ك‬script
$* DISPLAY ALL POSITIONAL PARAMETERS
ٍ‫ا‬ ًٛ ‫ٓب‬ ‫ٗؼشف‬ ًٌُٝpositional arguments‫اُشٓض‬ ّ‫ٗغزخذ‬ ‫أُغزخذٓخ‬“$*”ٍ‫ا‬ َ‫داخ‬
script
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 88
USING THE "SHIFT" COMMAND - FOR MORE THAN 9 POSITIONAL
PARAMETERS
ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬ ‫ُوذ‬positional argumentٕ‫ا‬ ‫ٝهِ٘ب‬$0َُ ٚ‫ظ‬‫ظ‬‫ٓخ‬script‫ٌٍِٜب‬ ْ‫ص‬$1ًُ‫ا‬$9
ٍ‫ا‬ ٖٓ ‫رُي‬ ٖٓ ‫اًضش‬ ‫ٛ٘بى‬ ٕ‫ا‬ ‫ٝرًشٗب‬positional argument? ‫رُي‬ ‫كٌٍق‬
‫اًضش‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫اُؾ‬ ٌٌٖٔ$9َٔ‫ػ‬ ‫ؽشٌن‬ ٖ‫ػ‬shiftَُpositional arguments‫ٓوذاس‬ ‫ثؤي‬
‫هِ٘ب‬ ‫كبرا‬
shift 5
‫اػبكخ‬ ْ‫ٌز‬ ‫كجزُي‬$1 : $5ٍ‫ا‬ ‫ظجؼ‬‫ٝر‬ ‫عذٌذح‬$1 >>> $6ٍ‫ٝا‬$9 >>> $14
‫االك‬ ٖٓ ٚٗ‫ا‬ ‫هِ٘ب‬ ‫ُزُي‬‫ظٍض‬‫رخ‬ ْ‫ٌز‬ ٕ‫ا‬ َ‫ؼ‬variableٌَُpositional argument
EXIT STATUS OF THE PREVIOUS COMMAND
‫اخش‬$ًٛ ٕ‫اال‬ ‫ػٜ٘ب‬ ‫ع٘زؾذس‬“$?”ٍ‫ا‬ ‫رٞػؼ‬ ًٛٝexit status‫ال‬‫خش‬commandٙ‫ر٘لٍز‬ ْ‫ر‬
‫ٛ٘بى‬ ٕ‫ا‬ ّ‫ا‬ ‫ث٘غبػ‬ ٙ‫ر٘لٍز‬ ْ‫ر‬ َٛ(error)
ٍ‫ا‬ ٍٚ‫ك‬ ٕ‫ًب‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ٕ‫ا‬ ‫ٛ٘ب‬ ‫ٝٗالؽع‬exit status 0ٍ‫ا‬ ‫ر٘لٍز‬ ْ‫ر‬ ٚٗ‫ا‬ ‫رُي‬ ً٘‫ٝٓؼ‬scriptٌَ‫ثش‬
‫طؾٍؼ‬
ٍ‫ا‬ ‫ًبٗذ‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ك‬ ٌُٖٝexit status 2‫ُٞعٞد‬errorً‫ك‬ٍ‫ا‬ ‫ر٘لٍز‬script‫طؾٍؼ‬ ٌَ‫ثش‬
‫ٝعٞد‬ ّ‫ُؼذ‬fileًٔ‫ٌغ‬fake
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 89
ٍ‫ا‬ ‫ًبٗذ‬ ‫اُضبُش‬ ٍ‫أُضب‬ ً‫ٝك‬exit status 1‫ُٞعٞد‬errorً‫ك‬ٍ‫ا‬ ‫ر٘لٍز‬script‫ٝعٞد‬ ّ‫ُؼذ‬
argumentًٔ‫ٌغ‬egypt
ًَٝcommandُٚ ٌٌٕٞ ٙ‫ر٘لٍز‬ ْ‫ٌز‬exit status‫ٌُٜٝ٘ب‬by default‫اال‬ ‫اُشبشخ‬ ًِ‫ػ‬ ‫رظٜش‬ ‫ال‬
ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫ارا‬command : $?
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 90
CHAPTER 7. WHERE TO FROM
HERE?
MAKING DECISIONS
‫ر٘لٍز‬ ًُ‫ا‬ ‫ٗؾزبط‬ ٕ‫االؽٍب‬ ٖٓ ‫ًضٍش‬command‫ؽذٝس‬ ‫ػ٘ذ‬ ٍٖ‫ٓؼ‬action‫ًزا‬ ‫ؽذس‬ ‫ارا‬ ً٘‫ثٔؼ‬ ،‫ٓب‬
‫اك‬‫ششؽٍخ‬ َٔ‫ع‬ ًُ‫ا‬ ‫ٗؾزبط‬ ‫اٗ٘ب‬ ‫اي‬ ، ‫ًزا‬ َ‫ؼ‬
if [ expression ]
then
OK #Do something
else
NOT OK #Do something else
fi
TESTING FOR A TRUE OR FALSE CONDITION
َ‫ٓض‬ ‫اُششؽٍخ‬ َٔ‫اُغ‬ ‫ثؼغ‬ ٖ‫ػ‬ ‫ع٘زؾذس‬ ‫ُزُي‬if-elseّٞ‫كغ٘و‬ ‫ػٜ٘ب‬ ‫ٗزؾذس‬ ٕ‫ا‬ َ‫هج‬ ٌُٖٝ ،
‫االٓش‬ ٖ‫ػ‬ ‫ثبُؾذٌش‬test
THE TEST COMMAND
ٍ‫كب‬test commandَٔ‫ثؼ‬ ّٞ‫ٌو‬checkٍ‫ا‬ ًِ‫ػ‬file typeٝcompareٍ‫ا‬ ٍٖ‫ث‬Values
ٍ‫ا‬ ٍ‫اعزجذا‬ ٌٍٖٔ‫ك‬form‫اُزبٍُخ‬
if [ x -eq 9 ]
then
echo equal
else
echo no equal
fi
ٍ‫ثب‬form‫اُزبٍُخ‬
test $x -eq 9
if [ $? -eq 0 ]
then
echo equal
else
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 91
echo no equal
fi
ٝ‫ؽشٌن‬ ٖ‫ػ‬ ٍَ‫اُزلبط‬ ٖٓ ‫ٓضٌذ‬ ‫ٓؼشكخ‬ ٌٌٖٔ
info test
W HAT IS "TRUE" AND "FALSE"
ً٘‫ٌؼ‬ ‫ٓبرا‬trueٝ‫ا‬falseٍ‫ا‬ ً‫ك‬ ‫ػٜ٘ب‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ ‫ًٍٝق‬shell??
ٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ ‫ثشٓغخ‬ ‫ُـخ‬ ‫اي‬ ً‫ك‬trueٝ‫ا‬falseٍ‫ا‬ ً‫ٝك‬ ،ٍٚ٘‫ٓؼ‬ ‫ثؤٍخ‬shellٍ‫ا‬ ٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫ٌز‬
trueٍ‫ثب‬value 0‫ا‬ ٖ‫ػ‬ ‫ٝاُزؼجٍش‬ٍfalseَ‫ٓض‬ ‫اخش‬ ْ‫سه‬ ‫ثؤي‬1ٝ25ٝ2000
ٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ ‫كٔضال‬false‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬
ٍ‫ا‬ ‫ظٜٞس‬ ً٘‫ٝٓؼ‬status code :1ٍ‫ا‬ ‫ر٘لٍز‬ ‫ٗزٍغخ‬ ٕ‫ا‬ ٞٛPingٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫،ٌٝز‬ ‫خبؽئخ‬ ‫ًبٗذ‬
trueًٌِ ‫ًٔب‬
ٍ‫ا‬ ‫ظٜٞس‬ ً٘‫ٝٓؼ‬status code :0‫ر٘لٍز‬ ‫ٗزٍغخ‬ ٕ‫ا‬ ٞٛwho‫طؾٍؾخ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 92
DIFFERENT TYPES OF TESTS
ٍ‫ا‬ ‫ر٘لٍز‬ ٌٌٖٔtest command‫ػذح‬ ًِ‫ػ‬parameters: َ‫ٓض‬
1. a string test
2. a numeric test
3. a file test
TESTING A STRING
ٍ‫ا‬ ّٞ‫ٌو‬test commandَٔ‫ثؼ‬checkٍ‫ا‬ ًِ‫ػ‬stringsٍ‫ا‬ ٙ‫ٛز‬ ‫ثز٘لٍز‬ ْ‫ُ٘و‬commands
NAME="ahmed"
test $NAME = ahmed
echo $?
ُ‫اُزب‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ع٘غذ‬‫ٍخ‬
ٍ‫ا‬ ‫ر٘لٍز‬ ‫ٗزٍغخ‬ ٕ‫ا‬form‫ظٜشد‬ ًُٝ‫اال‬0ٍ‫ا‬ ٕ‫ال‬conditionٍ‫ا‬ ً‫ك‬ ‫اُؼٌظ‬ ٌُٖٝ ‫ٓزؾون‬form
‫اُضبٍٗخ‬
ٍ‫ا‬ ً‫ك‬ ‫ؼب‬ٌ‫ا‬ ‫ع٘غذ‬test commandٍ‫ا‬ ٍٖ‫ث‬ ‫ٓغبكخ‬ ‫ٛ٘بى‬ ٕ‫ا‬variable name : NAMEٍ‫ٝا‬
test condition : =ٍ‫ٝا‬variable value : ahmed
‫ٝعٞد‬ ٖٓ ‫ٗزؤًذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬variable‫اعٜٔب‬NAME‫ال‬ ّ‫ا‬‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ٌٍٖٔ‫ك‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 93
ٍ‫ا‬ ٕ‫ا‬ ‫ٝالؽع‬“”ٍ‫ا‬ ‫ثزشعٔخ‬ ‫هبٓذ‬$‫ى‬ ‫ٝٓؼبِٓزٜب‬regular expressionٖٓ ‫اُزبًذ‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝ ،
‫ٝعٞد‬variableًٔ‫رغ‬HI
ٍ‫ا‬ ٕ‫ا‬ ‫ك٘غذ‬“ status 1 “‫ٝعٞد‬ ّ‫ػذ‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬variableْ‫االع‬ ‫ثٜزا‬
‫ٝػؼ٘ب‬ ‫ارا‬ ٌُٖٝ$NAMEٍٖ‫ػالٓز‬ ٍٖ‫ث‬ticks „‟
ٍ‫ا‬ ٕ‫ا‬ ‫كغ٘غذ‬status = 0ٍ‫ا‬ ٕ‫ا‬ ٖٓ ْ‫اُشؿ‬ ًِ‫ػ‬ticks „‟َٔ‫ؿ‬ ‫ثبُـبء‬ ّٞ‫رو‬expansionَُ$
? ‫رُي‬ ‫كٌٍق‬
ٍ‫ا‬ ٕ‫ال‬test commandٍ‫ا‬ ‫ٝعذ‬ ‫ارا‬ticks „‟َٔ‫ثؼ‬ ّٞ‫ٌو‬ ‫ال‬ ٚٗ‫كب‬checkٍ‫ا‬ ًِ‫ػ‬variables
َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٌُٚ٘ٝcheckٍ‫ا‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ‫أٌُِخ‬ ًِ‫ػ‬ticksًٛ َٛstring‫ال‬ ّ‫ا‬‫ٝثبُطجغ‬ ،
‫اٜٗب‬ ‫ٌغذ‬stringٍ‫ا‬ ‫كزظٜش‬status = 0
ٍ‫ا‬ ً‫ػالٓز‬ ‫ٝٝػغ‬ ‫عٍذا‬ ‫اُؾزس‬ ‫ٌغت‬ ‫ُزُي‬“”ٍ‫ا‬ ٍٞ‫ؽ‬variable nameَٔ‫ثؼ‬ ّٞ‫ٌو‬ ً‫ؽز‬check
ٍ‫ا‬ ًِ‫ػ‬variablesٍ‫ا‬ ًِ‫ػ‬ ‫ٍُٝظ‬strings
test "$NAME" = "hamish"
test "$NAME" = hamish
HAS A VARIABLE BEEN SET OR NOT ?
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 94
‫رؤ‬ ٕ‫ا‬ ‫ٝثؼذ‬ٍ‫ا‬ ‫ٝعٞد‬ ٖٓ ‫ًذٗب‬variableٍ‫ا‬ ‫ٛزا‬ ٖٓ ‫ٗزؤًذ‬ ‫عٞف‬variableُٚvalueَٛ ‫اي‬ ‫ال‬ ّ‫ا‬
ٍ‫ا‬ ‫ٛزا‬Variable set or unset
ٍ‫ا‬ ٙ‫ٛز‬ َ‫ٓض‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ًٛٝ ‫ثغٍطخ‬ ‫ثطشٌوخ‬ ْ‫ٌز‬ ‫رُي‬ ٖٓ ‫اُزؤًذ‬form
test "${NAME}x" = x
ٍ‫ا‬ ‫ًبٗذ‬ ‫كبرا‬variable : NAME‫هٍٔخ‬ ‫ُٜب‬(set)ٌٍُٖٝahmed‫ٗزٍغخ‬ ٕ‫كب‬${NAME}x
‫رغبٝي‬(ahmedx)‫رغبٝي‬ ‫ال‬ ‫ثبُطجغ‬ ًٛٝ(x)‫اُ٘زٍغخ‬ ‫ظجؼ‬‫كز‬falseٍ‫ٝا‬status = 1
ٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ‫آب‬variable : NAME‫هٍٔخ‬ ‫ُٜب‬ ‫ٍُظ‬(unset)‫ٗزٍغخ‬ ٕ‫كب‬${NAME}x‫رغبٝي‬
(x)‫أُبدُخ‬ ٖٓ ٌٖٔ‫اال‬ ‫اُطشف‬ ‫رغبٝي‬ ًٛٝ ‫كوؾ‬(x)‫اُ٘زٍغخ‬ ‫ظجؼ‬‫كز‬trueٍ‫ٝا‬status = 0
ٌ‫ؽش‬ ‫ؼب‬ٌ‫ا‬ ‫ٝٛ٘بى‬ٍ‫ا‬ ٍٞ‫ؽ‬ ٖٓ ‫ُِزؤًذ‬ ‫اخشي‬ ‫وخ‬string
String test Meaning
-z Zero – length
-n Non zero – length
ٍ‫ا‬ ‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫كبرا‬variableًِ‫ػ‬ ‫ٌؾزٞي‬valueٖٓ ٌٕٞ‫رز‬5‫ًبٗذ‬ ‫ارا‬ ‫ٗزؤًذ‬ ٕ‫ا‬ ‫ٝاسدٗب‬ ‫ٓغبكبد‬
ٍ‫ا‬ ٙ‫ٛز‬variableًِ‫ػ‬ ‫ٌؾزٞي‬value‫ال‬ ّ‫ا‬non valueَٔ‫ثؼ‬ ّٞ‫ك٘و‬checkٍ‫ا‬ ٍٞ‫ؽ‬ ًِ‫ػ‬
valueٍ‫ا‬ ٍٞ‫ؽ‬ ٝ‫ا‬string
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 95
ٍ‫ا‬ َ‫عؼ‬ ‫ٓغ‬ ٌُٖٝ ‫اخشي‬ ‫ٓشح‬ ٍ‫أُضب‬ ‫ٗؼٍذ‬variable‫اي‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫ال‬value
َُ ٕ‫اال‬ ‫ع٘زطشم‬test condition‫ػالٓخ‬ َ‫ٓض‬“=”ٌٌٖٔ ً‫اُز‬ ‫اُؼالٓبد‬ ٖٓ ‫اٌُضٍش‬ ‫كٜ٘بى‬
ٍ‫ا‬ ‫ٓغ‬ ‫اعزخذآٜب‬string testَ‫ٓض‬
String test condition Name
= ‫ٌغبٝي‬
!= ‫ٌغبٝي‬ ‫ال‬
<= ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ َ‫اه‬
>= ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ ‫اًجش‬
< ٖٓ َ‫اه‬
> ٖٓ ‫اًجش‬
ٍ‫ا‬ ٙ‫ٝٛز‬conditionsٍ‫ثب‬ ٚ‫خبط‬string test
NUMERIC TESTS
ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬ ٕ‫ا‬ ‫ثؼذ‬string testٍ‫ا‬ ٖ‫ػ‬ ‫اُؾذٌش‬ ًُ‫ا‬ ٕ‫اال‬ ً‫ٗؤر‬numeric testّ‫رغزخذ‬ ًٛٝ
: َ‫ٓض‬ ، ّ‫االسهب‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬
x=101
test "$x" -lt 10
echo?$
‫اُشٓض‬ ‫ٝعٞد‬ ‫ٗالؽع‬ ‫ٝٛ٘ب‬“-lt”? ً٘‫ٌؼ‬ ‫كٔبرا‬
‫اُشٓض‬“-lt”ٍ‫ا‬ ‫ٌؼزجش‬numeric test conditionً٘‫ٌٝؼ‬less thanٍ‫ا‬ ‫اٗٞاع‬ ًٌِ ‫ٝكٍٔب‬numeric
conditions
String test condition Name
-eq ‫ٌغبٝي‬
-neq ‫ٌغبٝي‬ ‫ال‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 96
-le ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ َ‫اه‬
-ge ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ ‫اًجش‬
-lt ٖٓ َ‫اه‬
-gt ٖٓ ‫اًجش‬
ٍٖ‫ث‬ ‫أُوبسٗخ‬ ‫كؼ٘ذ‬ ‫ارا‬2 stringdٍ‫ا‬ ّ‫ٗغزخذ‬string test conditions
ٍ‫ا‬ ٍٖ‫ث‬ ‫أُوبسٗخ‬ ‫ػ٘ذ‬ ‫آب‬valuesٍ‫ا‬ ّ‫ك٘غزخذ‬numeric test conditions
FILE TEST
ٚ٘‫ػ‬ ٌِْ‫ع٘ز‬ ‫ٗٞع‬ ‫ٝاخش‬ ‫صبُش‬ ٍٞٛٝ‫ا‬ ‫ٛزا‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓب‬ ٖٓ ‫ُِزؤًذ‬ ّ‫ٌغزخذ‬ ٞٛٝ ،fileٞٛdirectory
ٝ‫ا‬normal fileٝ‫ا‬soft linkٝ‫ا‬hard linkٍ‫ا‬ ‫ثؼغ‬ ّ‫اعزخذا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬ ،options‫ٓغ‬
‫االٓش‬test
Option Type
-f File
-d Directory
-L , -h Symbolic link
-s The size is greater than zero
ٍ‫ا‬ ٖٓ ‫اٌُضٍش‬ ‫ٝٛ٘بى‬options:‫االٓضِخ‬ ‫ثؼغ‬ ‫ٝع٘ؤخز‬ ‫ثٜزا‬ ً‫عٌ٘زل‬ ٌُٖٝ
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 97
‫ا‬ ٍ‫ٓضب‬ٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫خش‬directory
ٍ‫أُضب‬ ‫ٛزا‬ ‫ٗؤخز‬ ‫ٝاخٍشا‬
ٍ‫ا‬“.”ٍ‫ا‬ ًٛcurrent directoryٍ‫ا‬ ‫كبً٘ذ‬ ‫ُزُي‬status = 1ٍ‫ا‬ ٖٓ ًَ ً‫ك‬–f, -L
‫رغبٝي‬ ‫ٌُٜٝ٘ب‬0ً‫ك‬–d
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 98
LOGICAL OPERATORS
ٍ‫ا‬ ٖ‫ػ‬ ‫اُؾذٌش‬ ٖٓ ‫اٗزٍٜ٘ب‬ ‫ُوذ‬test‫ٓغ‬ ٚٓ‫اعزخذا‬ ‫ًٍٝلٍخ‬One condition:
test if “x” is true then “y”
ٍ‫ا‬ ّ‫اعزخذ‬ ٕ‫ا‬ ‫اسدد‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝtestٖٓ ‫اًضش‬ ‫ٓغ‬condition: َ‫ٓض‬
test if “x” OR “y” is true then “z”
ٍ‫ثب‬ ‫ٌؼشف‬ ‫ٓب‬ ّ‫ع٘غزخذ‬ ‫اُؾبُخ‬ ٙ‫ٛز‬ ً‫ك‬logical operatorsَ‫ٓض‬
NOT‫ثبُشٓض‬ ‫ُٜب‬ ‫ٌٝشٓض‬“!”
AND‫ثبُشٓض‬ ‫ُٜب‬ ‫ٌٝشٓض‬“-a”
OR‫ثبُشٓض‬ ‫ُٜب‬ ‫ٌٝشٓض‬“-o”
‫ا‬ ِْ‫ٗؼ‬ ‫ًٝٔب‬‫اعزخذٓ٘ب‬ ‫ارا‬ ٚٗNOTٌٌٕٞ ‫كغٞف‬
!1=0
!0=1
‫اعزخذٓ٘ب‬ ‫ٝارا‬ANDَُ ‫ٝسٓضٗب‬true‫ثؾشف‬“T”ٍ‫ٝا‬false‫ثؾشف‬“F”
0 -a 0 = 0
0 -a 1 = 1
1 -a 0 = 1
1 -a 1 = 1
‫ًٝزُي‬
T and T = T
T and F = F
F and T = F
F and F = F
‫اعزخذٓ٘ب‬ ‫ٝارا‬ORَُ ‫ٝسٓضٗب‬true‫ثؾشف‬“T”ٍ‫ٝا‬false‫ثؾ‬‫شف‬“F”
0 -o 0 = 0
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 99
0 -o 1 = 0
1 -o 0 = 0
1 -o 1 = 1
‫ًٝزُي‬
T or T = T
T or F = T
F or T = T
F or F = F
‫ٗزٍغخ‬ ٕ‫كب‬ ‫ٝٛ٘ب‬“$NAME” = ahmedًٛtrueٝ‫ا‬“T”ٝ“-n”ٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ً٘‫رؼ‬stringً٘‫ٌؼ‬
“non zero length”ٚٗ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬trueٝ‫ا‬“T”‫اُ٘زٍغخ‬ ٌٕٞ‫كز‬ ‫ؼب‬ٌ‫ا‬
T OR T = T
ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ٝك‬
F OR T = T
‫اُضبُش‬ ٍ‫أُضب‬ ً‫ٝك‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 100
T AND T = T
‫اُشاثغ‬ ٍ‫أُضب‬ ً‫ٝك‬
F and T = F
ٍ‫ا‬ ‫ٗٞع‬ ٖٓ ‫ٗزؤًذ‬ ٕ‫ا‬ ٌٌٖٔٝfile: ًٌِ ‫ًٔب‬
test ( -f .bashrc )
test ( ! -f .bashrc )
CONDITIONS IN THE SHELL
ٍ‫ا‬conditions‫ٗز‬ ٕ‫ا‬ ‫ٌغت‬ ً‫اُز‬ ‫االشٍبء‬ ْٛ‫ا‬ ٖٓ ًٍٛ‫ا‬ ً‫ك‬ ‫ؼِٜٔب‬scripting‫ؽشم‬ ‫ػذح‬ ‫ٝٛ٘بى‬ ،
ٍ‫ا‬ ‫ٓغ‬ َٓ‫ُِزؼب‬conditions
USING THE "IF" STATEMENT
‫ٓغ‬ َٓ‫ٗزؼب‬ ‫ًٍق‬if statementٍ‫ا‬ ٍ‫اشٌب‬ ‫اثغؾ‬ ٕ‫ا‬ ?if statement: ٞٛ
if condition
then
do some operations
fi
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 101
ٍ‫ا‬ ‫رجذأ‬ ٕ‫ا‬ ‫ٌغت‬ ٍ‫أُضب‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬ ًٛٝif statement:‫ثـ‬
1-“if”
2-ٌِ‫ًِٔخ‬ ًٗ‫اُضب‬ ‫اُغطش‬ ً‫ك‬ ‫ٍٜب‬“then”
3-‫اُضبُش‬ ‫اُغطش‬ ً‫ك‬ ‫ٌٍِٜب‬ٍ‫ا‬commands‫ٝػغ‬ َ‫ؼ‬‫(ٌٝل‬ ‫ر٘لٍزٛب‬ ‫ٗشٌذ‬ ً‫اُز‬tabٍٖ‫ٓغبكز‬ ٝ‫ا‬
ٍ‫ا‬ َ‫هج‬commands)
4-ٍ‫ا‬ ‫ثبٜٗبء‬ ّٞ‫ٗو‬ ْ‫ص‬statement‫ثـ‬“fi”
THE "IF" "THEN" "ELSE" STATEMENT
ٍ‫ا‬ ٖٓ ‫ٓضٌذ‬ ‫ثبػبكخ‬ ٕ‫اال‬ ّٞ‫ٗو‬featuresٍ‫ا‬ ًِ‫ػ‬if statement‫ٝا‬‫خٍبساد‬ ‫ثبػبكخ‬ ‫ُ٘ب‬ ‫رغٔؼ‬ ً‫ُز‬
‫اًضش‬
if condition
then
<condition was TRUE, do these actions>
else
<condition was FALSE, do these actions>
fi
ٖٓ ‫اًضش‬ َٔ‫ػ‬ ٌٌٖٔٝtest‫ؽشٌن‬ ٖ‫ػ‬
if condition
then
<condition was TRUE, do these actions>
else
if condition
then
<condition was TRUE, do these actions>
else
<condition was FALSE, do these actions>
fi
fi
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 102
THE "ELIF" STATEMENT
ٖٓ ‫اٌُضٍش‬ ‫ٛ٘بى‬ ‫االخٍش‬ ٍ‫أُضب‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬if statementٖٓ ‫ٝاٌُضٍش‬elseٝthenًٌِ‫ك‬ ‫ُزُي‬
ٍ‫ا‬ ٌَ‫ش‬ ‫ثزجغٍؾ‬ ّٞ‫ٗو‬if statement‫ظبس‬‫االخز‬ ‫ثؼغ‬ ‫ٝػغ‬ ٌٌٍٖٔ‫اعزجذا‬ َ‫ٓض‬ ‫اد‬else if‫ثـ‬elif
if condition
then
<condition was TRUE, do these actions>
elif condition
then
<condition was TRUE, do these actions>
else
<condition was FALSE, do these actions>
fi
‫ٝعٞد‬ ًُ‫ا‬ ‫ٗؾزبط‬ ِٖ‫ك‬ ‫ظبساد‬‫االخز‬ ٙ‫ٛز‬ ّ‫ٝثبعزخذا‬“fi”ًَ ‫ٓغ‬elifً‫ٌٌٝل‬“fi”‫كوؾ‬ ٙ‫ٝاؽذ‬
‫ُذي‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝ10 conditionsّ‫ع٘غزخذ‬ َٜ‫ك‬else if10? ‫ٓشاد‬
? َ‫اُؾ‬ ‫كٔبرا‬ ، ‫عٍئ‬ ‫كٜزا‬ ‫ال‬ ‫ثبُطجغ‬
ّ‫اعزخذا‬ ٞٛ َ‫اُؾ‬case statementٖٓ ٍ‫ثذ‬if statement
THE "CASE" STATEMENT
ٍ‫ا‬case statement‫ٍُغذ‬looptَٔ‫ثؼ‬ ّٞ‫رو‬ ‫ٌُٜٝ٘ب‬matcheingٍ‫ا‬ ًِ‫ػ‬conditions
َٜ‫اع‬ ‫ثطشٌوخ‬
case expression in
pattern1 )
statements ;;
pattern2 )
statements ;;
* )
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 103
statements ;;
...
esac
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ؽٍش‬caseَٔ‫ثؼ‬expandَُexpressionَٔ‫ثؼ‬ ّٞ‫ٌو‬ ْ‫ص‬matchingًَ ٍٖ‫ٝث‬ ٍٚ٘‫ث‬
pattern
ٍ‫ا‬ ‫ٝعذ‬ ‫كبرا‬matched patternٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫كٍو‬statementًُ‫ا‬ َ‫ظ‬ٌ ً‫ؽز‬;;
‫اي‬ ‫ٌغذ‬ ُْ ٕ‫ٝا‬matched patternَٔ‫ثؼ‬ ّٞ‫كٍو‬matcheٍ‫ا‬ ‫ٓغ‬“*”ٍ‫ا‬ ‫ٌ٘لز‬ ْ‫ص‬statement
‫ص‬ٍ‫ا‬ َٔ‫ػ‬ ‫ثبٜٗبء‬ ّٞ‫ٌو‬ ْcase statementٍ‫ا‬ ‫ٝاخشاط‬status
ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ َ‫رغؼ‬ ‫اُطشٌوخ‬ ٙ‫ٝٛز‬scriptَٜ‫اع‬
DEBUGGING YOUR SCRIPTS
َٔ‫ػ‬ ‫ًٍلٍخ‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ع٘زؾذس‬debugَُscript‫ؽشٌن‬ ‫ػذح‬ ‫ٛ٘بى‬ ‫اُؾوٍوخ‬ ً‫ٝك‬ ،َٔ‫ُؼ‬
debugging: َ‫ٓض‬
1-‫اػبكخ‬–xٍ‫ا‬ ً‫ك‬ ‫عطش‬ ٍٝ‫ا‬ ًُ‫ا‬script
#!/bin/bash -x
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 104
2-ٍ‫ا‬ ٍَ‫رشـ‬script‫اُطشٌوخ‬ ٙ‫ثٜز‬
bash -x eatout.sh
‫ػشع‬ ً‫ك‬ ٕ‫رغزخذٓب‬ ٍٖ‫اُطشٌوز‬ ٍٖ‫ٝٛبر‬‫ؽشٌوخ‬‫ا‬ ‫ر٘لٍز‬ٍscript‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬ ‫عطش‬ ‫عطش‬
ٍ‫ا‬ ‫ر٘لٍز‬ ًٛٝ ‫اُضبُضخ‬ ‫اُطشٌوخ‬script‫ثؼذ‬ ‫اال‬ ‫اخش‬ ًُ‫ا‬ ‫عضء‬ ٖٓ ٍ‫االٗزوب‬ ّ‫ػذ‬ ‫ٓغ‬ ‫عضء‬ ‫عضء‬ٖٓ ‫اُزؤًذ‬
ٍ‫ا‬ ‫ثؼغ‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬ ، ٚ‫ٗزٍغز‬linesٍ‫ا‬ ًُ‫ا‬scriptَ‫ٓض‬
echo #?
echo "Hit any key to continue"...
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 105
read
THE NULL COMMAND
ٍ‫ا‬null commandٍ‫ا‬ ‫اػبكخ‬ ٞٛ“:”ٍ‫ا‬ ًُ‫ا‬scriptٌَ‫اُش‬ ‫ثٜزا‬
if :
then
echo “....”
fi
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 106
ٍ‫ا‬ ٙ‫ٛز‬ ‫ٝدائٔب‬formtrueٍ‫ا‬ ٕ‫ال‬“:”‫دائٔب‬true
THE || AND && COMMANDS
ٍ‫ا‬ ‫ُز٘لٍز‬ ‫ظشح‬‫ٓخز‬ ‫ؽشٌوخ‬ ٖ‫ػ‬ ‫ٗجؾش‬ ‫ً٘ب‬ ‫ارا‬if statement&& ٝ || ّ‫ثبعزخذا‬ ‫رُي‬ َ‫كؼ‬ ‫ك٘غزطٍغ‬
‫ثز‬ ‫ٌغٔؼ‬ ‫اُزي‬‫٘لٍز‬ٍ‫ا‬ ٖٓ ‫اُؼذٌذ‬command، ّ‫ثبعزخذا‬ ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬? ‫ٛزا‬ ‫ًٍق‬
ٍ‫ا‬ ‫ثز٘لٍز‬ ْ‫ُ٘و‬2 commands: ‫اُلشم‬ ‫ٝٗالؽع‬ ًٌِ ‫ًٔب‬
Command 1
grep italian restaurants.txt || echo "sorry no italians here"
Command 2
grep egypt restaurants.txt || echo “sorry no italians here”
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 107
ٍ‫ا‬ ًٛ ‫اُ٘زٍغخ‬ ‫ًبٗذ‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ً‫ك‬ ٕ‫ا‬ ‫الؽع‬italian recordٌٌٖ ِْ‫ك‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ك‬ ‫ثٍ٘ٔب‬
‫ٛ٘بى‬Egypt recordٍ‫ا‬ َ‫ثذاخ‬restaurant.txt file‫سعبُخ‬ ‫ظٜشد‬ ‫ُزُي‬“sorry no italians
here”
ً٘‫ٌؼ‬ ‫كٔبرا‬‫ٛزا‬?
‫ٌغبٝي‬ ‫ٛزا‬ ٕ‫ا‬
if there are italians inside resturants.txt
then
return them
[else]
return the string “sorry no italians here”
َُ ‫ٝثبُ٘غجخ‬shellً٘‫ٌؼ‬ ‫كٜزا‬
if the result of the grep command is TRUE (0)
then
you will get the lines containing the word italian from
the file resturants.txt
if the result of the grep command is FALSE (1)
then
print 'sorry no italians here'
‫كبُؼالٓخ‬ ‫ارا‬||ً٘‫رؼ‬OR‫(ارا‬ٍ‫ا‬ ‫رؾون‬commandٍ‫ا‬ ‫ر٘لز‬ ‫كال‬ ، ٍٝ‫اال‬commandًٗ‫اُضب‬
‫ٝارا‬ٍ‫ا‬ ‫ٌزؾون‬ ُْcommandٍ‫ا‬ ‫ٗلز‬ ٍٝ‫اال‬command)ًٗ‫اُضب‬
echo “Oh, you're looking for italian, here they are : “ && grep
italian restaurants.txt
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 108
ً٘‫رؼ‬ && ‫كبُؼالٓخ‬ ‫ارا‬andٍ‫ا‬ ‫ٌزؾون‬ ٕ‫ا‬ ‫(ٌغت‬commandٍ‫ا‬ ًُ‫ا‬ َ‫ٌ٘زو‬ ً‫ؽز‬ ٍٝ‫اال‬
command)ًٗ‫اُضب‬
:‫مثال‬
ٍ‫ا‬ ٕ‫كب‬ ‫ٗشي‬ ‫ًٝٔب‬commandٍ‫ا‬ ‫ٌ٘لز‬ ِْ‫ك‬ ‫خطؤ‬ ٍٝ‫اال‬commandًٗ‫اُضب‬
: ‫أخر‬ ‫مثال‬
ٍ‫ا‬ ٕ‫ا‬ ‫ٗشي‬ ‫ًٝٔب‬commandّ‫كوب‬ ‫طؾٍؼ‬ ٌَ‫ثش‬ ٙ‫ر٘لٍز‬ ْ‫ر‬ ٍٝ‫اال‬ٍ‫ا‬ ‫ثز٘لٍز‬commandًٗ‫اُضب‬
: ‫اخر‬ ‫مثال‬
ٍ‫ا‬ ‫ثز٘لٍز‬ ّ‫هب‬ ‫ٛ٘ب‬commandٍ‫ا‬ ٌُٖٝ ‫طؾٍؼ‬ ٌَ‫ثش‬ ٍٝ‫اال‬command‫كؼشع‬ ، ‫خطؤ‬ ًٗ‫اُضب‬
ٍ‫ا‬ ‫ٗزٍغخ‬command‫كوؾ‬ ٍٝ‫اال‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 109
CHAPTER 8. LOOPS
INTRODUCTION
‫ٛ٘بى‬3ٍ‫ا‬ ٖٓ ‫اٗٞاع‬loopsٍ‫ا‬ ‫ٓغ‬ ْٜٓ‫اعزخذا‬ ٌٌٖٔshell
1- for loops
2- while loops
3- until loops
ٍ‫ا‬ ‫ٗلظ‬ ُْٜ ْٜ‫ٝعٍٔؼ‬syntax‫ع٘شي‬ ‫ًٔب‬
THE "FOR" LOOP
ٍ‫ا‬for loopٍ‫ا‬ ‫ٛزا‬ ‫ُٜب‬syntax
for variable in list
do
...
done
ٍ‫ا‬ ٕ‫ًٝؤ‬for loopٍٞ‫رو‬
for every element in the list (1,2,3,4)
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 110
do something (echo $i in output)
ٍ‫ا‬ ٙ‫ٝٛز‬List‫(ا‬ ‫شٍئ‬ ‫اي‬ ٌٕٞ‫ر‬ ٕ‫ا‬ ٌٌّٖٔ‫سهب‬–‫اعٔبء‬–ٝ‫ا‬variablesٝ‫ا‬commandsٝ‫ا‬
‫ٓؾزٞي‬fileٝ‫ا‬ ٍٖ‫ٓؼ‬)‫اخش‬ ‫شٍئ‬ ‫اي‬
‫علي‬ ‫مثال‬‫في‬ ‫االسماء‬‫ال‬for loop
‫ال‬ ‫استخدام‬ ‫علي‬ ‫اخر‬ ‫مثال‬commands‫ال‬ ‫في‬for loop
ٍ‫ا‬ ‫ٝػؼ٘ب‬ ‫اٗ٘ب‬ ‫الؽع‬commandsٍٖ‫ث‬``َ‫داخ‬ ٚ‫ٝػؼ‬ ٌٌٖٔٝ$( )
‫ٝاالٓش‬fileٍ‫ا‬ ‫ٗٞع‬ ‫ثؼشع‬ ّٞ‫ٌو‬file
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 111
ٕ‫ٝا‬ٍ‫ا‬commandٞٛls -1 (one)‫ٍُٝظ‬ls –lًَ ‫ثؼشع‬ ّٞ‫ٌو‬ ٞٛٝfile‫عطش‬ ً‫ك‬‫ٝالؽع‬
‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫اُلشم‬
‫ال‬ ‫محتويات‬ ‫استخدام‬ ‫علي‬ ‫اخر‬ ‫مثال‬files‫ال‬ ‫في‬for loop
ٍ‫ا‬ ّ‫اعزخذا‬ ًِ‫ػ‬ ‫اخش‬ ٍ‫ٓضب‬for loop‫االػذاد‬ ‫ٓغ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 112
‫االٓش‬ ّٞ‫ٌو‬ ‫ؽٍش‬seqَٔ‫ثؼ‬print numeric sequence
‫اخ‬ ٍ‫ٓضب‬‫ًِٔخ‬ ّ‫اعزخذا‬ ٕٝ‫ثذ‬ ‫ش‬“in”ٍ‫ا‬ َ‫ثذاخ‬ ‫أُٞعٞدح‬script
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 113
ٍ‫اعزجذا‬ ٌٌٖٔٝ“i=i+1”‫ثـ‬“i++”ٍ‫ٝاعزجذا‬“i=i-1”‫ثـ‬“i--”
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 114
‫ًِٔخ‬ ٖ‫ػ‬ ‫االعزـ٘بء‬ ‫ٗغزطٍغ‬“in”ٍ‫ا‬ َ‫ثذاخ‬ ‫أُٞعٞدح‬scriptٍ‫ا‬ ٙ‫ٛز‬ ‫ؼغ‬٘‫ع‬ ٌُٖٝvaluesً‫ك‬
‫ثغبٗت‬ ‫اُخبسط‬ٍ‫ا‬scriptًٌِ ‫ًٔب‬
ٍ‫ا‬ ّ‫اعزخذا‬ ً‫ك‬ ‫اخشي‬ ‫ؽشٌوخ‬ ٙ‫ٝٛز‬for loop‫ٝػغ‬ ًٛٝvariable countٚ‫هٍٔز‬1ّٞ‫ٌو‬
ٍ‫ا‬ ‫ثٜب‬ ‫هبٓذ‬ ً‫اُز‬ ‫اُؼٍِٔبد‬ ‫ػذد‬ ‫ثؾغبة‬for loop
ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫اٗ٘ب‬ ‫الؽع‬form
$((count=count+1))
ٍ‫ا‬ ٙ‫ٝٛز‬formٍ‫ا‬ ‫رلٜٜٔب‬ ‫ال‬shellًٌِ ‫ًٔب‬ ‫اُ٘زٍغخ‬ ‫عزظٜش‬ ‫ُزُي‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 115
ٍ‫ا‬ ًُ‫ا‬ ‫ٗظشٗب‬ ‫ٝارا‬error‫ا‬ ‫ثغجت‬ ‫ٌ٘زظ‬ ٚٗ‫ا‬ ‫ٗغذ‬ ‫اُظبٛش‬ٍline 6ٍ‫ا‬ ‫هٍٔخ‬ ‫ثضٌبدح‬ ‫اُخبص‬ ٞٛٝcount
ٍ‫ا‬ ّ‫هب‬ ‫ؽٍش‬shellٍ‫ا‬ ٙ‫ٛز‬ ‫ثز٘لٍز‬formٍ‫ا‬ ‫هٍٔخ‬ ‫ٝصٌبدح‬countّ‫هب‬ َ‫ث‬ ‫رُي‬ ‫ػ٘ذ‬ ‫ٌزٞهق‬ ُْٝ
‫ًؤٜٗب‬ ‫ثز٘لٍزٛب‬command‫ٌغذ‬ ِْ‫ك‬ ‫ُزُي‬commandٚٔ‫اع‬2ٝ‫ا‬3ٝ‫ا‬4ٝ‫ا‬5
? َ‫اُؾ‬ ‫كٔب‬ ‫ارا‬
‫أُشٌِخ‬ ٙ‫ٛز‬ َ‫ُؾ‬ ‫ؽشم‬ ‫ػذح‬ ‫ٛ٘بى‬
‫االولي‬ ‫الطريقة‬‫ٝػغ‬ ًٛ(noop “:” )ٍ‫ا‬ ٙ‫ٛز‬ ّ‫آب‬formًُ‫ًبُزب‬ ٌٕٞ‫ُز‬
: $((count=count+1))
‫الثانية‬ ‫الطريقة‬ٍ‫ا‬ ٙ‫ٛز‬ ٍ‫اعزجذا‬ ًٛٝform‫ة‬formَ‫ٓض‬ ‫اخشي‬
count=$((count+1))
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 116
‫الثالثة‬ ‫الطريقة‬ٍ‫ا‬ ٙ‫ٛز‬ ٍ‫اعزجذا‬ ًٛform‫ة‬form‫اخشي‬
count=`expr $count + 1`
W HILE AND UNTIL LOOPS
‫ع٘زؾذس‬ٍ‫ا‬ ٖٓ ٌٖ‫اخش‬ ٍٖ‫ٗٞػ‬ ٖ‫ػ‬ ٕ‫اال‬loopsٍ‫ا‬ ‫ٝٛٔب‬while loopٍ‫ٝا‬until loop‫ٗلظ‬ ‫ُٜٝب‬
ٍ‫ا‬syntax
ٍ‫ا‬while loop‫ُٜب‬syntax
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 117
while <condition is true>
do
Action
done
ٍ‫ٝا‬until loop‫ُٜب‬syntax
until <condition is true>
do
Action
done
ٍْٜ٘‫ث‬ ‫اُلشم‬ ‫كٔب‬ ‫ارا‬
ٍ‫ا‬while loopٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫رو‬true conditions‫ُٜب‬ ً‫اُز‬status 0‫كوؾ‬
ٍ‫ا‬ ‫ثٍ٘ٔب‬until loopٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫عزو‬false conditionsٍ‫ا‬ ًُ‫ا‬ َ‫ظ‬‫ر‬ ً‫ؽز‬true condition
‫مثال‬
i=5
while test "$i" -le 10
do
echo $i
done
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 118
ٍ‫اعزجذا‬ ٌٌٖٔٝ
while test "$i" -le 10
ٍ‫ثب‬form
while [ "$i" -le 10 ]
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 119
‫اخر‬ ‫مثال‬
while [ !-d `ls` ]
do
echo "file"
done
ٍ‫ا‬ ‫ٝٛزا‬scriptٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫ٌو‬command : lsٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬ ٖٓ ‫ٌٝزؤًذ‬files‫ٍُغذ‬directories
‫ًِٔخ‬ ‫ٌخشط‬ ْ‫ص‬file
‫اخر‬ ‫مثال‬
ٕ‫ًب‬ ‫ارا‬ ‫ٓب‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬userٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ثبُذخ‬ ّ‫هب‬ ‫هذ‬ ٍٖ‫ٓؼ‬system‫ػذح‬ ‫كٜ٘بى‬ ،‫ال‬ ّ‫ا‬‫ؽشم‬
‫رُي‬ َٔ‫ُؼ‬
َٔ‫ثؼ‬ ّٞ‫ٗو‬ : ‫اٝال‬script‫ثز٘لٍز‬ ّٞ‫ٌو‬who commandٍ‫ا‬ ‫ٛزا‬ ًِ‫ػ‬User
user=$1
while `who | grep "$user" > /dev/null`
do
echo "User logged in"
done
ّ‫ثبعزخذا‬ ٝ‫ا‬Until‫عبُخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ّٞ‫ٌو‬ ‫اُزي‬“User not logged in”ٍ‫ا‬ َ‫ٌذخ‬ ً‫ؽز‬
userٍ‫ا‬ ًُ‫ا‬system‫كٍزٞهق‬ٍ‫ا‬scriptَٔ‫اُؼ‬ ٖ‫ػ‬
user=$1
until `who | grep "$user" > /dev/null`
do
echo "User not logged in"
done
ٍ‫ا‬ ‫ٌٜٔ٘ب‬ ‫ال‬ ‫ٝٛ٘ب‬command output‫ٝػؼ٘ب‬ ‫ُزُي‬/dev/null
ٍ‫ا‬ ‫ٛزا‬ ٌُٖٝscriptٍ‫ا‬ َ‫ٗغؼ‬ ٕ‫ا‬ ٌٌٖٔ ‫ُزُي‬ ، َ‫اُشعبئ‬ ٖٓ َ‫ٛبئ‬ ًْ ‫ثؼشع‬ ّٞ‫عٍو‬script‫ٌ٘زظش‬
‫ُٔذح‬10ًٗ‫صٞا‬ٍ‫ا‬ ‫ٌؼٍز‬ ٕ‫ا‬ َ‫هج‬check‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ ‫اخشي‬ ‫ٓشح‬sleep 10ًٌِ ‫ًٔب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 120
#!/bin/bash
user=$1
until who |grep "$user"> /dev/null
do
echo "User not logged in"
sleep 10
done
echo "Finally!! $user has entered the OS"
exit 0
THE BREAK AND CONTINUE COMMANDS
‫ٗؾزب‬ ‫هذ‬ٍ‫ا‬ ‫ٗٞهق‬ ٕ‫ا‬ ًُ‫ا‬ ‫اؽٍبٗب‬ ‫ط‬scriptٍ‫ا‬ ‫ٌٝٗغش‬ ٙ‫ر٘لٍز‬ ‫اص٘بء‬ َٔ‫اُؼ‬ ٖ‫ػ‬loop
‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫ارا‬ ‫كٔضال‬scriptًِ‫ػ‬ ‫ٌٝؾزٞي‬ ‫ًجٍش‬loops: َ‫ٓض‬ ‫ٓزذاخِخ‬
for
do
for
do
if
then
break;
fi
done
done
ٍ‫ا‬ ٖٓ ‫كِِخشٝط‬loop‫ؽشٌن‬ ٖ‫ػ‬ ‫ثٌغشٛب‬ ّٞ‫ٗو‬ ٕ‫ا‬ ‫ٌغت‬ ‫اُذاخٍِخ‬break
‫ٓض‬ ‫ٝٛزا‬ٍ‫ا‬ ّ‫اعزخذا‬ ‫ًٍلٍخ‬ ‫ٌٞػؼ‬ ٍ‫ب‬breakٍ‫ا‬ ْ‫سه‬ ‫ثؼذ‬ ّٞ‫ٌو‬ ‫اٗزشٗذ‬ ‫طلؾخ‬ ً‫ك‬ ٍٝ‫عذ‬ َٔ‫ػ‬ ً‫ك‬
columnٍ‫ا‬ ْ‫ٝسه‬rowٍٝ‫اُغذ‬ ً‫ك‬ ‫ثٜب‬ ‫اُخبطخ‬ ‫اُخبٗخ‬ ً‫ك‬ ْٜ‫ًٝزبثز‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 121
/!#bin/bash
# Start by warning the browser that a table is starting
echo "<TABLE BORDER='1'>”
#Start the ROWs of the table (4 rows)
for row in `seq 4`
do
#Start the row for this iteration
echo "<TR>”
#Within each row, we need 3 columns (or table-data)
for col in `seq 3`
do
#If this row 2, then break out of this inner (column) loop,
returning to
if [ $row -eq 2 ]
then
break;
fi
#If this is NOT row 2, then put the cell in here.
echo " <TD>$row,$col</TD>”
done
#End this ROW
echo "</TR>”
done
#End this table.
echo "</TABLE>”
exit 0
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 122
‫ًغش‬ ٌٌٖٔٝ2 inner loopsْ‫اُشه‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬2ًُ‫ا‬break
break 2
ٍ‫ا‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ع٘زؾذس‬command : continueٍ‫ا‬ ‫ػٌظ‬ ‫ٌؼزجش‬ ‫اُزي‬command : breakٍ‫كب‬
command : breakٍ‫ا‬ ٖٓ ‫ثبُخشٝط‬ ّٞ‫ٌو‬loopٍ‫ا‬ ‫ثٍ٘ٔب‬continueٍ‫ا‬ ‫ثذاٌخ‬ ًُ‫ا‬ ‫ثبُؼٞدح‬ ّٞ‫ٌو‬
loop‫اي‬ َٛ‫ٌٝزغب‬ ‫اخشي‬ ‫ٓشح‬commandٙ‫ثؼذ‬ ً‫ٌؤر‬
‫اُغضء‬ ‫ٛزا‬ ً‫ك‬ ٚ٘‫ػ‬ ‫ع٘زؾذس‬ ‫ٓب‬ ‫ٝأخش‬‫ارا‬ ٍٞٛ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ‫اسدٗب‬script output‫ٓض‬ ٌَ‫ش‬ ‫ثؤي‬َ
ٍ‫ا‬ ٍ‫اسعب‬outputًُ‫ا‬fileٍ‫ا‬ ٌَٞ‫رؾ‬ ٝ‫ا‬outputٖٓsmall lettersًُ‫ا‬capital lettersٕ‫كب‬
ٍ‫ا‬ ‫اخش‬ ً‫ك‬ ْ‫ٌز‬ ‫رُي‬script‫ًِٔخ‬ ‫ثؼذ‬done
‫كبرا‬ٍ‫ا‬ ‫ؽلع‬ ‫ٗشٌذ‬ ‫اٗ٘ب‬ ‫كشػ٘ب‬loop outputً‫ك‬fileٍ‫ا‬ ‫ػالٓخ‬ ّ‫كغ٘غزخذ‬ ٍٖ‫ٓؼ‬redirection
ٍ‫ا‬ ‫ٜٗبٌخ‬ ً‫ك‬scriptًٌِ ‫ًٔب‬
for ((i=0;i<10;i++))
do
echo "Number is now $i"
done > forloop.txt
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 123
ٍ‫ا‬ ٍٞ‫ٗؾ‬ ‫اسدٗب‬ ‫ارا‬ ‫ًٝزُي‬small lettersًُ‫ا‬capital letters
for ((i=0;i<10;i++))
do
echo "Number is now $i"
done |tr '[a-z]' '[A-Z]' > forloop.txt
GETOPTS USING ARGUMENTS AND PARAMETERS
ٍ‫ا‬ ‫ٗ٘لز‬ ٕ‫ا‬ ‫ٗغزطٍغ‬script: َ‫ٓض‬ ٍ‫اشٌب‬ ‫ثؼذح‬
./eatout.sh -a -i -r <parameter>
./eatout.sh -ai -r <parameter>
./eatout.sh -air <parameter>
./eatout.sh -r <parameter> -ai
ٍ‫ٝا‬Getopts‫ظبس‬‫اخز‬ ًٛgetting optionsً٘‫ٝرؼ‬getting options from the
command lineٍ‫ا‬ ٕ‫ا‬ ٖٓ ‫ٝاُزؤًذ‬shell‫ٌغزطٍغ‬ٙ‫ثٜز‬ َٓ‫ٌزؼب‬ ٕ‫ا‬parametersٍِٚ‫ػ‬ ‫ٝث٘بء‬
‫ٌخشط‬trueٝ‫ا‬false
ٍ‫ا‬ ‫ٓغ‬ َٓ‫ٗزؼب‬ ‫ًٍق‬ ‫ارا‬getopts?
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 124
CHAPTER 9. USER INPUT TO A
SCRIPT
INTRODUCTION
َٔ‫ػ‬ ٕ‫اال‬ ‫ٗغزطٍغ‬scriptٍ‫ا‬ ٖٓ َٔ‫ٌؼ‬CLIَٔ‫ثؼ‬ ّٞ‫ٗو‬ ‫ًٍق‬ ِْ‫ع٘زؼ‬ ٕ‫ٝاال‬interactive script
THE READ COMMAND
ٍ‫ا‬ َٔ‫ٌؼ‬read commandٍ‫ا‬ ‫اٗٞاع‬ ‫عٍٔغ‬ ‫ٓغ‬shellsٞٛٝ ،built-in shell command
ٍ‫ا‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓب‬ ‫ُٝٔؼشكخ‬commandٞٛbuilt-in commandً‫االر‬ َٔ‫ثؼ‬ ّٞ‫ٗو‬ ّ‫ا‬
type command
ٍ‫ا‬ ًُ‫ا‬ ‫ٗؼٞد‬command : read‫ًزج٘ب‬ ‫كبرا‬
read X Y
‫ٝػـط٘ب‬enterٖٓ ًَ ‫هٍٔخ‬ ‫ًزبثخ‬ ‫ٌٝ٘زظش‬ ًُ‫اُزب‬ ‫اُغطش‬ ًُ‫ا‬ ٍ‫كغٍ٘ض‬X,Y
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 125
ٍ‫ا‬ ‫ٛزا‬ ‫ؽجو٘ب‬ ‫ٝارا‬commandٍ‫ا‬ َ‫ثذاخ‬scriptًُ‫ًبُزب‬ ٌٍٕٞ‫كغ‬
‫ا‬ ٌٌٖٔ‫اػبكخ‬option : -pَُ ‫سعبُخ‬ ‫ُؼشع‬userٍ‫ا‬ ‫ٗٞع‬ ٖ‫ػ‬ ٙ‫رخجش‬ ًٌُInputّٞ‫عٍو‬ ‫اُزي‬
: َ‫ٓض‬ ُٚ‫ثبدخب‬
ٍ‫ا‬ ٕ‫كب‬ ‫ٗشي‬ ‫ًٔب‬ ‫ٝٛ٘ب‬curser‫ٌ٘زظش‬ٍ‫ا‬Inputٚ‫عٌ٘زج‬ ‫اُزي‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 126
َُ ‫عذا‬ ‫ٛبٓخ‬ ‫اخشي‬ ‫ٝظٍلخ‬ ‫ٝٛ٘بى‬read commandٍ‫ا‬ ‫ٓؾزٌٞبد‬ ‫هشاءح‬ ًٛٝfilesْٜ‫ٌل‬ ٚٗ‫ا‬ ‫ًٔب‬
ٍ‫ا‬delimiterٍ‫ا‬ ٌٌٕٞ ٕ‫ا‬ َ‫ؼ‬‫(ٌل‬delimiter‫ػالٓخ‬ ٞٛ“,”)‫ٓغبكخ‬ ‫ٍُٝظ‬
ٍ‫ا‬ ٕ‫ا‬ ‫ٗغذ‬ ‫ٝٛ٘ب‬restaurant.txt file: ًِ‫ػ‬ ‫ٌؾزٞي‬
ْ‫أُطؼ‬ ‫ٗٞع‬typeٚٗ‫ٌٓب‬ ،placeٕٞ‫اُزٍِل‬ ْ‫سه‬ ،telْ‫أُطؼ‬ ‫دسعخ‬ ،rating‫ثبُزشرٍت‬
ٍ‫ا‬ ّ‫اعزخذا‬ ‫ٝٗشٌذ‬read commandٌٍُٕٞ ‫اُزشرٍت‬ ‫ٛزا‬ ‫رـٍٍش‬ ً‫ك‬
ْ‫أُطؼ‬ ‫ٗٞع‬typeْ‫أُطؼ‬ ‫دسعخ‬ ،ratingٚٗ‫،ٌٓب‬placeٕٞ‫اُزٍِل‬ ْ‫سه‬ ،tel
ٍ‫ا‬ ‫ٛزا‬ ّ‫ٗغزخذ‬ ‫ُزُي‬scriptٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ًُ‫ا‬read command
ٍ‫ا‬ ٕ‫ا‬ ‫ٝٗالؽع‬IFSًٛinput field separatorٍ‫ا‬ ‫ٗٞع‬ ‫رٞػؼ‬ ًٛٝseparatorَ‫ظ‬‫عٍل‬ ‫اُزي‬
ًَ ٍٖ‫ث‬field‫ٝاخش‬
ٝBy defaultٍ‫ا‬ ٕ‫كب‬IFS=$‟ tn‟ً٘‫ٝرؼ‬spaceٝ‫ا‬tabٝ‫ا‬new lineٍ‫أُضب‬ ‫ٛزا‬ ً‫ك‬ ‫ٌُٝ٘٘ب‬
ٍ‫ا‬ ‫ثزـٍٍش‬ ‫هٔ٘ب‬IFS
ٍ‫ا‬ ‫ٝػؼ٘ب‬ ‫اٗ٘ب‬ ‫ؼب‬ٌ‫ا‬ ‫ٝٗالؽع‬fileٍ‫ا‬ ‫اخش‬ ً‫ك‬script‫ًـ‬STDIN
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 127
PRESENTING THE OUTPUT
THE ECHO COMMAND
ٍ‫ا‬ ٖٓ ٍٖ‫ٓخزِل‬ ٍٖ‫ٗٞػ‬ ‫ٛ٘بى‬echo command
1-built in shell
2-external program /bin/echo
ٍ‫ثب‬ ‫اعزؼ٘ب‬ ‫ٝارا‬helpٍ‫ثب‬ ‫اُخبص‬echo program
ٍ‫ا‬ ‫ثؼغ‬ ‫ٛ٘بى‬special charactersٍ‫ا‬ ‫ٓغ‬ ‫اػبكزٜب‬ ٌٌٖٔ ً‫اُز‬echo command‫ؼٍغ‬‫ر‬ ً‫ٝاُز‬
ٍ‫ا‬ ٖٓ ‫ٓضٌذ‬featuresٍ‫ا‬ ًِ‫ػ‬command: َ‫ٓض‬
n ‫الي‬ ‫النزول‬new line
t ‫اػبكخ‬Tab
c ‫ٌطجغ‬‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫شًء‬ ًَ
ٌٝ‫ثؼذٛب‬ ‫ٓب‬ ًَ ‫ٔغؼ‬
r ‫هجِٜب‬ ‫ٓب‬ ًَ ‫ُٔغؼ‬
b Back space‫ؽشف‬ ‫ُٔغؼ‬‫اُخِق‬ ٖٓ
ٍ‫ا‬ ٌُٖٝechoٍ‫ا‬ ‫ثزشعٔخ‬ ّٞ‫ٌو‬ ‫ٝال‬ ٞٛ ‫ًٔب‬ ‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓب‬ ًَ ‫ثٌزبثخ‬ ّٞ‫ٌو‬special characters
‫ثزشعٔخ‬ ّٞ‫عٍو‬ ‫كٌٍق‬ ‫ارا‬ ،“”? ًٛ ‫ًٔب‬ ‫ثٌزبثزٜب‬ ّٞ‫ٌو‬ ‫ٝال‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 128
‫ٛ٘بى‬ ٕ‫ا‬ ٞٛ َ‫اُؾ‬ٍ‫ا‬ ‫ثؼغ‬optionsٍ‫ا‬ ‫ٓغ‬ ّ‫رغزخذ‬ ً‫اُز‬echoَ‫ٓض‬
-e ‫ال‬ ‫بترجمة‬ ‫يسمح‬special characters
-n
: ‫آضِخ‬
ٍ‫ا‬ ٕ‫ا‬ ‫ٗشي‬ ‫ٛ٘ب‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ً‫ك‬“n”‫اػبكخ‬ ‫ثؼذ‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ك‬ ٌُٖٝ ًٛ ‫ًٔب‬ ‫ظٜشد‬“-e”
ٍ‫ا‬ ‫هبٓذ‬shellٍ‫ا‬ ‫ثزشعٔخ‬“n”
ٍ‫ا‬ ّ‫اعزخذا‬ ًِ‫ػ‬ ‫ؼب‬ٌ‫ا‬ ٍ‫ٓضب‬ ‫ٝٛزا‬“c”ُ٘‫ا‬ ‫اظٜبس‬ ً‫ك‬ٍ‫ٝا‬ ‫اُغطش‬ ‫ٗلظ‬ ً‫ك‬ ‫زٍغخ‬“t”‫الػبكخ‬tab
THE PRINTF COMMAND
ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬ ٕ‫ا‬ ‫ثؼذ‬echoٍ‫ا‬ ٕ‫ا‬ ‫الؽظ٘ب‬ ، ‫االٓضِخ‬ ‫ثؼغ‬ ‫ثؼشع‬ ‫ٝهٔ٘ب‬outputٌٌٕٞ ‫ٓب‬ ‫دائٔب‬
unformatted،ٍ‫ا‬ ‫ثٜب‬ َ‫ٗغؼ‬ ٕ‫ا‬ ٌٌٖٔ ‫ؽشٌوخ‬ ‫ٛ٘بى‬ َٜ‫ك‬output? َ‫ؼ‬‫اك‬ ٌَ‫ثش‬ ‫ٌظٜش‬
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬ ، ْ‫ٗؼ‬printfَٔ‫ُؼ‬formattingَُoutputٍ‫ٝا‬ ،printfٍ‫ا‬ ٙ‫ُٜز‬ ‫ظغ‬‫ٌخ‬
form
printf(%[flags][width][.precision]type)
ٍ‫ا‬ ٍ‫اشٌب‬ ‫ٝاثغؾ‬printfًٛ
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 129
printf(%type)
ٍ‫ٝا‬typeٍٞٛ‫ا‬characters‫ؽجبػزٜب‬ ْ‫عٍز‬ ً‫اُز‬:
s Srting
d Decimal
o Octal
x Hexadecimal
u Unsigned integers
ٍ‫ٓضب‬‫ثط‬ ّٞ‫ع٘و‬ :‫ًِٔخ‬ ‫جبػخ‬ahmedٍ‫ا‬ ّ‫ثبعزخذا‬printfَُ ‫ٝع٘ٞػؼ‬command‫ٓب‬ ٕ‫ا‬
ٞٛ ٚ‫ثطجبػز‬ ّٞ‫عٍو‬string
printf '%s' ahmed
ٍ‫ا‬ ٕ‫ا‬ ‫ٝٗالؽع‬prompt‫ًِٔخ‬ ‫ثغٞاس‬ ‫ػشػٜب‬ ْ‫ر‬ahmedٍ‫ا‬ ‫ٗخجش‬ ُْ ‫الٗ٘ب‬ َ‫ٓغزو‬ ‫عطش‬ ً‫ك‬ ‫ٍُٝظ‬
command‫ٗشٌذ‬ ‫اٗ٘ب‬ٙ‫ٌؼشع‬ ٕ‫ا‬new lineٍ‫ا‬ ‫ر٘لٍز‬ ‫ثؼذ‬command،‫ؽٍش‬ٗ ٕ‫ا‬ ‫ٌغت‬ٍ‫ا‬ ‫خجش‬
printfٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫ُزُي‬ ‫ؽشكٍب‬ ٙ‫ٗشٌذ‬ ‫ثٔب‬ٍ‫ا‬ ‫ر٘لٍز‬ ‫ثؼذ‬ ‫عذٌذ‬ ‫عطش‬ ‫ٗؼشع‬command‫اػبكخ‬ ٝ‫ا‬tab
‫اي‬ ٝ‫ا‬optionsٍ‫ا‬ ‫ؽبُخ‬ ً‫ك‬ ‫كؼِ٘ب‬ ‫ٓضِٔب‬echo‫اػبكخ‬ ‫كٍغت‬
n ‫الي‬ ‫النزول‬new line
t ‫اػبكخ‬Tab
c ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫شًء‬ ًَ ‫ٌطجغ‬
‫ثؼذٛب‬ ‫ٓب‬ ًَ ‫ٌٝٔغؼ‬
r ‫هجِٜب‬ ‫ٓب‬ ًَ ‫ُٔغؼ‬
b Back space‫اُخِق‬ ٖٓ ‫ؽشف‬ ‫ُٔغؼ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 130
‫اخر‬ ‫مثال‬:
‫ثبػبكخ‬precitionٍ‫ا‬ ‫اؽذ‬ ًٛٝoptions‫اُؼشع‬ ‫دهخ‬ ‫ُزؾذٌذ‬ ‫اػبكزٜب‬ ٌٌٖٔ ً‫اُز‬:
printf „%.5d‟ 12
ٖٓ ‫ؽِج٘ب‬ ‫ٝٛ٘ب‬printfْ‫اُشه‬ ‫ؽجبػخ‬12ّ‫ثبعزخذا‬ ٌُٖٝ5 digits‫ظٞسح‬ُ‫ا‬ ٍٖ‫ٝث‬ ٍٚ٘‫ث‬ ‫اُلشم‬ ‫الؽع‬
‫اُزبٍُخ‬
: ‫اخر‬ ‫مثال‬
‫ا‬ ‫ثبػبكخ‬ٍflagsَ‫ٓض‬“+”ٝ‫ا‬“-“
ٍ‫ٝا‬“+”ٍ‫ا‬ ٖٓ ‫رطِت‬shellٍ‫ا‬ ‫ع‬ ‫ػش‬digits‫ًبٗذ‬ ‫عٞاء‬ ‫ثٜب‬ ‫اُخبطخ‬ ‫ثبالشبسح‬“+”ٝ‫ا‬“-“
: ‫اخر‬ ‫مثال‬
: ‫اُضالصخ‬ ‫االٓضِخ‬ ٍٖ‫ث‬ ‫ٝاُلشم‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ‫الؽع‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 131
ٍ‫ا‬ ‫ثؼشع‬ ‫هٔ٘ب‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ً‫ك‬string: flyingٍ‫ا‬ ّ‫ثبعزخذا‬type‫اي‬ ّ‫اعزخذا‬ ٕٝ‫ٝثذ‬ ‫كوؾ‬
options
‫ثبػبكخ‬ ‫هٔ٘ب‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ٝك‬size option‫ظٍض‬‫ثزخ‬ ّٞ‫ٌو‬ ‫اُزي‬10‫ًِٔخ‬ ‫ُؼشع‬ ‫خبٗبد‬flying
‫ثؼشع‬ ّ‫كوب‬ ،flyingٍ‫ا‬ ‫اخش‬ ً‫ك‬10‫خبٗبد‬
ٍ‫ا‬ ‫ثبػبكخ‬ ‫هٔ٘ب‬ ‫اُضبُش‬ ٍ‫أُضب‬ ً‫ٝك‬flagًٛٝ“-“‫ُؼشع‬flyingٍ‫ا‬ ‫ثذاٌخ‬ ً‫ك‬10‫خبٗبد‬
ٍ‫ا‬ ‫ظـٍش‬‫ثز‬ ‫هٔ٘ب‬ ‫اُشاثغ‬ ٍ‫أُضب‬ ً‫ٝك‬size‫ُـ‬ ‫ظض‬‫أُخ‬flying‫ثؼشع‬ ّ‫كوب‬flying‫ًبٓال‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 132
CHAPTER 10. ADDITIONAL
INFORMATION
THE SHELL ENVIRONMENTAL VARIABLES PERTAINING TO
SCRIPTING
ٍ‫ا‬ ًِ‫ػ‬ ‫ٗظشح‬ ً‫عِ٘و‬shellٍ‫ٝا‬environment variables‫ثٜب‬ ‫أُزؼِوخ‬
ٍ‫ا‬ ٍٖ‫ث‬ ‫اُلشم‬ ٖ‫ػ‬ ‫عبثوب‬ ‫رٌِٔ٘ب‬ ‫ُٝوذ‬shell variableٍ‫ٝا‬environment variableٖ‫ػ‬ ‫ٝرؾذص٘ب‬
ٍ‫ا‬subshellٍ‫ا‬ ٖٓ ‫ٝاُخشٝط‬ ٍٞ‫اُذخ‬ ‫ًٍٝلٍخ‬subshell
ٍ‫ا‬ ‫ُٝٔؼشكخ‬environment variables‫االٓش‬ ّ‫ٗغزخذ‬
Env
ٍ‫ا‬ ْٛ‫ا‬ ‫ثؼغ‬ ٙ‫ٝٛز‬environmental variablesَٔ‫ػ‬ ْ‫ٌز‬ ً‫اُز‬setٍ‫ا‬ ‫ػ٘ذ‬ ‫ُٜب‬startup
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 133
ٍ‫ا‬ ‫ُٝٔؼشكخ‬shell variables‫االٓش‬ ّ‫ٗغزخذ‬
set
‫ا‬ ْٛ‫ا‬ ٍٖٓٝshel variablesًٛ
ٍ‫ٝا‬promptًٔ‫ٌغ‬ ًُ‫اُزب‬bash prompt
[root@localhost~]#
ٍ‫ا‬ ‫ٛزا‬ ‫ًزبثخ‬ ‫ٝؽشٌوخ‬promptٍ‫ا‬ ًِ‫ػ‬ ‫رؼزٔذ‬form‫اُزبٍُخ‬
‫ؼب‬ٌ‫ا‬ ‫ُٝزٌ٘ب‬prompt‫ًزبثخ‬ ‫ػ٘ذ‬ ‫ٌظٜش‬ ‫اخش‬commandٞٛٝ ‫ٗبهض‬“>”
ٍ‫ا‬ ‫ٝٛزا‬promptًٔ‫ٌغ‬PS2
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 134
ٍ‫ا‬ ٙ‫ٝٛز‬PS1, PS2ًٛ ‫ٝؿٍشٛب‬shell variables
‫ٝٛ٘بى‬special environment variablesَ‫ٓض‬“~-”ٝ“~”
‫رشٓض‬ ‫ؽٍش‬“~”ٍ‫ا‬ ًُ‫ا‬home directory
ٍ‫ٝا‬“~-“ًُ‫ا‬ ‫رشٓض‬ٍ‫ا‬previous directory
THE SOURCE COMMAND
ٍ‫ا‬source commandٍ‫ا‬ ٍَ‫ُزشـ‬ ‫ؽشٌوخ‬ ًٛscriptsٍ‫ا‬ ‫ٝر٘لٍز‬commandsٍ‫ا‬ ٖٓ
current shell‫كزؼ‬ ٕٝ‫ثذ‬new sub shell
‫ٝػغ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬“. “ٍ‫ا‬ َ‫هج‬commandٍ‫ا‬ ٝ‫ا‬scriptٍ‫ا‬ ‫ثؼذ‬ ‫ٓغبكخ‬ ‫ٛ٘بى‬ ٕ‫ا‬ ‫ٝالؽع‬
“.”
ٍ‫ا‬ ٍَ‫رشـ‬ ْ‫ٌز‬ ‫ًٍق‬ ‫ٗززًش‬ ‫دػٞٗب‬ ‫ارا‬script?
ٍ‫ا‬ ٍَ‫رشـ‬ ْ‫ٌز‬script: ‫اُزبٍُخ‬ ‫ثبُطشٌوخ‬
./shellscript
ٍ‫ا‬ ّٞ‫كٍو‬shell‫ثلزؼ‬new subshellٍ‫ا‬ ‫ٌٝ٘لز‬scriptٍ‫ا‬ ٕ‫ال‬ ٍٚ‫ك‬script‫ثـ‬ ‫ٌجذأ‬ ‫ٓب‬ ‫ؿبُجب‬
“#!/bin/bash”
ٍ‫ا‬ ًٜ‫ٌ٘ز‬ ٍ‫االؽٞا‬ ْ‫ٓؼظ‬ ً‫ٝك‬script‫ثـ‬exit 0ٍ‫ا‬ ّٞ‫كٍو‬shellٍ‫ا‬ َٔ‫ػ‬ ‫ثبٜٗبء‬subshell‫ٝاُؼٞدح‬
ٍ‫ا‬ ًُ‫ا‬parent shell
ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫ارا‬ ‫ٌؾذس‬ ‫اُزي‬ ‫كٔب‬ ‫ارا‬source command?
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 135
. ./shellscript
ٍ‫ا‬ ّٞ‫ٌو‬current shellٍ‫ا‬ ‫ثز٘لٍز‬script
‫كبرا‬ٍ‫ا‬ ٕ‫ًب‬script‫ثـ‬ ًٜ‫ٌ٘ز‬exit 0ٍ‫ا‬ َٔ‫ػ‬ ًٍٜ٘‫ع‬ ٚٗ‫كب‬current shell‫ٛ٘بى‬ ٌٌٖ ُْ ‫ارا‬ ‫آب‬ ،
exit 0ٍ‫ا‬ ٕ‫كب‬current shell‫ٓلزٞؽخ‬ َ‫عزظ‬
ٍ‫ا‬ ٕ‫ال‬ ‫ٌؾذس‬ ‫ٝٛزا‬sourcingٍ‫ا‬ َٔ‫ػ‬ ‫ثبُـبء‬ ّٞ‫ٌو‬shebangٍ‫ا‬ ٕ‫كب‬ ‫ُزُي‬ ،command
ٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬scriptٍ‫ا‬ ًِ‫ػ‬ ٖٓ َٔ‫رؼ‬current shell‫ٝثب‬ ،‫ٝعٞد‬ ‫ؽبُخ‬ ً‫ك‬ ًُ‫ُزب‬exit 0
ٍ‫ا‬ ٖٓ ‫ٗخشط‬ ‫كبٗ٘ب‬current shellٍ‫ا‬ ًُ‫ا‬ ‫ٝٗزٛت‬login shell
ٍ‫ا‬ ‫ٝظٍلخ‬ ًٛ ‫كٔب‬ ‫ارا‬sourcing?
ًَuserٍ‫ا‬ ًِ‫ػ‬systemُٚvariablesً‫ك‬ ‫ؽلظٜب‬ ْ‫ٌز‬ ٚ‫ث‬ ‫خبطخ‬files
ٍ‫ا‬ ‫ٌؾزٞي‬systemٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ًِ‫ػ‬startup scriptsٍ‫ا‬ ٍَ‫رشـ‬ ‫ثذاٌخ‬ ‫ػ٘ذ‬ َٔ‫رؼ‬ ً‫اُز‬
system
ٍ‫ا‬ ّٞ‫ٌو‬ ‫ػ٘ذٓب‬Userَٔ‫ثؼ‬loginٍ‫ا‬ ًِ‫ػ‬systemٍ‫ا‬ ٙ‫ٛز‬ ّٞ‫رو‬scriptsَٔ‫ثؼ‬callَُfiles
ٍ‫ا‬ ًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬user variablesٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬sourcingًٌِ ‫ًٔب‬
‫ٛ٘بى‬Userٚٔ‫اع‬ahmed gamilٍ‫ا‬ ٝ‫ا‬ ٚ‫ثٍبٗبر‬ ٚٗ‫ا‬ ‫ُ٘لزشع‬variablesً‫ك‬ ‫رٞعذ‬ ٚ‫ث‬ ‫اُخبطخ‬file
ٚٔ‫اع‬var
ٕ‫ا‬ ‫ٝٗلزشع‬‫ٛ٘بى‬startup scriptًٔ‫ٌغ‬vars.shٍ‫ا‬ ٍَ‫رشـ‬ ‫ثذاٌخ‬ ‫ػ٘ذ‬ َٔ‫ٌؼ‬system‫ٌؾزٞي‬
: ًِ‫ػ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 136
ٍ‫ا‬ ٕ‫ا‬ ‫ٛ٘ب‬ ‫ٝٗالؽع‬”. var"ٍ‫ا‬ ًٛsourcingٍ‫ا‬ ًِ‫ػ‬ ‫ٌ٘بدي‬ ‫اُزي‬variable file : var
ٍ‫ا‬ ‫ٛزا‬ ٍَ‫رشـ‬ ‫ٝػ٘ذ‬script: ً‫االر‬ ‫ٌؾذس‬
‫ٝػغ‬ ٌٌٖٔٝscriptَ‫داخ‬script‫اخش‬ٍ‫ا‬ ّ‫ٝاعزخذا‬sourceٚ‫ٓؼ‬
THE EXEC COMMAND
ٍ‫ا‬execٞٛcommandَٔ‫ثؼ‬ ّٞ‫ٌو‬replaceَُparent process‫ة‬process‫اخشي‬
ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬ ‫كٔضال‬command
exec ls -l
ٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ‫ٗالؽع‬commandٍ‫ا‬ ‫ثبؿالم‬ ّ‫هب‬terminal،? ‫ُٔبرا‬
ٍ‫ا‬ ٕ‫ال‬terminal‫اي‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ٌٌٖ ُْ ‫اُجذاٌخ‬ ً‫ك‬process‫ك‬ ، َٔ‫رؼ‬ٍ‫ا‬ ‫ثز٘لٍز‬ ‫ؤ٘ب‬exec
commandٍ‫ا‬ ‫ثز٘لٍز‬ ّ‫هب‬ ‫اُزي‬command : ls –lًُ‫ا‬ ‫ٌؼٞد‬ ‫رُي‬ ‫ٝثؼذ‬parent process
‫اي‬ ‫ٌٞعذ‬ ‫ال‬ ‫كؼٍِب‬ ٌُٖٝparent processٍ‫ا‬ ٕ‫كب‬ ‫ُزُي‬shellٍ‫ا‬ ًُ‫ا‬ ‫ٝٗؼٞد‬ ‫رـِن‬login prompt
OTHER METHODS OF EXECUTING A SCRIPT OR A SERIES OF COMMANDS
ٍ‫ا‬shell‫ٓج‬: ٍٖٓ‫ٗظب‬ ًِ‫ػ‬ ً٘
1-ٍ‫ا‬round brackets ()
2-ٍ‫ا‬curly brackets {}
EXECUTION W ITH ROUND BRACKETS
ٍ‫ا‬round brackets ()ٍ‫ا‬ ّٞ‫ٌو‬ ٕ‫ا‬ ً٘‫رؼ‬shellٍ‫ا‬ ‫ثز٘لٍز‬commandٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬
ً‫ك‬subshell‫عذٌذ‬
ًُ‫اُزب‬ ‫االٓش‬ ‫ٗلزٗب‬ ‫كبرا‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 137
Pwd
ٌٕٞ‫عز‬ ‫اُ٘زٍغخ‬ ٕ‫كب‬
‫ثزـ‬ ‫هٔ٘ب‬ ‫ارا‬ ‫ثٍ٘ٔب‬ٍ‫ا‬ ‫ٍٍش‬path‫ٝر٘لٍز‬pwdٍ‫ا‬ ‫ثؼشع‬ ّٞ‫كغٍو‬ ٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ٌُٖٝpath‫اُغذٌذ‬
ٍ‫ا‬ ٕ‫ا‬ ٖٓ ْ‫اُشؿ‬ ًِ‫ػ‬prompt‫ٌزـٍش‬ ُْ
ٍ‫ا‬ ٕ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬shellٍ‫ا‬ ‫ر٘لٍز‬ ْ‫ر‬ ٌُٖٝ ‫ٌزـٍش‬ ُْcommandsً‫ك‬ ‫االهٞاط‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬
subshell‫عذٌذح‬ٍ‫ا‬ ًُ‫ا‬ ‫اخشي‬ ‫ٓشح‬ ‫ٌؼٞد‬ ْ‫ص‬current shell
EXECUTION W ITH CURLY BRACKETS
ٍ‫ا‬curly brackets {}ٍ‫ا‬ ّٞ‫ٌو‬ ٕ‫ا‬ ً٘‫رؼ‬shellٍ‫ا‬ ‫ثز٘لٍز‬commandٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬
ٍ‫ا‬ ‫ٗلظ‬ ً‫ك‬shellً‫ك‬ ‫ٍُٝظ‬subshell‫عذٌذ‬
: ‫مثال‬
ٍ‫ا‬ ‫ثؼغ‬ ‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫ارا‬commandsٍ‫ا‬ ٍ‫ثبسعب‬ ّٞ‫رو‬error messagesًُ‫ا‬/tmp/error‫كٜ٘بى‬
: ‫رُي‬ َٔ‫ُؼ‬ ٍٖ‫ؽشٌوز‬
‫االولي‬ ‫الطريقة‬:
Command1 2>/tmp/errors
command2 2>/tmp/errors
command3 2>/tmp/errors
: ‫الثانية‬ ‫الطريقة‬
{command1;command2;command3;} 2>/tmp/errors
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 138
ًَ ‫ٌزجغ‬ ٕ‫ا‬ ‫ٌٝغت‬commsnd‫ػالٓخ‬ ‫ٝاخش‬“;”
ٍ‫ا‬ ٙ‫كٜز‬form‫ػٜ٘ب‬ ‫عٍ٘زظ‬error‫ٝعٞد‬ ّ‫ُؼذ‬“;”‫ثؼذ‬pwd
{ls -l; pwd}
ٍ‫ٝا‬form‫ظؾٍؾخ‬ُ‫ا‬ًٛ
{ls -l; pwd;}
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 139
CHAPTER 11. POSITIONAL
PARAMETERS &VARIABLES RE-
VISITED
INTRODUCTION
ٍ‫ا‬ ‫ثؼغ‬ ٖ‫ػ‬ ‫عبثوب‬ ‫رٌِٔ٘ب‬parametersَ‫ٓض‬$0 : $9, $#, $?ٍْٜ‫ك‬ ‫ٝاؽذ‬ ًَ ‫ٝظٍلخ‬ ‫ٝػشك٘ب‬
ٍ‫ا‬ ‫ٓغ‬ ‫ثٜب‬ َٓ‫ٗزؼب‬ ٕ‫ا‬ ٌٌٖٔ ً‫اُز‬ ‫اُطشم‬ ‫ثؼغ‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ٝع٘زؾذس‬parametersٌَ‫ثش‬ ٌُٖٝ
‫ٓخزِق‬
‫ُذٌ٘ب‬ ٕ‫ا‬ ‫ٓضال‬ ‫ُ٘لزشع‬parameter : NAMEًِ‫ػ‬ ‫ٌؾزٞي‬value : ahmed
NAME=ahmed
ٍ‫ا‬ ٕ‫ا‬ ٖٓ ‫ُِٝزؤًذ‬parameters‫ُٜب‬ ‫اطجؼ‬value‫ُٜب‬ ‫ؽذس‬ ‫(اي‬set)
ٍ‫ا‬ ‫ٓغ‬ َٓ‫ُِزؼب‬ ‫ؽشٌوخ‬ ٍٝ‫ا‬ ًُ‫ا‬ ٕ‫اال‬ ً‫ٗؤر‬parameters
PARAM:-VALUE
ٍ‫ا‬ ٙ‫ٛز‬ ّ‫رغزخذ‬formٕ‫ا‬ ٖٓ ‫ُِزؤًذ‬ٍ‫ا‬nset: null or uparameter(‫اي‬ ‫ؼغ‬‫ر‬ ‫ال‬ ً٘‫ٝرؼ‬
variable‫ٝعٞدٛب‬ ٖٓ ‫كوؾ‬ ‫رؤًذ‬ ٌُٖٝ)
ٍ‫ا‬ ٕ‫ًب‬ ‫كبرا‬parameterُٚvalueٝ‫ا‬setٍ‫ا‬ ‫كغزظٜش‬valueٍ‫ا‬ ‫ُٜزا‬ ‫ً٘زٍغخ‬command
ٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ‫آب‬parameter‫ُٜب‬ ‫ٍُظ‬valueٝ‫ا‬unsetٍ‫ا‬ ‫كغٍظٜش‬valueٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬
form
${PARAM:-value}
ٍ‫ا‬ ‫ؽبُخ‬ ً‫ك‬ ‫كٔضال‬parameter‫اُغبثن‬NAMEَٔ‫ثؼ‬ ‫هٔ٘ب‬ ،set‫ثؤٍخ‬ ُٚahmed
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 140
NAME=ahmed
َٔ‫ثؼ‬ ‫هٔ٘ب‬ ‫كبرا‬
echo ${NAME:-'AMR'}
‫ُ٘ب‬ ‫عٍظٜش‬ahmed‫ٍُٝظ‬AMRٕ‫ال‬NAMEُٚ ٚ‫ظ‬‫ظ‬‫ٓخ‬value‫اعبعب‬‫رؤًذٗب‬ ‫هذ‬ ٌٕٞٗ ‫ٝثزُي‬
ٍ‫ا‬ ٕ‫ا‬ ٖٓvariable‫ُٜب‬value‫ُٜب‬ ٚ‫ظ‬‫ظ‬‫ٓخ‬
َٔ‫ثؼ‬ ‫هٔ٘ب‬ ‫ارا‬ ٌُٖٝunsetَُNAME‫ر٘ل‬ ‫ٝاػذٗب‬‫اخشي‬ ‫ٓشح‬ ‫االٓش‬ ‫ٍز‬
‫ظٜش‬ ‫ٛ٘ب‬AMRٍ‫ا‬ ٕ‫ا‬ ًِ‫ػ‬ ٍ‫ٌذ‬ ‫ٝٛزا‬variable‫ُٜب‬ ‫ٍُظ‬value‫ثبُزؤًٍذ‬ ً٘‫ٌؼ‬ ‫ال‬ ‫ٝٛزا‬ ، ‫ظخ‬‫ظ‬‫ٓخ‬
ٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬variable‫ُٜب‬ ‫اطجؼ‬value‫عذٌذح‬AMR
ٍ‫ا‬ ٕ‫ا‬ ‫اُغبثوخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬NAME‫ٓبصاُذ‬unsetٍ‫ا‬ ‫ػٍِٜب‬ ‫ٗلزٗب‬ ‫اٗ٘ب‬ ٖٓ ْ‫اُشؿ‬ ًِ‫ػ‬
form‫ٝٛزا‬ ، ‫اُغبثوخ‬ٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬ ًِ‫ػ‬ ٍ‫ٌذ‬form‫ٝعٞد‬ ٖٓ ‫كوؾ‬ ‫ُِزؤًذ‬ ّ‫رغزخذ‬variable
value
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 141
PARAM:=VALUE
َٔ‫ثؼ‬ ّٞ‫ٗو‬ ‫كٌٍق‬ ‫ارا‬setَُparameter?
ّ‫ثبعزخذا‬ ّٞ‫ٗو‬formًٛٝ ‫ثبُغبثوخ‬ ‫عذا‬ ٍٜٚ‫شج‬
PARAM:=value
ٍ‫ا‬ ٙ‫ٛز‬formٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ٚٗ‫ا‬ ً٘‫رؼ‬parameter : (unset or null)ٍ‫ا‬ ‫ؼغ‬‫ك‬valueٌ‫اُغذ‬‫ذح‬
ٍ‫ا‬ ‫كبرشى‬ ‫ٝاال‬value‫اُوذٌٔخ‬ٍ‫ا‬ ‫ػغ‬ ً٘‫(ٝرؼ‬value)‫ٓٞعٞدح‬ ٌٖ‫ر‬ ُْ ٕ‫ا‬ ‫كوؾ‬
َٔ‫ثؼ‬ ّٞ‫رو‬ ًٛٝsetَُparametersٍ‫ا‬ ٝ‫ا‬variables‫اٜٗب‬ ‫ؽبُخ‬ ً‫ك‬unset‫ُٜب‬ ‫ٍُظ‬ ٝ‫ا‬
value‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬
ٍ‫ا‬ ٙ‫كٜز‬ ‫ارا‬formَٔ‫ثؼ‬ ّٞ‫رو‬checkٍ‫ا‬ ًِ‫ػ‬Variableٞٛ َٛ ‫ُزشي‬setّ‫ا‬unsetٛ ٝ‫ا‬ُٚ َ
value‫ال‬ ّ‫ا‬
‫ًبٗذ‬ ‫كبرا‬set‫ُٜب‬ ٝ‫ا‬value‫ًبٗذ‬ ‫ارا‬ ‫آب‬ ، ًٛ ‫ًٔب‬ ‫كززشًٜب‬unset‫ُٜب‬ ‫ٍُظ‬ ٝ‫ا‬valueّٞ‫كزو‬
ٍ‫ا‬ ‫ثبػبكخ‬value‫اُغذٌذح‬
${PARAM:+VALUE}
ٍ‫ا‬ ٙ‫ٛز‬formٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ٚٗ‫ا‬ ً٘‫رؼ‬parameter : (unset or null)‫ٝاال‬ ًٛ ‫ًٔب‬ ‫كبرشًٜب‬
ٍ‫ا‬ ٍ‫كبعزجذ‬value‫ثب‬ ‫أُٞعٞدح‬ٍvalue‫اُغذٌذح‬ٍ‫ا‬ ٍ‫اعزجذ‬ ً٘‫(ٝرؼ‬value)‫ٝعذد‬ ٕ‫ا‬ ‫كوؾ‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 142
ٍ‫ا‬ ٕ‫ا‬ ‫ٌٞػؼ‬ ‫اُزي‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫عطش‬ ‫اخش‬ ‫الؽع‬ ٌُٖٝvalue : amr‫رزـٍش‬ ُْ،ٍ‫ا‬ ٕ‫ٝا‬form
‫اُغبثوخ‬“${NAME:+ahmed}”‫ٝعٞد‬ ٖٓ ‫ؼب‬ٌ‫ا‬ ‫ُِزؤًذ‬ ‫كوؾ‬ ‫ًبٗذ‬setٝ‫ا‬valueٍ‫ا‬ ٙ‫ُٜز‬
parameter
${VARIABLE%PATTERN}
ٍ‫ا‬ ٙ‫ٛز‬formّٞ‫رو‬َٔ‫ثؼ‬matchَُpatern (variable value)ٚ‫ثؾزك‬ ّٞ‫ٝرو‬ ٚ‫ٜٗبٌز‬ ٖٓ ٌُٖٝ
ٍ‫ا‬ ًِ‫ػ‬ ‫ؼب‬ٌ‫ا‬ ‫ٌئصش‬ ‫ال‬ ‫ٛزا‬ ٌُٖٝ( ً‫اُجبه‬ ‫ٝػشع‬value) ‫ٗلغٜب‬
ٍ‫ٝا‬“%”ً٘‫رؼ‬match the shortest pattern from the end of it
: ًُ‫اُزب‬ ٍ‫أُضب‬ ‫الؽع‬
ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝwild cardsٍ‫ا‬ ٙ‫ٛز‬ ً‫ك‬form
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 143
‫ٝٛ٘ب‬‫اهشة‬ ٖ‫ػ‬ ‫ثبُجؾش‬ ّ‫هب‬“a”ٝ“l”ٖٓ ٍْٜ٘‫ث‬ ‫ٝٓب‬ ْٜ‫ٝؽزك‬ ‫ثؼغ‬ ٖٓcharacters
ٍٝ‫ا‬ ‫ٛزا‬ ٕ‫ًب‬ ‫ارا‬ ٚٗ‫ا‬ ‫الؽع‬paternٍ‫ا‬ ً‫ك‬ ‫ٓشح‬ ٖٓ ‫اًضش‬ ‫ٌٓشس‬valueٍ‫ا‬ ٕ‫كب‬formَٔ‫ثؼ‬ ّٞ‫رو‬
match‫اهشة‬ ‫ٓغ‬patern
MAGIC%%R*A
ٍ‫ا‬ َ‫ٓض‬ ًٛٝformٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬ ‫اُلشم‬ ‫ٓغ‬ ‫اُغبثوخ‬formَٔ‫ثؼ‬ ّٞ‫رو‬matchingَُlongest
patternٍ‫ا‬ ‫ٍُٝظ‬shortestٍ‫ا‬ ً‫ك‬ ‫ًٔب‬form‫اُغبثوخ‬
: ًُ‫اُزب‬ ٍ‫أُضب‬ ‫اٗظش‬
‫ثبُجؾش‬ ّ‫هب‬ ‫ٝٛ٘ب‬‫اثؼذ‬“h”ٝ“d”ٍ‫ا‬ ْٜ‫ٓؼ‬ ‫ٝؽذس‬ ْٜ‫ٝؽزك‬ ‫ثؼغ‬ ٖ‫ػ‬charactersٍْٜ٘‫ث‬ ‫أُٞعٞدح‬
VARIABLE#PATTERN
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 144
ٍ‫ا‬ ً‫ك‬ ‫ٗالؽع‬formsٍ‫ا‬ ٕ‫ا‬ ‫اُغبثوخ‬matchingٍ‫ا‬ ‫ٜٗبٌخ‬ ٖٓ ٌٌٕٞvalue،‫ٌٞعذ‬ َٜ‫ك‬
matchingٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalue?
ٍ‫ا‬ َٔ‫ػ‬ ٌٌٖٔ ، ْ‫ٗؼ‬ ًٛ ‫االعبثخ‬Matchingٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalue‫ظٍـخ‬ُ‫ا‬ ّ‫ثبعزخذا‬
variable#pattern
ٍ‫ا‬ َ‫ٝٓض‬“%”ٍ‫ٝا‬“%%”ٕ‫كب‬ٍ‫ا‬“#”َٔ‫ثؼ‬ ّٞ‫رو‬ ‫ٛ٘ب‬matchingَُshortest patternًٛٝ
‫اهشة‬paternٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalue‫(ػٌظ‬“%”ً‫ك‬ ‫أُٞعٞدح‬form‫ع‬)‫بثوخ‬
َٔ‫ثؼ‬ ّ‫هب‬ ‫ٝٛ٘ب‬Matching‫الهشة‬“a”ٝ“m”ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓ ‫ثؼغ‬ ٖٓvalue‫ٓب‬ ‫ٝؽزف‬ ‫ٝؽزكٜب‬
ٍ‫ا‬ ٖٓ ٍْٜ٘‫ث‬characters
ٍ‫ٝا‬“##”َٔ‫ثؼ‬ ّٞ‫رو‬Matchingَُlongest pattern‫اثؼذ‬ ًٛٝpatternٍ‫ا‬ ‫ثذاٌخ‬ ٖ‫ػ‬
value
َٔ‫ثؼ‬ ّ‫هب‬ ‫ٝٛ٘ب‬Matching‫الثؼذ‬“a”ٝ“m”ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓ ‫ثؼغ‬ ٖ‫ػ‬value‫ٓب‬ ‫ٝؽزف‬ ‫ٝؽزكٜب‬
ٍ‫ا‬ ٖٓ ٍْٜ٘‫ث‬characters
ٍ‫ا‬ ٕ‫ا‬ ‫ٗززًش‬ ‫ًٍق‬ ‫ارا‬“#”َٔ‫ثؼ‬ ّٞ‫رو‬matchingٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalueٍ‫ٝا‬“%”ٍ‫ا‬ ‫ٜٗبٌخ‬ ٖٓ
value?
ٍ‫ا‬ ٕ‫ا‬ ِْ‫ٗؼ‬ ‫ًٔب‬“#”‫ًؼالٓخ‬ ّ‫رغزخذ‬commentٍ‫ا‬ ً‫ك‬scriptsً‫ك‬ ‫ٓٞعٞدح‬ ٌٕٞ‫ر‬ ‫ٓب‬ ‫ٝدائٔب‬ ،
َٔ‫ػ‬ ‫أُشاد‬ ‫اُغطش‬ ‫ثذاٌخ‬commentٕ‫كب‬ ‫ُزُي‬ ، ٍُٚ‫ا‬“#”‫اُجذاٌخ‬ ً‫ك‬ ‫دائٔب‬ ّ‫رغزخذ‬
ٍ‫ا‬ ‫ػالٓخ‬ ٕ‫ا‬ ِْ‫ٗؼ‬ ‫ًٝٔب‬“%”ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫اُؾغبثٍخ‬ ‫اُؼٍِٔخ‬ ‫ٜٗبٌخ‬ ً‫ك‬ ‫دائٔب‬ ّ‫رغزخذ‬
percentage‫اُٜ٘بٌخ‬ ً‫ك‬ ‫دائٔب‬ ّ‫رغزخذ‬ ًٜ‫ك‬ ‫ُزُي‬ ،
ٍ‫ا‬ ٕ‫ا‬ ‫ٗززًش‬ ‫ًٍق‬ ‫ارا‬“%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬shortestٍ‫ا‬ ٕ‫ٝا‬“%%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬longestٍ‫ٝا‬“#”
? ‫ًزُي‬ ‫ؼب‬ٌ‫ا‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 145
ٌٌٍٖٔ‫ا‬ ٕ‫ا‬ ‫اػزجشٗب‬ ‫ارا‬ ‫رُي‬ ‫ٗززًش‬ ٕ‫ا‬“%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬ ًٜ‫ك‬ ‫ٝاؽذح‬ ‫ػالٓخ‬ ‫ٓغشد‬ ًٛshortest
‫ثٍ٘ٔب‬“%%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬ ‫كجزُي‬ ‫اًجش‬ ‫اٜٗب‬ ‫اي‬ ٍٖ‫ػالٓز‬longest
VARIABLE:OFFSET:LENGTH
ٍ‫ا‬ ٙ‫ٛز‬formَٔ‫ثؼ‬ ّٞ‫رو‬cutٍ‫ا‬ ٖٓ ‫ٓؾذد‬ ‫ُؼذد‬charactersٍ‫ا‬ ً‫ك‬ ‫عضء‬ ‫اي‬ ٖٓvariable‫ٝال‬
ٌٌٕٞ ٕ‫ا‬ ‫ٌشزشؽ‬ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvariableٚ‫ٜٗبٌز‬ ٝ‫ا‬
ٍ‫ا‬ ٕ‫ًب‬ ‫كبرا‬variable=ahmedٍ‫ا‬ ٖٓ ‫عضء‬ ‫اي‬ ‫رؾذٌذ‬ ٌٍٖٔ‫ك‬variable: َ‫ٓض‬ ً‫اُجبه‬ ‫ٝؽزف‬
ahmٝ‫ا‬meٝ‫ا‬hme
ٍ‫ا‬ ٙ‫ٝٛز‬form: ً‫االر‬ ً٘‫رؼ‬
1-Variableٍ‫ا‬ ًٛٝ :variableَ‫ٓض‬ ‫ػٍِٜب‬ َٔ‫ع٘ؼ‬ ً‫اُز‬ahmed
2-Offsetٍ‫ا‬ ‫ػذد‬ ًٛٝ :characters( ‫ع٘زغبِٜٛب‬ ً‫اُز‬ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvariable‫ٝٛزا‬ )
ً‫ؽشك‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫اُؾ‬ ‫اسدٗب‬ ‫ارا‬ ‫اٗ٘ب‬ ً٘‫ٌؼ‬“me”ً‫ؽشك‬ َٛ‫ٗزغب‬ ٕ‫ا‬ ‫ٌغت‬“ah”ٌٌٕٞ ‫كجزُي‬
ٍ‫ا‬offset = 2
3-Lengthٍ‫ا‬ ‫ػذد‬ ٞٛٝ :charactersٍ‫ا‬ ٖٓ ‫ع٘غزخشعٜب‬ ً‫اُز‬variable‫اسدٗب‬ ‫كبرا‬
ً‫ؽشك‬ ‫اعزخشاط‬“me”ٍ‫ا‬ ٕ‫كب‬length=2
‫ؽشٝف‬ ‫اعزخشاط‬ ‫اسدٗب‬ ‫كبرا‬“med”ٍٖٓ‫ا‬variable : ahmed: ًُ‫ًبُزب‬ ٌٕٞ‫عز‬ ‫ظٍـخ‬ُ‫ا‬ ٕ‫كب‬
variable:OFFSET:LENGTH
ahmed:1:3
#VARIABLE
ٍ‫ا‬ ٙ‫ٛز‬ ّٞ‫رو‬ ‫ظبس‬‫ثبخز‬formٍ‫ا‬ ‫ػذد‬ ‫ثؼشع‬charactersٍ‫ا‬ ‫ٜٓ٘ب‬ ٌٕٞ‫رز‬ ً‫اُز‬value
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 146
RE-ASSIGNING PARAMETERS WITH SET
‫االٓش‬ ٖ‫ػ‬ ‫عبثوب‬ ‫رؾذص٘ب‬setٍ‫ا‬ ‫ػشع‬ ً‫ك‬ ّ‫ٌغزخذ‬ ‫اُزي‬shell variablesٚٓ‫ع٘غزخذ‬ ‫ٌُٝ٘٘ب‬ ،
‫اخش‬ ٌَ‫ثش‬ ٕ‫اال‬
ٍ‫كب‬set commandَٔ‫ػ‬ ً‫ك‬ ّ‫ٌغزخذ‬ ٕ‫ا‬ ٌٌٖٔassignَُparameters
ٍ‫ا‬ ّٞ‫ٌو‬script‫ثوشاء‬ ًُ‫اُزب‬3 parametersْٜ‫ٝػشػ‬
ًٌِ ‫ًٔب‬ ‫اُ٘زٍغخ‬ ٌٕٞ‫ٝر‬
‫ٝػؼ٘ب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝsetٍ‫ا‬ ً‫ك‬scriptًٌِ ‫ًٔب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 147
ًُ‫ًبُزب‬ ‫اُ٘زٍغخ‬ ‫ظجؼ‬‫كغز‬
‫كٔبرا‬? ‫ؽذس‬
ٍ‫ا‬ ّ‫هب‬ ٕ‫ا‬ ‫ثؼذ‬script‫ظٍض‬‫ثزخ‬$1, $2, $3ًُ‫ا‬one, two, three‫هبٓذ‬ ،set‫ظٍض‬‫رخ‬ ‫ثبػبدح‬
ٍ‫ا‬$1, $2, $3ًُ‫ا‬a, b, c
EXPLAINING THE DEFAULT FIELD SEPARATOR FIELD - IFS
ٍ‫ا‬ ٖ‫ػ‬ ‫اُغبثن‬ ً‫ك‬ ‫ؼب‬ٌ‫ا‬ ‫رؾذص٘ب‬IFS: input field separatorٍ‫ا‬ ًٛٝdelimiterٍ‫ثب‬ ‫اُخبطخ‬
cut command
ً٘‫ٌؼ‬ ‫ٝٛزا‬(space and tab and new line)‫ؽشٌن‬ ٖ‫ػ‬ ‫رـٍٍشٛب‬ ٌٌٖٔ ٌُٖٝ
IFS=”,”
ٍ‫ا‬ ٙ‫ٛز‬ ‫رـٍٍش‬ ٌٌٖٔ ٌُٖٝvalue‫ٓغ‬ َٓ‫اُزؼب‬ ‫ػ٘ذ‬script‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ ‫كوؾ‬ ٍٖ‫ٓؼ‬
(IFS=',';script.sh)
ٌٖ‫ٓغزذٌش‬ ٍٖ‫هٞع‬ ‫ٝعٞد‬ ‫ٝالؽع‬()ً‫ك‬ ْ‫عٍز‬ ‫اُزـٍٍش‬ ‫ٛزا‬ ٕ‫ا‬ ًِ‫ػ‬ ٍ‫ٌذ‬ ‫ٝٛزا‬subshell‫كوؾ‬
ٍ‫ا‬ ً‫ك‬ ‫ٍُٝظ‬shellً‫اُشئٍغ‬ٍ‫ا‬ ‫رزـٍش‬ ُٖٝIFS‫االطٍِخ‬
SETTING VARIABLES AS "READONLY"
ٍ‫ا‬ ‫ٛزا‬ ً‫ك‬ ‫ٝاخٍشا‬chapterٍ‫ا‬ ٍٖ‫ظ‬‫رؾ‬ ‫ًٍلٍخ‬ ٖ‫ػ‬ ‫ع٘زؾذس‬variable‫ٝعؼِٜب‬readonly‫ثؾٍش‬
ٍ‫ا‬ ‫اؿِوذ‬ ‫ارا‬ ‫اال‬ ‫رـٍٍشٛب‬ ٌٌٖٔ ‫ال‬shellَٔ‫ثؼ‬ ‫هٔذ‬ ٝ‫ا‬kill‫ُٜب‬
:‫ظٍـخ‬ُ‫ا‬ ٙ‫ٛز‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 148
Readonly NAME=ahmed
ٍ‫ا‬ ٕ‫كب‬ ‫ٝثزُي‬variable NAMEٍ‫ا‬ ‫رـٍٍش‬ ٌٌٖٔ ُٖvalueَٔ‫ػ‬ ً‫ؽز‬ ٝ‫ا‬ ‫ثٜب‬ ‫اُخبطخ‬unset‫ُٜب‬
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 149
CHAPTER 12. BITS AND PIECES –
TYING UP THE LOOSE ENDS
THE EVAL COMMAND
ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬commandٍ‫ا‬ ‫ٝاعزخذٓ٘ب‬pipe “|”
ls |wc –l
ٌٌٖٔ َٛ ٌٍُٖٝ‫ا‬ ‫ٝػغ‬“|”ً‫ك‬variableٍ‫ثب‬ ُٚ‫اعزجذا‬ ٌٌٖٔ ‫ثؾٍش‬variable? ًُ‫ًبُزب‬
PIPE=‟|‟
ls $PIPE wc -l
‫رُي‬ ‫رٞػؼ‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ٝا‬ ، ‫ال‬ ًٛ ‫االعبثخ‬
ٍ‫ا‬ ٕ‫ال‬sellَٔ‫ثؼ‬ ّٞ‫رو‬variable expansionٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫رو‬ ْ‫ص‬ ‫اٝال‬ls commandٕ‫ا‬ ٕٝ‫ثذ‬
َُ ‫اُغذٌذح‬ ‫اُؤٍخ‬ ‫هشاءح‬ ‫ٌؼٍذ‬variableْ‫ص‬‫ث‬ ّٞ‫ٌو‬ٖ‫ػ‬ ‫بُجؾش‬fileًٔ‫ٌغ‬„|‟ًٔ‫ٌغ‬ ‫ٝاخش‬wc،
ٍ‫ا‬ ‫ظٜش‬ ‫ُزُي‬error : No such file or directory
ٍ‫ا‬ ‫ٝظٍلخ‬ ً‫رؤر‬ ‫ٝٛ٘ب‬eval commandٍ‫ا‬ ‫هشاء‬ ‫ثبػبدح‬ ّٞ‫ٌو‬ ٜٞ‫ك‬command lineٍ‫ا‬ ٍ‫اعزجذا‬ ‫ثؼذ‬
variable
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 150
: ‫اخر‬ ‫مثال‬
ٍ‫ا‬ ٕ‫ا‬ ‫ٗالؽع‬evalٍ‫ا‬ ‫ثزشعٔخ‬ ّ‫هب‬pipe‫ؼب‬ٌ‫ا‬ُ‫ا‬ ً‫ك‬ ‫ٝالؽع‬ ،ٍ‫ا‬ ‫ٗلزٗب‬ ‫ػ٘ذٓب‬ ‫اٗ٘ب‬ ‫اُزبٍُخ‬ ‫ظٞسح‬
commandٕٝ‫ثذ‬echo‫ظٜش‬error
‫ٝػؼ٘ب‬ ‫ػ٘ذٓب‬ ٌُٖٝeval
: ‫اخر‬ ‫مثال‬
‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫ارا‬x=100ٝptr=x
ٍ‫ا‬ ‫هٍٔخ‬ ‫ػشػ٘ب‬ ‫كبرا‬ptrٍ‫ا‬ ّ‫ثبعزخذا‬echo‫عزغبٝي‬ ‫كغ٘غذٛب‬x‫ٍُٝظ‬100
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 151
ٍ‫ا‬ ‫ٗؼشع‬ ًٌُٝptr=100ًُ‫اُزب‬ ٌَ‫اُش‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫ؼغ‬ٗ ٕ‫ا‬ ‫ٌغت‬
eval echo $x
ٖ‫ػ‬ ‫ثبُزؼٌٞغ‬ ّٞ‫ع٘و‬ ‫اخش‬ ً٘‫ثٔؼ‬ ٝ‫ا‬xٍ‫ا‬ ً‫ك‬form
eval echo $$ptr
ًُ‫ًبُزب‬ ‫ظٜشد‬ ‫اُ٘زٍغخ‬ ٕ‫ا‬ ‫ع٘غذ‬ ‫ٌُٝ٘٘ب‬
‫ٝػؼ٘ب‬ ‫ػ٘ذٓب‬ ‫اٗ٘ب‬ ‫ع٘الؽع‬$$ٍ‫ا‬ ‫ثزشعٔخ‬ ّ‫هب‬echo $$ٍ‫ا‬ ‫اٜٗب‬ ًِ‫ػ‬PIDَ‫ظ‬‫ٗل‬ ٕ‫ا‬ ‫كٍغت‬ ‫ارا‬ ،
ٍ‫ا‬ ٍٖ‫ث‬$ّ‫ثبعزخذا‬ ‫ٝاُضبٍٗخ‬ ًُٝ‫اال‬{}
eval echo ${$ptr}
‫ٝٛ٘ب‬ٍ‫ا‬ ٕ‫كب‬shellٍ‫ا‬ ْٜ‫رل‬$ٍ‫ا‬ ‫خبسط‬ ‫أُٞعٞدح‬{}‫اٜٗب‬ ًِ‫ػ‬special character‫رغزطٍغ‬ ‫كال‬
ٍ‫ا‬echoْ‫رزشع‬ ٕ‫ا‬formًِ‫ػ‬ ‫رؾزٞي‬2 special characters‫ا‬ ٙ‫ٛز‬ ٕ‫ال‬ ،formً٘‫رؼ‬
${$ptr}ً٘‫رؼ‬ ‫ٝال‬${x}
‫ٝػغ‬ ‫ٌغت‬ ‫ُزُي‬“”ٍ‫ا‬ َ‫هج‬$
eval echo ${$ptr}
‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 152
RUNNING COMMANDS IN THE BACKGROUND USING&
ٍ‫ا‬ ٕ‫ال‬linuxٞٛmulti-task operating systemٖٓ ‫اًضش‬ ‫ر٘لٍز‬ ٌٍٖٔ‫ك‬commandً‫ك‬
‫اُٞهذ‬ ‫ٗلظ‬
ٍ‫ا‬ َ‫ٗغؼ‬ ٕ‫ا‬ ‫ٌغت‬ ‫رُي‬ ْ‫ٌز‬ ًٌُ ٌُٖٝprocessًٌُ ‫اُخِلٍخ‬ ً‫ك‬ َٔ‫رؼ‬ ‫ر٘لٍزٛب‬ ْ‫ٌز‬ ً‫اُز‬
ًِ‫ػ‬ َ‫ظ‬‫ٗؾ‬ ٕ‫ا‬ ‫ٗغزطٍغ‬curserٍ‫ا‬ ‫ٝٗ٘لز‬ ‫عذٌذ‬process‫اُغذٌذح‬
‫ا‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬‫ُشٓض‬“&”ٍ‫ا‬ ‫ثغبٗت‬commandًُ‫ًبُزب‬ ٍٝ‫اال‬
find / -name "ahmed" &
ٍ‫ا‬ ‫ظٜٞس‬ ‫ٝٗالؽع‬PIDٍ‫ثب‬ ‫اُخبص‬process
ٍ‫ا‬ ٙ‫ٛز‬ ‫ر٘لٍز‬ ٌٌٖٔ ‫ٜٓ٘ب‬ ‫ٗزؤًذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬form
echo $!

More Related Content

PDF
عشرون امتحان من امتحانات المحافظات + كتاب النشاط
PDF
Shell scripting
PPTX
Bash Shell Scripting
PPTX
Bash shell scripting
PDF
Unix Shell Script
PPT
Unix Shell Scripting Basics
PDF
Advanced Bash-Scripting Guide.pdf
PDF
8807290 shell-scripting
عشرون امتحان من امتحانات المحافظات + كتاب النشاط
Shell scripting
Bash Shell Scripting
Bash shell scripting
Unix Shell Script
Unix Shell Scripting Basics
Advanced Bash-Scripting Guide.pdf
8807290 shell-scripting

Similar to Bash scripting for beginner and intermediate (15)

PDF
2018 Cambridge Lower Second Progression Test Science Stage 7 QP Paper 1_tcm14...
PDF
How to-write-injection-proof-plsql-1-129572
PDF
Bash Beginners Guide
PDF
Abs guide
PDF
stiochiometry theoryd
PDF
Abs guide
PDF
WildWell_TechDataBook-2018web.pdf
PDF
Spring Reference
PDF
Manual tutorial-spring-java
PDF
Spring Reference
PDF
Castor Reference Guide 1 3 1
PDF
Learning Xslt A Handson Introduction To Xslt And Xpath 1st Edition Michael Ja...
PDF
Drilling technical data book
2018 Cambridge Lower Second Progression Test Science Stage 7 QP Paper 1_tcm14...
How to-write-injection-proof-plsql-1-129572
Bash Beginners Guide
Abs guide
stiochiometry theoryd
Abs guide
WildWell_TechDataBook-2018web.pdf
Spring Reference
Manual tutorial-spring-java
Spring Reference
Castor Reference Guide 1 3 1
Learning Xslt A Handson Introduction To Xslt And Xpath 1st Edition Michael Ja...
Drilling technical data book
Ad

More from Ahmed Gamil (16)

PDF
Cca131 Cloudera Hadoop administrator
PDF
Cca131 ahmed hussien
PDF
Red hat certificate_rhcsa7-rhel_ahmed_gamil_abbass
PDF
Red hat certificate_rhce7-rhel_ahmed_gamil_abbass
PDF
Oracle exalogic elastic cloud - cloud management
PDF
Oracle exalogic elastic cloud 2 system administration ed 2
PDF
Vmware certified professional 6 - data center virtualization certificate
PDF
Vmware certified professional 7 - cloud management and automation certificate
PDF
Cloudera Certified Hadoop Administrator cca-500 Ahmed gamil
PDF
Hadoop starter kit by Hadoop in real world by Udemy
PDF
Hadoop platform and application framework
PDF
Introduction to big data
PDF
ITIL Foundation
DOCX
Netapp Certified Storage Associate (NCSA)
PDF
Amazon Web service Aws
PDF
Vmware vsphere 5.1 Arabic
Cca131 Cloudera Hadoop administrator
Cca131 ahmed hussien
Red hat certificate_rhcsa7-rhel_ahmed_gamil_abbass
Red hat certificate_rhce7-rhel_ahmed_gamil_abbass
Oracle exalogic elastic cloud - cloud management
Oracle exalogic elastic cloud 2 system administration ed 2
Vmware certified professional 6 - data center virtualization certificate
Vmware certified professional 7 - cloud management and automation certificate
Cloudera Certified Hadoop Administrator cca-500 Ahmed gamil
Hadoop starter kit by Hadoop in real world by Udemy
Hadoop platform and application framework
Introduction to big data
ITIL Foundation
Netapp Certified Storage Associate (NCSA)
Amazon Web service Aws
Vmware vsphere 5.1 Arabic
Ad

Recently uploaded (20)

PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPT
Teaching material agriculture food technology
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Empathic Computing: Creating Shared Understanding
DOCX
The AUB Centre for AI in Media Proposal.docx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Encapsulation theory and applications.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Chapter 3 Spatial Domain Image Processing.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Advanced methodologies resolving dimensionality complications for autism neur...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Teaching material agriculture food technology
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Understanding_Digital_Forensics_Presentation.pptx
Unlocking AI with Model Context Protocol (MCP)
Empathic Computing: Creating Shared Understanding
The AUB Centre for AI in Media Proposal.docx
“AI and Expert System Decision Support & Business Intelligence Systems”
Encapsulation_ Review paper, used for researhc scholars
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
MIND Revenue Release Quarter 2 2025 Press Release
Encapsulation theory and applications.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy

Bash scripting for beginner and intermediate

  • 1. Shell Scripting Shell scripting for beginners and intermediate levels BASH SCRIPTING
  • 2. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 1 ‫الرحيم‬ ‫الرحمن‬ ‫اهلل‬ ‫بسم‬ ‫الكتاب‬ ‫هذا‬ ‫من‬ ‫االنتواء‬ ‫علي‬ ‫اعانين‬ ‫الذي‬ ‫هلل‬ ‫احلند‬ ‫ال‬ ‫لكتاب‬ ‫تزمجة‬ ‫هو‬ ‫الكتاب‬ ‫هذا‬Shell Scripting‫للنؤلف‬Hamish Whittal ‫ال‬ ‫يشزح‬ ‫كتاب‬ ‫وهو‬Shell Scripting‫وبسيط‬ ‫سول‬ ‫باسلوب‬‫املتوسط‬ ‫واملستوي‬ ‫للنبتدئني‬ ‫و‬ ‫برتمجتى‬ ‫قنت‬ ‫ولقد‬‫إ‬‫التوضيحية‬ ‫الصور‬ ‫بعض‬ ‫ضافة‬‫ويسز‬ ‫بسوولة‬ ‫املعلومى‬ ‫تصل‬ ‫حيت‬ ‫ا‬‫هذ‬ ‫حيقق‬ ‫ان‬ ‫متين‬‫وال‬ ‫املزجوة‬ ‫االستفادة‬ ‫الكتاب‬ ‫ا‬‫أ‬‫الكزيه‬ ‫اهلل‬ ‫وجى‬ ‫اال‬ ‫بى‬ ‫بغي‬ ‫دعائكه‬ ‫صاحل‬ ‫من‬ ‫تنسونا‬ ‫ال‬
  • 3. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 2 TABLE OF CONTENTS What is Shell Scripting ...................................................................................7 Introduction to info, man and the whatis database.............................................9 info pages..................................................................................................9 Man Pages ...............................................................................................12 The whatis Database.................................................................................13 Revising some Basic Commands ....................................................................14 The who command....................................................................................14 The w Command ......................................................................................16 The "date" command.................................................................................18 The 'echo' command .................................................................................19 Running a Shell Script..................................................................................20 File Commands.........................................................................................20 Wildcards..............................................................................................20 Returning to file commands........................................................................23 ls.........................................................................................................23 cp........................................................................................................24 mv.......................................................................................................24 wc .......................................................................................................24 nl.........................................................................................................24 System Commands...................................................................................24 The df and du commands........................................................................25 the fdisk command.................................................................................26 The free command.................................................................................26 the vmstat command .............................................................................27 the iostat command ...............................................................................27 stdin, stdout, stderr.....................................................................................28 stdin .......................................................................................................28 stdout.....................................................................................................29 Using stdin and stdout simultaneously .........................................................30 Appending to a file....................................................................................31 stderr......................................................................................................32
  • 4. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 3 stdout, stderr and using the ampersand)&( ..................................................33 Unamed Pipes ..........................................................................................34 Introduction................................................................................................36 What is the login shell?.................................................................................37 The job of the shell......................................................................................42 Command Interpreter................................................................................42 Allows for variables to be set......................................................................43 I/O redirection .........................................................................................43 Pipelines..................................................................................................43 Customising your environment ...................................................................43 Introduction................................................................................................44 What are regular expressions?.......................................................................44 The fullstop (period) ”.”.............................................................................44 Let's explore "sed" syntax..........................................................................46 Square brackets ( [ ] ), the caret ( ^ ) and the dollar ( $ ) .............................48 Using sed and pipes ..................................................................................50 The splat (asterisk) ) * ( ............................................................................52 The plus operator) + ( ...............................................................................53 Matching a specified number of the pattern using the curly brackets}{ ..........54 A detour - Using a different field separator in sed pattern matching ..............56 Using Word Encapsulating Characters .......................................................57 Returning from detour to our discussion on curly braces… .............................57 The tr command..........................................................................................57 The cut command........................................................................................59 The paste command.....................................................................................60 The uniq command ......................................................................................61 The Sort command ......................................................................................62 The grep command......................................................................................64 grep, egrep and fgrep ...............................................................................67 Section Techniques to use when writing, saving and executing Shell Scripts ........68 Detour: File Extension labels ...................................................................68 Comments in scripts...............................................................................69
  • 5. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 4 Variables ..............................................................................................69 Shebang or hashpling!# .........................................................................70 Exit......................................................................................................70 Null and unset variables..........................................................................71 Variable Expansion.................................................................................73 Environmental vs shell variables ..............................................................74 Arithmetic in the shell.............................................................................75 Introduction................................................................................................77 Single Quotes or "ticks"................................................................................77 Double Quotes ............................................................................................78 Backticks....................................................................................................80 Shell Arithmetic's with expr and back quotes...................................................81 Another tip when using quotation marks.........................................................82 Introduction................................................................................................84 Positional Parameters 0 and 1 through 9.........................................................86 Other arguments used with positional parameters............................................87 $# How many positional arguments have we got ?........................................87 $* display all positional parameters ............................................................87 Using the "shift" command - for more than 9 positional parameters.................88 Exit status of the previous command...........................................................88 Making Decisions.........................................................................................90 Testing for a true or false condition.............................................................90 The test command .................................................................................90 What is "true" and "false"........................................................................91 Different types of tests ..............................................................................92 Testing a string .....................................................................................92 Has a variable been set or not ?...............................................................93 Numeric Tests .......................................................................................95 File test................................................................................................96 Logical Operators ........................................................................................98 Conditions in the shell................................................................................100 Using the "if" statement...........................................................................100
  • 6. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 5 The "if" "then" "else" statement................................................................ 101 The "elif" statement ................................................................................102 The "case" statement..............................................................................102 Debugging your scripts...............................................................................103 The NULL command .............................................................................105 The || and && commands .....................................................................106 Introduction.............................................................................................. 109 The "for" loop.........................................................................................109 while and until loops ...............................................................................116 The break and continue commands ........................................................120 getopts Using arguments and parameters .....................................................123 Introduction.............................................................................................. 124 The read command....................................................................................124 Presenting the output.................................................................................127 The echo command.................................................................................127 The printf command...................................................................................128 The shell environmental variables pertaining to scripting.................................132 The Source command.................................................................................134 the exec command ....................................................................................136 Other methods of executing a script or a series of commands.......................136 Execution with Round brackets .............................................................. 136 Execution with Curly brackets................................................................ 137 Introduction.............................................................................................. 139 PARAM:-value........................................................................................... 139 PARAM:=value .......................................................................................... 141 ${param:+value}......................................................................................141 ${variable%pattern} .................................................................................142 MAGIC%%r*a........................................................................................... 143 variable#pattern .......................................................................................143 variable:OFFSET:LENGTH ...........................................................................145 #variable..................................................................................................145 Re-assigning parameters with set ................................................................ 146
  • 7. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 6 Explaining the default field separator field - IFS.............................................147 Setting variables as "readonly"....................................................................147 The eval command ....................................................................................149 Running commands in the background using& ..............................................152
  • 8. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 7 CHAPTER 1. INTRODUCTION TO THE COURSE STRUCTURE WHAT IS SHELL SCRIPTING ٌٕٞ‫ر‬ ٕ‫ا‬ ‫اسدد‬ ‫ارا‬system administratorٌٕٞ‫ر‬ ٕ‫ا‬ ‫ٌغت‬ ‫عٍذ‬َ‫أُض‬ ٍٞ‫ٌو‬ ‫ٌٛزا‬ ، ٍٞ‫ًغ‬ ‫ٝاعشع‬ َ‫ؼ‬‫ٝاك‬ ‫اثغؾ‬ ‫ثطشٌوخ‬ ‫رلٌش‬ ‫ؽٍ٘ئز‬ ٌٕٞ‫عز‬ ‫الٗي‬ ، ‫أُشٜٞس‬ ِْ‫رزؼ‬ ٕ‫ا‬ ‫اسدد‬ ‫ٝارا‬scripting‫ثطشٌوخ‬ ‫شًء‬ ‫اي‬ َ‫رلؼ‬ ‫كال‬manual‫ٛ٘بى‬ ّ‫ٓبدا‬script‫ٌغزطٍغ‬ ‫رُي‬ َٔ‫ػ‬ ِْٝ‫ٗزؼ‬ ًٌُ ٌُٖscriptingِْ‫ٗؼ‬ ٕ‫ا‬ ‫ٌغت‬ٍ‫ا‬ ٞٛ ‫ٓب‬shell???? ٍ‫ا‬shellَُ ْ‫ٓزشع‬ ٞٛcommandsٍ‫ثب‬ ٍٚ‫شج‬DOSٍ‫ا‬ ٍ‫ثبعزوجب‬ ّٞ‫ٌو‬ ‫ؽٍش‬ ،commands ٍ‫ا‬ ‫رٌزجٜب‬ ً‫اُز‬userٍ‫ا‬ ًِ‫ػ‬command line‫ٌٝزشعٜٔب‬ ٍ‫ا‬ ً‫ك‬ ‫االٓش‬ ‫ٛزا‬ ‫ثٌزبثخ‬ ‫هٔ٘ب‬ ‫كبرا‬terminal # ls –l ٍ‫ا‬ ّٞ‫ٌو‬ ‫ًٍق‬linux‫ثز٘لٍز‬ً٘‫ٓؼ‬ ‫ٌؼشف‬ ‫ًٍٝق‬ ، ‫االٓش‬ ‫ٛزا‬“-l”‫عٍظٜش‬ ‫اُ٘برظ‬ ٕ‫ا‬ ‫ٌؼشف‬ ‫ًٍٝق‬ ، ، ‫اُشبشخ‬ ًِ‫ػ‬??? ‫ظذكخ‬ُ‫ثب‬ ‫ٌؼشف‬ َٛ ٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٌؼشف‬ َ‫ث‬ ، ‫ظذكخ‬ُ‫ثب‬ ‫ٌؼشف‬ ‫ال‬ ٞٛ ، ‫ال‬shell ٍ‫ٝا‬shell scriptٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ٞٛcommandsٍ‫ا‬ َ‫ثذاخ‬ ‫اُجؼغ‬ ‫ؼٜب‬‫ثؼ‬ ‫ٓغ‬ ‫رٌزت‬ ً‫اُز‬shell ًٌُ ‫ٝاؽذ‬ ‫ِٓق‬ ً‫ك‬ ْٜ‫ٝػؼ‬ ْ‫ٌٝز‬ٍ‫ا‬ َ‫ًٔض‬ ِٚ‫ٓض‬ ،ٍٚ٘‫ٓؼ‬ ‫ثٞظٍلخ‬ ‫ٌوٞٓٞا‬DOS batch : ٌٖ‫االٓش‬ ٌٖ‫ٛز‬ ‫ر٘لٍز‬ ‫اسدٗب‬ ‫ٝارا‬ # free ‫ٝاالٓش‬ # df -h ‫ؽذح‬ ًِ‫ػ‬ ‫آش‬ ًَ ‫ثز٘لٍز‬ ّٞ‫ٗو‬ ٕ‫ا‬ ًٛ ًُٝ‫اال‬ ‫كبُطشٌوخ‬
  • 9. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 8 ‫ػالٓخ‬ ‫ثٞػغ‬ ‫ٝرُي‬ ‫اُغطش‬ ‫ٗلظ‬ ‫كت‬ ‫ثؼغ‬ ‫ٓغ‬ ٌٖ‫االٓش‬ ‫ثز٘لٍز‬ ّٞ‫ٗو‬ ٕ‫ا‬ ٝ‫ا‬“;”‫اُؼالٓخ‬ ‫ٗلظ‬ ًٛٝ ٍ‫ا‬ ٍٖ‫ث‬ ‫رٞػغ‬ ً‫اُز‬E-mail address‫شؾض‬ ٖٓ ‫الًضش‬ ‫سعبُخ‬ َ‫ٗشع‬ ٕ‫ا‬ ‫ٗشٌذ‬ ‫ػ٘ذٓب‬ ‫ٝؽٜذ‬ ‫ٝهذ‬ ‫ٝرٞكش‬ َ‫ؼ‬‫اك‬ ‫ؽشٌوخ‬ ‫ٛ٘بى‬ ‫ٓبصاُذ‬ ٌُٖٝ ، ‫ٝاُٞهذ‬ ‫اُغٜذ‬ ٖٓ ٍَِ‫اُو‬ ‫رٞكش‬ ‫اُطشٌوخ‬ ٙ‫كٜز‬ ‫ارا‬ ‫أُِق‬ ْ‫اع‬ ‫ثٌزبثخ‬ ‫كوؾ‬ ّٞ‫ٗو‬ ‫ر٘لٍزٛٔب‬ ‫ٗشٌذ‬ ‫ٝػ٘ذٓب‬ ، ‫ِٓق‬ ً‫ك‬ ٌٖ‫االٓش‬ ٌٖ‫ٛز‬ ‫ٝػغ‬ ًٛٝ ‫اال‬ ، ‫اًضش‬ ٝ ، ‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫كزظٜش‬ًٔ‫ٌغ‬ ‫أُِق‬ ‫ٛزا‬script
  • 10. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 9 INTRODUCTION TO INFO, MAN AND THE WHATIS DATABASE ٍ‫ا‬ ًِ‫ػ‬ ‫اُزؼشف‬ ‫أُلٍذ‬ ٖٓman pagesٍ‫ٝا‬info pagesٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ َ‫هج‬scriptsٍ‫ٝا‬ ، man pagesَُ ‫ظبس‬‫اخز‬ ًٛmanual pagesٍ‫ا‬ ٖ‫ػ‬ ‫ًضٍشح‬ ‫ٓؼِٞٓبد‬ ًِ‫ػ‬ ‫ٝرؾزٞي‬ commandsٚ‫ٗؾزبع‬ ‫ٓب‬ ‫ٗغذ‬ ‫ال‬ ‫هذ‬ ٌٍُٖٝ‫ا‬ ً‫ك‬man pagesٍ‫ا‬ ‫ٗؾزبط‬ ‫هذ‬ ‫ُزُي‬info pages INFO PAGES ٍ‫ا‬info pagesٍ‫ا‬ ‫رشجخ‬man pages‫ٝؽشٌوخ‬ ،‫اًضش‬ ‫ٓؼِٞٓبد‬ ًِ‫ػ‬ ‫رؾزٞي‬ ‫اٜٗب‬ ‫اال‬ ‫ًضٍشا‬ ٍ‫ا‬ ّ‫اعزخذا‬info pages‫ثٌزبثخ‬ ّٞ‫ك٘و‬ ٍٖ‫ٓؼ‬ ‫آش‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ٗغزؼشع‬ ٕ‫ا‬ ‫اسدٗب‬ ‫كبرا‬ ، ‫ثغٍطخ‬ : ٌَ‫اُش‬ ‫ثٜزا‬ ‫االٓش‬ # info ls ٌٌٖٔٝ‫ا‬ٖٓ ‫ٓغٔٞػخ‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫عزؼشاع‬ٍ‫ا‬commandsٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫اُز‬text files‫ٓضال‬ ‫ؽشٌن‬ ٖ‫ػ‬ # info coreutils
  • 11. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 10 ٍ‫ٝا‬coreutils‫ظبس‬‫اخز‬ ٞٛcore utilitiesٍ‫ا‬ ٝ‫ا‬ ‫االدٝاد‬ ‫ٓغٔٞػخ‬ ًٛٝcommandsً‫اُز‬ ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ ّ‫رغزخذ‬text filesَ‫ٓض‬ls, mv, cp, …… ٌَ‫اُش‬ ‫ٛزا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬ٍ‫ا‬info pageَُcoreutils: ًِ‫ػ‬ ‫رؾزٞي‬ ً‫ٝاُز‬ File: coreutils.infoٍ‫ا‬ ْ‫اع‬ ٞٛٝfileٍ‫ا‬ ٙ‫ٛز‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬Info Node: Top‫ًِٝٔخ‬nodeً٘‫رؼ‬topicٝtopٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ً٘‫رؼ‬topicٍٝ‫ا‬ ٞٛtopicً‫ك‬ ٍ‫ا‬ ٙ‫ٛز‬info page
  • 12. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 11 Next: introductionٍ‫ا‬ ٕ‫ا‬ ً٘‫ٝرؼ‬topicٔ‫اع‬ ‫اُزبٍُخ‬‫ٜب‬introductionٍ‫ا‬ ًُ‫ا‬ ‫ُِٝزٛبة‬ topic‫اُؾشف‬ ّ‫ٗغزخذ‬ ‫اُزبٍُخ‬“n” Previous: disk usageٍ‫ا‬ ٕ‫ا‬ ً٘‫ٝرؼ‬topic‫اعٜٔب‬ ‫اُغبثوخ‬disk usageٌٌٖٔٝ ‫اُؾشف‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫اٍُٜب‬ ٍ‫االٗزوب‬“p” Up : (dir)ٍ‫ا‬ ً٘‫ٝرؼ‬info page‫اُؾشف‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫اٍُٜب‬ ٍ‫االٗزوب‬ ٌٌٖٔٝ ‫اُغبثوخ‬“u” ‫ا‬ ‫ٝٗالؽع‬ًٔ‫ٌغ‬ ٕ‫ػ٘ٞا‬ ‫ٛ٘بى‬ ٕmenuٍ‫ا‬ ‫هبئٔخ‬ ًٛٝtopicsٙ‫ٛز‬ ً‫ك‬ ‫أُٞعٞدح‬ٍ‫ا‬ info pageًٝ‫اُز‬ٍْٜ٘‫ث‬ َ‫ٗز٘و‬ ٕ‫ا‬ ٌٌٖٔ ‫اي‬ ًُ‫ا‬ ‫ٓجبششح‬ ‫اُزٛبة‬ ٌٖٔ‫ٝث‬topicٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬ ٍٝ‫اُ٘ض‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ظلؾخ‬ُ‫ا‬ ً‫ك‬topic ٕ‫ػ٘ٞا‬ ‫رؾذ‬ ‫أُٞعٞد‬menuًِ‫ػ‬ ‫ؼـؾ‬ُ‫ا‬ ْ‫ص‬enter‫اُزٛبة‬ ‫ٓضال‬ ‫اسدٗب‬ ‫كبرا‬ ،summarize files topic‫ؼـؾ‬ٗ ْ‫ص‬ ٍُٚ‫ا‬ ْٜ‫ثبُغ‬ ٍٝ‫ثبُ٘ض‬ ّٞ‫ك٘و‬enter ٍ‫ا‬ ‫طلؾخ‬ ًُ‫ا‬ ‫اُؼٞدح‬ ‫ٗشٌذ‬ ‫ٝػ٘ذٓب‬coreutils‫اُشئٍغٍخ‬Up : dir‫ؼـؾ‬ٗ“u” ‫ظلؾخ‬ُ‫ا‬ ‫ثذاٌخ‬ ًُ‫ا‬ ‫اُزٛبة‬ ‫اسدٗب‬ ‫ٝارا‬node: top‫ؼـؾ‬ٗ“t” ٍ‫ا‬ ً‫ك‬ ٍٚ٘‫ٓؼ‬ ‫ًِٔخ‬ ٖ‫ػ‬ ‫ُِٝجؾش‬info page‫ثٌزبثخ‬ ّٞ‫ٗو‬“/”‫اُجؾش‬ ‫أُشاد‬ ‫أٌُِخ‬ ‫ٌزجؼٜب‬ ٘‫ػ‬‫ٜب‬
  • 13. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 12 /Directory ّ‫ٗغزخذ‬ ‫اخشي‬ ‫ٓشح‬ ‫أٌُِخ‬ ‫ٗلظ‬ ٖ‫ػ‬ ‫ٗجؾش‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬ /<ENTER> ٍ‫ا‬ ٖٓ ‫ُِٝخشٝط‬info page‫ٌٗزت‬“q” ّ‫ٗغزخذ‬ ًِ‫ُالػ‬ ‫طلؾخ‬ ٍ‫ُالٗزوب‬“backspace” ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬helpٍ‫ثب‬ ‫اُخبص‬info page‫ٌٗزت‬“?”ٍ‫ا‬ ٖٓ ‫ُِٝخشٝط‬help‫ٌٗزت‬ “CTRL+x+0” MAN PAGES ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬Info pages‫اُطشٌوخ‬ ٌُٖٝ ، ‫أُغبػذح‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫اػبكٍخ‬ ‫ٝعٍِخ‬ ًٛٝ ٍ‫ا‬ ًٛ ‫اٌٍُِ٘ظ‬ ً‫ك‬ ‫أُؼِٞٓبد‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫االعبعٍخ‬man pages ٍ‫ا‬ ٕ‫ا‬ ‫ٝاُؾوٍوخ‬man pageٍ‫ا‬ ٍ‫خال‬ ٖٓ َٔ‫رؼ‬less commandٍ‫ا‬ ٚ‫ٌشج‬ ‫اُزي‬more commandًِ‫ػ‬ ‫ٌؾزٞي‬ ٌُٚ٘ٝoptions‫اًضش‬ ٍ‫ا‬ ٍَ‫ُٝزشـ‬man pageٓ‫اال‬ ّ‫ٗغزخذ‬: ‫ش‬ man <command> ‫رغبٝي‬ ًٛٝ man ls | less ٍ‫ا‬ ً‫ك‬ ‫ًِٔخ‬ ٖ‫ػ‬ ‫ٗجؾش‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬man page‫ثٌزبثخ‬ ّٞ‫ٗو‬“/”‫أُشاد‬ ‫أٌُِخ‬ ‫ٌزجؼٜب‬ ٍ‫ا‬ ً‫ك‬ ‫ٌؾذس‬ ‫ًٔب‬ ‫ػٜ٘ب‬ ‫اُجؾش‬info pageَٔ‫ثؼ‬ ّٞ‫رو‬ ‫ٛ٘ب‬ ‫ٌُٜٝ٘ب‬forward search‫اي‬ ٍ‫ا‬ ٍٝ‫ا‬ ٖٓ ٌٌٕٞ ‫أٌُِخ‬ ٖ‫ػ‬ ‫اُجؾش‬ ٕ‫ا‬page‫اخشٛب‬ ًُ‫ا‬ ٗ‫اسد‬ ‫ٝارا‬َٔ‫ػ‬ ‫ب‬reverse search‫اُؼالٓخ‬ ّ‫ثبعزخذا‬ ّٞ‫ك٘و‬“?”ٖٓ ‫ثذال‬“/”‫ٌزجؼٜب‬ ْ‫ص‬ ٙ‫اػال‬ ًُ‫ا‬ ‫أُِق‬ َ‫اعل‬ ٖٓ ‫ػٜ٘ب‬ ‫اُجؾش‬ ‫أُشاد‬ ‫أٌُِخ‬ ٍ‫ا‬ ّ‫ٗغزخذ‬ ‫رٍِٜب‬ ً‫ُِز‬ ‫طلؾخ‬ ٖٓ ٍ‫ُٝالٗزوب‬space bar ‫اُؾشف‬ ّ‫ٗغزخذ‬ ‫رغجوٜب‬ ً‫ُِز‬ ‫طلؾخ‬ ٖٓ ٍ‫ُٝالٗزوب‬“b” ٍ‫ا‬ ٖٓ ‫ُِٝخشٝط‬man page‫ٌٗزت‬“q” ٍٞ‫ظ‬‫ُِٝؾ‬ٍ‫ا‬ ّ‫اعزخذا‬ ‫ًٍلٍخ‬ ً‫ك‬ ‫ٓغبػذح‬ ًِ‫ػ‬man pages‫ؼـؾ‬ٗ ‫ثذاخِٜب‬ َ‫ٝاُز٘و‬“h” ٍ‫ا‬ ٞٛ ‫أُؼشٝع‬ ٕ‫ا‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ٖٓ ‫ٝٗالؽع‬ ،help‫ثبالٓش‬ ‫اُخبص‬lessَُ ‫ٍُٝظ‬man pageٍ‫ا‬ ٕ‫ال‬man pageٍ‫ا‬ ‫ثٞاعطخ‬ ‫ػشػٜب‬ ْ‫ٌز‬ ‫ػبدٌخ‬ ‫طلؾخ‬ ‫ٓغشد‬ ًٛless command
  • 14. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 13 ٍ‫ا‬ ْ‫ٝر٘وغ‬Man page‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ًُ‫ا‬ٍsections: 1-Name sectionٍ‫ا‬ ْ‫اع‬ ٞٛ :command 2-SYNOPSIS section‫ٝاُجغٍطخ‬ ‫ظشح‬‫أُخز‬ ‫ظٞسح‬ُ‫ا‬ ً٘‫رؼ‬ ًٛٝ ‫ظبس‬‫االخز‬ ٝ‫ا‬ ‫أُِخض‬ ٝ‫ا‬ : ‫االٓش‬ ّ‫العزخذا‬ 3-DESCRIPTION section‫االٓش‬ ‫ٝظٍلخ‬ ‫ٌششػ‬ ‫اُزي‬ ‫اُغضء‬ ٞٛٝ : 4-SEE ALSO section‫ا‬ ٖٓ ‫ٓضٌذ‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫اُطشم‬ ‫ثؼغ‬ ‫ٌٞػؼ‬ ‫اُغضء‬ ‫ٝٛزا‬ :ٍَ‫ُزلبط‬ THE W HATIS DATABASE Whatisٞٛcommandٍ‫ا‬ ‫ٝظٍلخ‬ ‫ثٔؼشكخ‬ ‫ُ٘ب‬ ‫ٌغٔؼ‬command‫ؽٍش‬ ‫ظش‬‫ٝٓخز‬ ‫عشٌغ‬ ٌَ‫ثش‬ ٍ‫ا‬ ًَ ً‫ك‬ ‫ثبُجؾش‬ ّٞ‫ٌو‬manual pagesٍ‫ا‬ ً‫ك‬systemٍ‫ثب‬ ‫اُخبص‬ ‫اُغضء‬ ٖ‫ػ‬name sectionٍ‫ا‬ ٙ‫ٛز‬ ً‫ك‬ ‫أُٞعٞدح‬man pageً‫ك‬ ْٜ‫ؼؼ‬‫ٝر‬ ْٜ‫ثزشرٍج‬ ّٞ‫رو‬ ْ‫ص‬database‫خبطخ‬ ٔ‫ػ‬ ْ‫ٌٝز‬َupdateٝ‫ا‬rebuild‫ُٜب‬at night whatis nl
  • 15. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 14 َٔ‫ثؼ‬ ّٞ‫ٗو‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬updateَُdatabase: ‫االٓش‬ ّ‫ٗغزخذ‬ ‫ٌذٌٝب‬ makewhatis -u -w REVISING SOME BASIC COMMANDS ٍ‫ا‬ ‫ثؼغ‬ ٖ‫ػ‬ ‫اُغضء‬ ‫ٛزا‬ ً‫ك‬ ‫ٗزؾذس‬ ‫عٞف‬basic commandsٍ‫ا‬ ٌٕٞ‫ٌز‬ ‫ٓٔب‬ ‫ٓؼشكخ‬ ٞٛ ‫ٛ٘ب‬ ‫ٝاُـشع‬commands ‫ٗغزخ‬ ‫ًٍٝق‬ٚٓ‫ذ‬ THE W HO COMMAND ٍ‫ا‬ ‫ٛزا‬ ّ‫ٌغزخذ‬commandٍ‫ا‬ ‫ٓؼشكخ‬ ً‫ك‬logged userٍ‫ا‬ ًِ‫ػ‬systemٙ‫اعزخذٓ٘ب‬ ‫ٝارا‬ ، ‫اي‬ ٕٝ‫ثذ‬optionsٝ‫ا‬arguments: ًُ‫اُزب‬ ‫ُ٘ب‬ ‫كغٍظٜش‬ ٍ‫ا‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٌٖٔٝhelpٍ‫ا‬ ‫ُؼشع‬optionsٍ‫ا‬ ‫ٛزا‬ ‫ٓغ‬ ّ‫رغزخذ‬ ٕ‫ا‬ ٌٌٖٔ ً‫اُز‬command who --help
  • 16. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 15 ٍ‫ا‬ ‫ُٝؼشع‬logged usersًَ ٕ‫ػ٘ٞا‬ ‫اظٜبس‬ ‫ٓغ‬column who -H ‫ُٝؼشع‬short listٍ‫ا‬ ٖ‫ػ‬logged users who -s ٍ‫ا‬ ‫ُٝؼشع‬logged usersٍ‫ٝا‬Process ID‟s
  • 17. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 16 who -u ‫ٝارا‬‫اعزخذٓ٘ب‬“-H”‫ٓغ‬“-u”ٍ‫ا‬ ْ‫اع‬ ‫ٌظٜش‬ ‫كغٞف‬columnsٍ‫ا‬ ٝ‫ا‬headingٕ‫ا‬ ‫ٗغذ‬ ‫ٝعٞف‬ ، ٍ‫ا‬columnًٔ‫ٌغ‬ ‫اُشاثغ‬IDLEٍ‫ا‬ َ‫ٌٔض‬ ٞٛٝ ،idle timeٌَُuserٍ‫ا‬ ٕ‫ا‬ ً٘‫ٌٝؼ‬userُْ ٍ‫ا‬ ّ‫ٌغزخذ‬systemٍٚ٘‫ٓؼ‬ ٍٚ٘ٓ‫ص‬ ‫ُلزشح‬ ٍ‫ا‬ ّٞ‫ٌو‬ ُْ ‫ٝارا‬userٍ‫ا‬ ّ‫ثبعزخذا‬system‫ُٔذح‬15 min.ُٚ ‫ٌؾذس‬logout who -uH THE W COMMAND ٍ‫ا‬ ٞٛ ‫ٓب‬w command? ٍ‫ا‬ ٖ‫ػ‬ ّ‫ثبالعزؼال‬ ‫هٔ٘ب‬ ‫ارا‬w command‫االٓش‬ ّ‫ثبعزخذا‬whatis‫اال‬ ‫كغ٘غذ‬: ً‫ر‬ ٍ‫ا‬ ًِ‫ػ‬ ‫دخِٞا‬ ٌٖ‫اُز‬ ‫االشخبص‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ‫االٓش‬ ‫ٛزا‬ ٕ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬system‫كؼِٞا‬ ‫ٝٓبرا‬
  • 18. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 17 ٕ‫ٌغٍٔب‬ ًٗ‫ٝاُضب‬ ٍٝ‫اال‬ ‫اُغطش‬ ٕ‫ا‬ ‫اُظٞسح‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬headingٝ‫ا‬header User ٍ‫ا‬ ْ‫اع‬logged user tty ٍ‫ا‬ ْ‫اع‬ttyٍ‫ا‬ ‫ػٍِٜب‬ ًُ‫ا‬user login@ ٍ‫ا‬ ٍٞ‫دخ‬ ‫رٞهٍذ‬User idle ‫اُزي‬ ‫اُٞهذ‬َُ ّ‫اعزخذا‬ ‫اخش‬ ‫ٓ٘ز‬ ‫ٓش‬terminal JCPU ٍ‫ا‬ ‫عٍٔغ‬ ٚ‫هؼز‬ ‫اُزي‬ ٖٓ‫اُض‬processesٍ‫ٝا‬child processesٍ‫ا‬ ّ‫اعزخذا‬ ً‫ك‬terminal PCPU ٍ‫ا‬ ٚ‫هؼز‬ ‫اُزي‬ ٖٓ‫اُض‬active processٍ‫ا‬ ّ‫اعزخذا‬ ً‫ك‬ ‫اُؾبٍُخ‬terminal What ٍ‫ا‬ ْ‫اع‬processٍ‫ا‬ ٝ‫ا‬commandَٔ‫ٌؼ‬ ‫اُزي‬ ٍ‫ثب‬ ‫هبئٔخ‬ ٙ‫ٝٛز‬optionsٍ‫ا‬ ‫ٛزا‬ ‫ٓغ‬ ‫أُغزخذٓخ‬command -h ٍ‫ا‬ ‫ظٜٞس‬ ‫رٔ٘غ‬header -u Ignores the username while figuring out the current process and cpu times. To demonstrate this, do a "su" and do a "w" and a "w -u". -s ‫ثؼشع‬ ّٞ‫ٌو‬short formatٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ‫ٝال‬login timeٍ‫ٝا‬JCPU‫ٝا‬ٍPCPU -f ‫ظٜٞس‬ ‫ٌٔ٘غ‬from‫اُ٘زٍغخ‬ ٖٓ -V ٍ‫ا‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ٌؼشع‬version user ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ٌؼشع‬userٍٖ‫ٓؼ‬
  • 19. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 18 ٍ‫ا‬ ٌٖ‫رخض‬ ْ‫ٌٝز‬logged user‫ِٓق‬ ً‫ك‬/etc/utmp ٍ‫ا‬ ‫ٓؾبٝالد‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ٌٖ‫رخض‬ ْ‫ٌٝز‬login‫ِٓق‬ ً‫ك‬ ‫اُلبشِخ‬/etc/security/failedlogin THE "DATE" COMMAND ٗ‫ا‬ ً‫ك‬ ‫اُغجت‬ٍ‫ا‬ ٙ‫ٛز‬ ‫ٗغزشعغ‬ ‫٘ب‬commandsٍٝ‫ا‬ َٔ‫ثؼ‬ ّٞ‫ع٘و‬ ‫اٗ٘ب‬ ًٛ ‫اُجغٍطخ‬scriptً‫ك‬ ٍ‫ا‬ ‫ٛزا‬courseٍ‫ا‬ ٙ‫ثٜز‬commands ًُ‫ا‬ ‫ٝع٘ؾزبط‬ٍ‫ا‬date commandٍ‫ا‬ ً‫ك‬scripting‫ٗؼشف‬ ٕ‫ا‬ ‫ٗؾزبط‬ ‫دائٔب‬ ‫الٗ٘ب‬‫ثذ‬ ‫ٓزى‬ٍ‫ا‬ ‫أ‬ scriptٍ‫ا‬ ّٞ‫ٌو‬ ‫ًٔب‬ ، ًٜ‫اٗز‬ ً‫ٝٓز‬ َٔ‫اُؼ‬ ً‫ك‬date commandٍٔ‫اُغ‬ ‫االشٍبء‬ ‫ثؼغ‬ َٔ‫ثؼ‬‫ِخ‬ ٍ‫ا‬ ٖٓ ٌَٞ‫اُزؾ‬ َ‫ٓض‬ ‫ٗؾزبعٜب‬ ً‫اُز‬unix timeٍ‫ا‬ ًُ‫ا‬human timeٍٖ‫ث‬ ٌَٞ‫اُزؾ‬ ٌٌٖٔ ‫ًٔب‬ ، ‫أُخزِلخ‬ ‫اُزبسٌخ‬ ‫ػشع‬ ‫طٍؾ‬ # info date ٍ‫ا‬ ًُ‫ا‬ ‫ٗظشٗب‬ ُٞٝform: ًُ‫اُزب‬ ٌَ‫اُش‬ ‫كغ٘غذ‬ ًُٝ‫اال‬ date [+ ] ‫يساوي‬ ‫وىو‬ date + “ “ ٍ‫ا‬ ‫ٝػغ‬ ْ‫ٌٝز‬formٍ‫ا‬ ٍٖ‫ث‬ ‫أُطِٞثخ‬“ ”
  • 20. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 19 THE 'ECHO' COMMAND ‫االٓش‬ ٞٛ ٕ‫اال‬ ٚ٘‫ػ‬ ‫ع٘زؾذس‬ ‫آش‬ ‫اخش‬echo‫اي‬ ً‫ك‬ ٚ٘‫ػ‬ ً٘‫ؿ‬ ‫ٝال‬ ‫االٍٛٔخ‬ ً‫ك‬ ‫ؿبٌخ‬ ‫آش‬ ٞٛٝscript ٍ‫ا‬ ٕ‫ا‬commandsٍ‫ا‬ ًِ‫ػ‬ ‫ثغُٜٞخ‬ ‫ر٘لٍزٛب‬ ٌٌٖٔ ‫عبثوب‬ ‫ػٜ٘ب‬ ‫رؾذص٘ب‬ ً‫اُز‬terminal‫ٝسإٌخ‬ ً‫ك‬ ‫ٝػؼ٘بٛب‬ ‫ارا‬ ٌُٖٝ ،‫ؼب‬ٌ‫ا‬ ‫ٗزٍغزٜب‬script‫اُشب‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫رظٜش‬ ِٖ‫ك‬، ‫شخ‬‫ؽشٌوخ‬ ًٛ ‫كٔب‬ ‫ارا‬ ??? ‫اُشبشخ‬ ًِ‫ػ‬ ‫اظٜبسٛب‬ ‫االٓش‬ ّ‫اعزخذا‬ ًٛ ‫اُطشٌوخ‬echo‫اُشبشخ‬ ًِ‫ػ‬ ‫أٌُِبد‬ ‫ثطجبػخ‬ ّٞ‫ٌو‬ ‫اُزي‬ ٝechoٌٌٕٞ ‫اُٜٝٔب‬ ، ٍٖ‫ٗٞػ‬ ُٚbuilt in the shellٌٌٕٞ ‫ٝاالخش‬externalً‫ٓز‬ ‫الؽوب‬ ‫ٝع٘ؼشف‬ ‫ا‬ ‫ػشع‬ ً‫ك‬ ٚٓ‫ٗغزخذ‬ ‫كغٞف‬ ‫ثزُي‬ ّٞ‫ٗو‬ ٕ‫ا‬ ًُ‫ا‬ ٌُٖٝ ‫ٗٞع‬ ًَ ّ‫ٗغزخذ‬: ًُ‫ًبُزب‬ ‫ُزبسٌخ‬ ًُ‫ًبُزب‬ ‫اُ٘زٍغخ‬ ‫ٝعزظٜش‬
  • 21. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 20 RUNNING A SHELL SCRIPT ٍ‫ا‬ ٍَ‫ُزشـ‬scriptُٚ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬execution permissionsّ‫اعزخذا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ : ‫االٓش‬ Chmod u+x script.sh Chmod g+x script.sh Chmod o+x script.sh Chmod x script.sh ٝ‫اٌُٞ٘ذ‬ ٖ‫ػ‬ ‫ٌخزِق‬ ‫ثبُطجغ‬ ‫ٝٛزا‬‫آزذاد‬ ُٚ ‫ِٓق‬ ‫اي‬ ٕ‫ا‬ ‫ٌؼزجش‬ ‫اُزي‬ ‫ص‬.exeٝ‫ا‬.comٞٛexecutable fileٚ‫ث‬ ‫ٍُظ‬ ‫اٌٍُِ٘ظ‬ ‫ثٍ٘ٔب‬extensionsٍ ‫ٝاعزخذآ٘ب‬“.sh”‫ًـ‬ ‫ٍُظ‬extensionٞٛ ‫ٝاٗٔب‬ ٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ًِ‫ػ‬ ‫كوؾ‬ ‫رٍٍٔض‬fileٞٛscript‫ر٘لٍز‬ ْ‫كغٍز‬ ‫اصُ٘بٛب‬ ُٞٝ ، ‫كوؾ‬ ‫ر٘ظٍٍٔخ‬ ‫ػٍِٔخ‬ ‫اٜٗب‬ ‫اي‬ ٍ‫ا‬script‫ؼب‬ٌ‫ا‬ ‫ػذ‬ ‫ٝٛ٘بى‬ٍ‫ا‬ ٍَ‫ُزشـ‬ ‫ؽشم‬ ‫ح‬script: َ‫ٓض‬ ./script.sh OR sh script.sh OR ‫ال‬ ‫في‬ ‫وضعو‬ ‫يمكه‬/bin‫استخدام‬ ‫بدون‬ ‫وتنفيذه‬“./” FILE COMMANDS ٍ‫ا‬ ٖ‫ػ‬ ‫اُغضء‬ ‫ٛزا‬ ً‫ك‬ ٌِْ‫ع٘ز‬commandsٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫اُز‬filesَ‫ٓض‬“ls”ّ‫ٌغزخذ‬ ‫اُزي‬ َٔ‫ُؼ‬Listingَُfiles W ILDCARDS
  • 22. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 21 ٍ‫ا‬wildcard‫ٓغٔٞػخ‬ ًٍٛ‫ا‬ ٖٓcharacters‫ُ٘ب‬ ‫رغٔؼ‬ ً‫اُز‬ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ثبُؾ‬filesً‫اُز‬ ًٜ‫ر٘ز‬ ٝ‫ا‬ ٍٖ‫ٓؼ‬ ‫ثؾشف‬ ‫رجذأ‬ ً‫اُز‬ ‫أُِلبد‬ َ‫ٓض‬ ‫ٗشٌذٛب‬ ً‫اُز‬ ‫أُٞاطلبد‬ ‫ؽغت‬ ‫رؾذٌذا‬ ‫ػٜ٘ب‬ ‫ٗجؾش‬ ٍٖ‫ٓؼ‬ ‫ثؾشف‬ ٍ‫ا‬ ‫ثؼغ‬ ٙ‫ٝٛز‬wildcard characters Symbole Name Purpose * Splat ‫اي‬ َ‫رٔض‬characterٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ٝ‫ا‬characters ? question mark َ‫رٔض‬character‫كوؾ‬ ‫ٝاؽذ‬ [] square brackets ٍ‫ا‬ ‫ٓغٔٞػخ‬ َ‫رٔض‬characters‫االهٞاط‬ ٍٖ‫ث‬ ‫ظٞسح‬‫أُؾ‬ ! bang ً‫اُ٘ل‬ ً٘‫رؼ‬ W ILDCARD CHARACTERS WITH THE ASTERISK)*( َٔ‫ثؼ‬ ّٞ‫رو‬matching‫ُـ‬character: َ‫ٓض‬ ‫اًضش‬ ٝ‫ا‬ ‫ٝاؽذ‬ THE QUESTION MARK ( ? ) W ILDCARD CHARACTER َٔ‫ثؼ‬ ّٞ‫رو‬matching‫ُـ‬character‫(اي‬ ‫كوؾ‬ ‫ٝاؽذ‬character)
  • 23. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 22 THE SQUARE BRACKETS) ][ ( َٔ‫ثؼ‬ ّٞ‫رو‬matching‫االهٞاط‬ ٍٖ‫ث‬ ‫أُٞعٞد‬ ‫ُِٔذي‬ : ٍٖ‫ث‬ ‫اُلشم‬ ‫الؽع‬ ٍٖ‫ٝث‬ THE BANG) ! ( َٔ‫ثؼ‬ ّٞ‫رو‬inverse matchingُ٘‫ا‬ ‫عٍٔغ‬ ‫ثؼشع‬ ّٞ‫رو‬ ‫اُؼالٓخ‬ ٙ‫ٛز‬ ٕ‫ا‬ ‫اي‬‫رؾزٞي‬ ً‫اُز‬ ‫ػذا‬ ‫ٓب‬ ‫زبئظ‬ ٍْ‫اُو‬ ٙ‫ٛز‬ ًِ‫ػ‬
  • 24. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 23 : ‫امثلة‬ touch {planes,trains}_{10,11}.{bak,bat} ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandَٔ‫ثؼ‬touchٍ‫ا‬ ٖٓ ‫ُٔغٔٞػخ‬filesٍ‫ا‬ ‫ٛزا‬ ٖ‫ػ‬ ‫ٌٝ٘زظ‬ ،‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ commandٍ‫ا‬ ٙ‫ٛز‬files Planes_10.bak, planes_10.bat, planes_11.bak, planes_11.bat, trains_10.bak, trains_10.bat, trains_11.bak, trains_11.bat RETURNING TO FILE COMMANDS ٍ‫ا‬ ْٛ‫ا‬ ٖ‫ػ‬ ‫ع٘زؾذس‬commandsٍ‫ا‬ ً‫ك‬ ‫أُغزخذٓخ‬bash scriptingٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫ٝاُز‬ files LS ٍ‫ا‬ ‫ٝٛزا‬commandَٔ‫ػ‬ ً‫ك‬ ّ‫ٌغزخذ‬Listٍ‫ا‬ ٌَُfilesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬directory، ‫ثؼغ‬ ًِ‫ػ‬ ‫ٌٝؾزٞي‬ٍ‫ا‬options -lً٘‫ٌٝؼ‬ :long listٍ‫ا‬ ‫ٝٛزا‬optionٍ‫ا‬ ٖ‫ػ‬ ‫ظٍال‬‫رل‬ ‫اًضش‬ ‫ثٍبٗبد‬ ‫ثبظٜبس‬ ّٞ‫ٌو‬filesٍ‫ا‬ َ‫ٓض‬ permissionsٍ‫ٝا‬last modification timeٍ‫ٝا‬sizeٍ‫ٝا‬ownerٍ‫ٝا‬group -aٍ‫ا‬ ‫ثبظٜبس‬ ّٞ‫ٌو‬ ٞٛٝ :hidden files).. ٝ .( ًِ‫ػ‬ ‫رؾزٞي‬ ً‫ٝاُز‬ ٍ‫ٝا‬files‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬ٍ‫ا‬ ًٛ ).( ًِhidden filesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬directoryًُ‫اُؾب‬ ٍ‫ا‬ ‫ثٍ٘ٔب‬filesٍ‫ا‬ ًٛ )..( ًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬hidden filesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬parent directory
  • 25. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 24 CP ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandَٔ‫ثؼ‬copyَُfiles MV ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandَٔ‫ثؼ‬moveَُfiles W C َٔ‫ثؼ‬ ّٞ‫ٌو‬countٍُ‫ا‬ ‫ؼذد‬Linesٍ‫ٝا‬charactersٍ‫ٝا‬words NL ٍ‫ا‬ ‫ػذد‬ ‫ٌٞػؼ‬linesٍ‫ا‬ ً‫ك‬file SYSTEM COMMANDS ٍ‫ا‬ ًٛcommandٍ‫ا‬ ‫ٓغ‬ َٓ‫رزؼب‬ ً‫اُز‬system: َ‫ٓض‬df, du, fdisk, iostat, vmstat, free df ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬free disk space du ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬disk usage fdisk ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬partitionsٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬hard disk iostat ٍ‫ا‬ ‫ؽبُخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬input/outputٍ‫ا‬ ًِ‫ػ‬hard disk vmstat ٍ‫ا‬ ‫ؽبُخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬virtual memory
  • 26. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 25 free ٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬free memory THE DF AND DU COMMANDS dfٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬ :partitions‫أُٞعٞدح‬ُ‫ا‬ َ‫ٓض‬ ْٜ٘‫ػ‬ ‫ٝٓؼِٞٓبد‬ ‫اُغٜبص‬ ًِ‫ػ‬‫اُلبسؿخ‬ ‫ٔغبؽخ‬ ٍ‫ٝا‬ ‫أُٔزِئخ‬ ‫ٝأُغبؽخ‬mounted partitions‫ٝؿٍشٛب‬ ٍ‫ا‬ ‫ٛزا‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬ ‫ارا‬commandَٔ‫ػ‬ ً‫ك‬scriptَٔ‫ثؼ‬ ّٞ‫ٌو‬checkٍ‫ا‬ ًِ‫ػ‬ partitions‫ٝاظٜبس‬alarmًُ‫ا‬ ُٚٞ‫ٝط‬ ٝ‫ا‬ ٚ‫آزالئ‬ ‫ػ٘ذ‬thresholdٍٖ‫ٓؼ‬ ٍ‫ا‬ ‫ٝٛزا‬commandٍ‫ا‬ ‫ثؼشع‬ ّٞ‫ٌو‬free disk spaceٍ‫ثب‬byteٌُٝ ،َٜ‫ٌغ‬ ٌَ‫ثش‬ ‫ُؼشػٜب‬ ٖ ٍ‫ا‬ ‫ثؼغ‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬ ٚ‫هشاءر‬options: َ‫ٓض‬ df -hT ٍ‫ا‬ ٕ‫ا‬ ‫ؽٍش‬“–h”ً٘‫رؼ‬human readable ٍ‫ٝا‬“T”ً٘‫رؼ‬typeٍ‫ا‬ ‫ٗٞع‬ ‫رٞػؼ‬ ًٛٝpartitionٞٛ َٛext2, ext3,extended, ‫االٓش‬ ّ‫اعزخذا‬ ٌٌٖٔٝduٍ‫ا‬ ً‫ك‬ ‫ٓغبؽخ‬ ‫ٝرغزِٜي‬ ‫ًجٍش‬ ْ‫ؽغ‬ ‫ُٜب‬ ‫أُِلبد‬ ‫اي‬ ‫ٌٞػؼ‬ ‫اُزي‬hard disk
  • 27. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 26 ‫اػبكخ‬ ٌٌٖٔٝ“-s”‫ُؼشع‬summaryٍ‫ا‬ ٖٓ ‫أُغزخذٓخ‬ ‫اٌٍُِخ‬ ‫أُغبؽخ‬ ٖ‫ػ‬file systemًِٚ du -s THE FDISK COMMAND ٍ‫ا‬fdiskٍ‫ا‬ ‫اظٜبس‬ ًِ‫ػ‬ ‫االعبط‬ ً‫ك‬ ّٞ‫ٌو‬partitionsٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬HDD ٍ‫ا‬ ‫ٝٛزا‬command‫ال‬ٙ‫ر٘لٍز‬ ‫ٌغزطٍغ‬ٍ‫ا‬ ‫اال‬root THE FREE COMMAND ‫ا‬ ‫ٛزا‬ٍcommandٍ‫ا‬ ‫ثبظٜبس‬ ّٞ‫ٌو‬total memoryٍ‫ٝا‬usedٍ‫ٝا‬freeٍ‫ا‬ ‫ٝٓغبؽخ‬ ‫ٜٓ٘ب‬ swapٍ‫ٝا‬usedٍ‫ٝا‬free‫ؼب‬ٌ‫ا‬ ‫ٜٓ٘ب‬
  • 28. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 27 THE VMSTAT COMMAND ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬command‫ثبظٜبس‬how busy the system isٍ‫ا‬ ‫ٝػذد‬processٍ‫ٝا‬ َٔ‫رؼ‬ ً‫اُز‬ blocked process ٍ‫ا‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ثبظٜبس‬ ‫ؼب‬ٌ‫ا‬ ّٞ‫رو‬ ‫ًٔب‬memoryٍ‫ا‬ ‫اعزٜالى‬ ‫ٓوذاس‬ َ‫ٓض‬swap daemonٍ‫ا‬ ٖٓ memoryٍ‫ا‬ ‫هٍٔخ‬ ‫ٝٓب‬bufferٍ‫ٝا‬cache ٍ‫ا‬ ‫ػذد‬ ًْٝprocessٍ‫ا‬ ‫دخِذ‬ ً‫اُز‬swapٍ‫ا‬ ٖ‫ػ‬ ‫ٝثٍبٗبد‬ ٚ٘ٓ ‫خشعذ‬ ً‫ٝاُز‬usersٍ‫ٝا‬ systemٍ‫ٝا‬idle and waiting time THE IOSTAT COMMAND ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬commandٍ‫ا‬ ٖ‫ػ‬ ‫ٓؼِٞٓبد‬ ‫ثؼشع‬input/outputٍ‫ا‬ ً‫ك‬systemٖ‫ػ‬ ‫ٝٓؼِٞٓبد‬ ٍ‫ا‬system performance
  • 29. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 28 ٍ‫ا‬ ٖ‫ػ‬ ‫أُؼِٞٓبد‬ ٖٓ ‫أُضٌذ‬ ‫ُٝٔؼشكخ‬system performanceَٔ‫ػ‬ ٌٌٖٔinstallَُsysstat package STDIN, STDOUT, STDERR ٍ‫ا‬ ٍَ‫رشـ‬ ًِ‫ػ‬ ‫اٌٍُِ٘ظ‬ ّٞ‫ٌو‬commandsٍ‫ا‬ ً‫ك‬ ‫أٌُزٞثخ‬CLI‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫ٝاخشاط‬ ‫ؽز‬ًِ‫ػ‬ ‫ٌؾزٞي‬ ٕ‫ًب‬ ٕ‫ا‬ ًerrorsٍ‫ا‬ ًِ‫ػ‬ ‫ٌؼزٔذ‬ ‫اٌٍُِ٘ظ‬ ٕ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬inputsٍ‫ٝا‬outputs ٍ‫ٝا‬errorsٍٖ‫ٓؼ‬ ‫ثشٓض‬ ْٜ٘ٓ ٌَُ ‫ٌٝشٓض‬ ، Type Symbol standard input (stdin) 0< standard output (stdout) 1> standard error (stderr) 2> ّ‫االسهب‬ ٙ‫ٝٛز‬(0, 1, 2)ًٔ‫رغ‬file descriptor‫اُضالصخ‬ ٖٓ ‫ٗٞع‬ ٌَُ ٍ‫كب‬(0)َ‫ٌٔض‬file descriptorَُstandard input ٍ‫كب‬(1)َ‫ٌٔض‬file descriptorَُstandard output ٍ‫كب‬(2)َ‫ٌٔض‬file descriptorَُstandard error STDIN ٍ‫ا‬ ٍ‫ادخب‬ ٌٌٖٔ ً‫اُز‬ ‫اُطشم‬ ٖٓ ‫اُؼذٌذ‬ ‫ٛ٘بى‬data: ‫ٜٓ٘ب‬ ‫ٌٍُِ٘ظ‬ 1-terminalٍ‫ا‬ ًٛٝ :CLIُ‫ا‬ٍ‫ا‬ ‫كٍٜب‬ ‫ٌٗزت‬ ً‫ز‬commands 2-deviceٍ‫ا‬ ًٛٝ :keyboardٍ‫ا‬ ٝ‫ا‬device‫ٜٓ٘ب‬ ‫اُجٍبٗبد‬ ٍ‫ثبدخب‬ ّٞ‫ٗو‬ ً‫اُز‬
  • 30. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 29 3-fileٞٛٝ :fileًِ‫ػ‬ ‫ٌؾزٞي‬data‫ثٜب‬ ّٞ‫ٌو‬ ‫اخشي‬ ‫ػٍِٔخ‬ ً‫ك‬ ‫اٌٍُِ٘ظ‬ ‫ٌغزخذٜٓب‬َ‫ٓض‬ cat < myfirstscript cat 0< myfirstscript cat myfirstscript ٍ‫ا‬ ‫ٝٛزا‬commandٖٓ ‫ٌطِت‬ٍ‫ا‬catٍ‫ا‬ ‫ٌؤخز‬ ٕ‫ا‬inputٖٓfileٚٔ‫اع‬myfirstscriptٖٓ ‫ثذال‬ ٍ‫ا‬keyboard‫اُشبشخ‬ ًِ‫ػ‬ ٚ‫ٌٝؼشػ‬ STDOUT by defaultٍ‫ا‬ ‫ٌظٜش‬output، ‫اُشبشخ‬ ًِ‫ػ‬‫االٓش‬ ‫ثٌزبثخ‬ ‫هٔ٘ب‬ ‫كبرا‬ cat myfirstscript ٍ‫ا‬ ٕ‫ا‬ ‫كغ٘غذ‬output‫اُشبشخ‬ ًِ‫ػ‬ ‫عٍظٜش‬ ‫ث‬ ّٞ‫ٗو‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬ ، ‫رُي‬ ‫رـٍٍش‬ ٌٌٖٔ ٌَُٖٝٔ‫ؼ‬redirectَُoutput‫اخش‬ ٕ‫ٌٓب‬ ًُ‫ا‬ًٌِ ‫ًٔب‬ cat myfirstscript > newscript cat myfirstscript 1> newscript
  • 31. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 30 ‫ٓؾزٌٞبد‬ ‫ػشػ٘ب‬ ‫كؼ٘ذٓب‬myfirstscriptٍ‫ا‬ ٕٝ‫ثذ‬redirectionٍ‫ا‬ ‫كظٜشد‬stdout،‫اُشبشخ‬ ًِ‫ػ‬ ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫ػ٘ذٓب‬ ٌُٖٝredirectionٍ‫ا‬ ‫ٝعؼِ٘ب‬stdoutًُ‫ا‬ ‫ٌزٛت‬fileًٔ‫ٌغ‬new script ٍ‫ا‬ ‫ٌظٜش‬ ِْ‫ك‬outputٍ‫ا‬ ًُ‫ا‬ ‫رٛت‬ ٌُٖٝ ‫اُشبشخ‬ ًِ‫ػ‬file ٍ‫ا‬ ٕ‫ًب‬ ‫ارا‬newscriptَٔ‫ثؼ‬ ّٞ‫ٌو‬ ‫كغٞف‬ ‫اعبعب‬ ‫ٓٞعٞد‬ ‫ؿٍش‬creationٍ‫ا‬ ٕ‫ًب‬ ‫ارا‬ ‫آب‬ ، ُٚ newscriptٍ‫ا‬ ‫ٌٌٝزت‬ ٚ‫ٓؾزٌٞبر‬ ‫ٌٔغؼ‬ ‫كغٞف‬ ‫ٓغجوب‬ ‫ٓٞعٞد‬data‫اُغذٌذح‬ ٍ‫ا‬ ٕ‫كب‬ ‫ارا‬myfirstscriptٍ‫ا‬ ٞٛstdoutٍ‫ٝا‬newscriptٍ‫ا‬ ٞٛstdout ‫ٛ٘بى‬ ٌٌٖ ُْ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝmyfirstscriptٝ‫ا‬stdinًُ‫ا‬ ٚ‫ٓؾزٌٞبر‬ َ‫اٗو‬ ًٌُnewscript? ٍ‫ا‬ ٕ‫ا‬ ًٛ ‫ٛ٘ب‬ ‫االعبثخ‬screen‫ظجؼ‬‫عز‬ ً‫اُز‬ ًٛstdin: ًُ‫اُزب‬ ٍ‫أُضب‬ ً‫ك‬ ‫ًٔب‬ ‫آش‬ ‫اعزخذٓ٘ب‬ ‫ػ٘ذٓب‬catٍ‫ا‬ ‫ٓغ‬redirectionٍ‫ا‬ ٕ‫كب‬cat‫رغذ‬ ُْstdin‫ٓؾ‬ ‫رؤخز‬ ًٌُٚ‫زٌٞبر‬ ً‫ك‬ ‫ؼؼٜب‬‫ٝر‬newscript‫ا‬ ْ‫ر‬ ‫ُزُي‬ٍ‫ا‬ ٖ‫ػ‬ ‫العزؼبػخ‬input fileٍ‫ثب‬command line‫ظجؼ‬ٌ ًٌُ ٍ‫ا‬ ٞٛinput methodٍ‫ا‬ َ‫كبٗزو‬ ، ‫اُجذٌِخ‬curserٍ‫ا‬ َ‫ٗذخ‬ ً‫ؽز‬ ‫ٝاٗزظش‬ ًُ‫اُزب‬ ‫ُِغطش‬inputs ٍ‫ا‬ ٍ‫ادخب‬ ٖٓ ‫االٗزٜبء‬ ‫ٝثؼذ‬inputsًِ‫ػ‬ ‫ؼـؾ‬ُ‫ثب‬ ّٞ‫ٗو‬CTRL+D (^D)ٍ‫ا‬ ‫ٗخجش‬ ً‫ؽز‬catٕ‫ا‬ ‫ػ‬ٍ‫االدخب‬ ‫ٍِٔخ‬‫هذ‬‫اٗزٜذ‬ USING STDIN AND STDOUT SIMULTANEOUSLY ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔstdinٍ‫ٝا‬stdoutٍ‫ا‬ ‫ُؼٍِٔخ‬ ٌَ‫ًجذ‬ ‫اُجؼغ‬ ‫ؼٜٔب‬‫ثؼ‬ ‫ٓغ‬copy‫أُِلبد‬ ٍٖ‫ث‬ cat myfirstscript newscript
  • 32. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 31 cat < myfirstscript > newscript ‫ٓؾزٌٞبد‬ ‫ث٘غخ‬ ‫هٔ٘ب‬ ‫ٝٛ٘ب‬myfirstscriptًُ‫ا‬newscript‫ث‬ٍ‫ا‬ ّ‫بعزخذا‬redirection APPENDING TO A FILE ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝredirectionٍ‫ا‬ ‫ػٍِٔخ‬ ً‫ك‬appendingٍ‫ا‬ ًُ‫ا‬ ‫اُجٍبٗبد‬ ‫اػبكخ‬ ً٘‫ٝرؼ‬file ‫اُوذٌٔخ‬ ‫اُجٍبٗبد‬ ‫ٓغؼ‬ ٕٝ‫ثذ‬ ‫اُؼالٓخ‬ ‫اعزخذٓ٘ب‬ ‫ػ٘ذٓب‬ ‫اٗ٘ب‬ ‫ٛ٘ب‬ ‫ٝٗغذ‬(>>)ٍ‫ا‬ ٕ‫كب‬catًِ‫ػ‬ ‫ثبٌُزبثخ‬ ّٞ‫ٌو‬ ُْnewscript ‫ثبػبك‬ ّ‫هب‬ ‫ٝاٗٔب‬ٍُٚ‫ا‬ ‫اُغذٌذح‬ ‫اُجٍبٗبد‬ ‫خ‬
  • 33. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 32 STDERR ‫اي‬ ‫ر٘لٍز‬ ‫ػ٘ذ‬command:ٍٖ٘‫اص‬ ٖٓ ‫ٗزٍغخ‬ ٚ٘‫ػ‬ ‫ٌ٘زظ‬ 1-ٍ‫ٗز‬‫طؾٍؾخ‬ ‫غخ‬(valid output) 2-( ‫خبؽئخ‬ ‫ٗزٍغخ‬error message) ٍ‫ا‬ ‫ٓغ‬ ‫ٌؾذس‬ ‫ٝٓب‬outputٍ‫ا‬ ‫ٓغ‬ ‫ٌؾذس‬ ‫اُؼبدي‬error‫اُشبشخ‬ ًِ‫ػ‬ ‫ًالٛٔب‬ ‫ٌظٜش‬ ‫ؽٍش‬ ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫كبرا‬command‫ى‬normal userُٝ‫ى‬ ‫ٍظ‬root user find / -name "*" -print ًِ‫ػ‬ ‫رؾزٞي‬ ‫ؽٍش‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫كغزظٜش‬valid outputٝerror message ٍ‫ا‬ ‫اظٜبس‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝvalid outputٍ‫ا‬ ٍ‫ثبسعب‬ ّٞ‫ٗو‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬ ‫كوؾ‬errorًُ‫ا‬fileً‫ؽز‬ ‫اخش‬ ٍ‫ا‬ ‫ٝٛزا‬ ، ‫اُشبشخ‬ ًِ‫ػ‬ ‫ٌظٜش‬ ‫ال‬fileٌٌ ‫ٓب‬ ‫ؿبُجب‬ٕٞ/dev/null ٍ‫ٝا‬/dev/nullٍ‫ا‬ ٚ‫رشج‬recycle binٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬windowsٍ‫ا‬ ًٖ‫ٝال‬/dev/null‫ال‬ ٍ‫ا‬ ً‫ك‬ ‫ٌؾذس‬ ‫(ًٔب‬ ‫اخشي‬ ‫ٓشح‬ ‫ٓؾزٌٞبرٜب‬ ‫اسعبع‬ ٌٌٖٔshift + deleteًٔ‫رغ‬ ًٜ‫ك‬ ‫ُزُي‬ )linux black hole ٍ‫ا‬ ٍ‫ٝالسعب‬errorٍ‫ا‬ ًُ‫ا‬/dev/nullٍ‫ا‬ ّ‫اعزخذا‬ ‫ٌغت‬file descriptor‫اُخب‬ٍ‫ثب‬ ‫ص‬stderr (2>)ٍ‫ا‬ ٍٖ‫ث‬ ‫اُزٍٍٔض‬ ‫اٌٍُِ٘ظ‬ ‫ٌغزطٍغ‬ ً‫ؽز‬stdoutٍ‫ٝا‬stderr find / -name "*" -print 2> /dev/null ٍ‫ا‬redirection‫اخش‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬commandٍ‫ا‬ ً‫ك‬ ٙ‫ر٘لٍز‬ ْ‫ٌز‬script
  • 34. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 33 ٍ‫ا‬ ٕ‫ا‬ ‫ٗغذ‬ ‫ٝٛ٘ب‬valid output‫اُشبشخ‬ ًِ‫ػ‬ ‫ظٜش‬ ‫اُزي‬ ‫اُٞؽٍذ‬ ٞٛ ٍ‫ا‬ ٙ‫ٛز‬ ٌٕٞ‫ر‬ ‫ٝهذ‬errorsَٔ‫ػ‬ ‫ؽبُخ‬ ً‫ك‬ ‫ٓلٍذح‬diagnosticsٝ‫ا‬troubleshootingَ‫ؼ‬‫ٌل‬ ‫ُزُي‬ ٍ‫اسعب‬ٍ‫ا‬ ٙ‫ٛز‬errorsًُ‫ا‬fileٍ‫ا‬ ٙ‫ٛز‬ ًِ‫ػ‬ ‫االؽالع‬ ‫خالُخ‬ ٖٓ ٌٌٖٔ ‫خبص‬errorsٖٓ ‫ثذال‬ ٍ‫ا‬ ًُ‫ا‬ ُٚ‫اسعب‬null STDOUT, STDERR AND USING THE AMPERSAND)&( ٍ‫ا‬ ٍٖ‫ث‬ ‫اُذٓظ‬ ٌٌٖٔstdoutٍ‫ٝا‬stderrٍ‫ا‬ ‫ٗلظ‬ ً‫ك‬ ‫ٓؼب‬command‫ر٘لٍز‬ ‫اسدٗب‬ ‫ارا‬ ‫كٔضال‬ commandٍ‫ٝاسعب‬ ٍٖ‫ٓؼ‬valid outputًُ‫ا‬fileًٔ‫ٌغ‬validoutٍ‫ا‬ ٍ‫ٝاسعب‬errorًُ‫ا‬ fileًٔ‫ٌغ‬errorout‫كوؾ‬ ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫رُي‬ ‫ر٘لٍز‬ ٌٍٖٔ‫ك‬ find / -name "*" -print 2> errorout > validout ٍ‫ا‬ ‫ٝرشرٍت‬redirectionّ‫ٛب‬ ‫ؿٍش‬ find / -name "*" -print 2> errorout > validout find / -name "*" -print > validout 2> errorout ‫االٓش‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬ .... ‫اخشي‬ ‫ٓشح‬findٍ‫ثب‬normal user find / -name "*" -print ًِ‫ػ‬ ‫رؾزٞي‬ ‫ؽٍش‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ‫اُشبشخ‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫كغزظٜش‬valid outputٝerror message
  • 35. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 34 ‫ػالٓخ‬ ّ‫ثبعزخذا‬ ‫هٔ٘ب‬ ‫ٝارا‬(>)ْ‫كغٍز‬َٔ‫ػ‬redirectَُvalid output‫كوؾ‬ ‫ث‬ ‫هٔ٘ب‬ ‫ٝارا‬‫ػالٓخ‬ ّ‫بعزخذا‬(2>)َٔ‫ػ‬ ْ‫كغٍز‬redirectَُerror‫كوؾ‬ َٔ‫ثؼ‬ ّٞ‫ٗو‬ ًٌُٝredirectَُvalid outputٍ‫ٝا‬error‫اُؼالٓخ‬ ّ‫ثبعزخذا‬ ّٞ‫ٗو‬ ‫ٓؼب‬(&)‫ًٔب‬ ًٌِ find / -name "*" -print 2> samefile 1>&2 ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬ ‫ؽٍش‬commandٍ‫ا‬ ٍ‫ثبسعب‬errorٚٔ‫اع‬ ‫ِٓق‬ ًُ‫ا‬same fileٍ‫ا‬ َ‫ٌشع‬ ْ‫ص‬valid outputٍ‫ا‬ ‫ٗلظ‬ ًُ‫ا‬fileٍ‫ا‬ ٍ‫اسعب‬ ْ‫ر‬ ‫اُزي‬errorٌَ‫اُش‬ ‫ثٜزا‬ ٚ‫ًزبثز‬ ٌٌٖٔٝ ، ُٚ find / -name "*" -print 1> file 2>&1 ٍ‫ا‬ ‫ٛزا‬ ّٞ‫ٌو‬ ‫ؽٍش‬commandٍ‫ا‬ ٍ‫ثبسعب‬valid outputٚٔ‫اع‬ ‫ِٓق‬ ًُ‫ا‬fileٍ‫ا‬ َ‫ٌشع‬ ْ‫ص‬ errorٍ‫ا‬ ‫ٗلظ‬ ًُ‫ا‬fileٍ‫ا‬ ٍ‫اسعب‬ ْ‫ر‬ ‫اُزي‬valid outputُٚ &>file َٔ‫ثؼ‬ ّٞ‫ٌو‬redirectَُerrorٍ‫ٝا‬valid outputٍ‫ا‬ ًُ‫ا‬ ‫ٓؼب‬file UNAMED PIPES ٍ‫ا‬ َ‫ٗشع‬ ٕ‫ا‬ ‫اعزطؼ٘ب‬ ٕ‫اال‬ ً‫ؽز‬output‫الي‬commandًُ‫ا‬fileَ‫ٗشع‬ ٕ‫ا‬ ٌٌٖٔ َٛ ٌُٖٝ ، ٍ‫ا‬ ‫ٛزا‬output‫ًـ‬inputًُ‫ا‬command??? ‫أُطِٞثخ‬ ‫اُ٘زٍغخ‬ ًِ‫ػ‬ َ‫ظ‬‫ٗؾ‬ ٕ‫ا‬ ًُ‫ا‬ ‫ٌٝٛزا‬ ‫اخش‬ ٝ !!! ْ‫ٗؼ‬ ًٛ ‫االعبثخ‬ٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬pipe (|)َ‫ٓض‬ ls -la /etc | less
  • 36. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 35 ٍ‫ا‬ ّٞ‫ٌو‬ ‫ٝٛ٘ب‬“ls -la”‫ثؼشع‬long listَ‫ثذاخ‬ ‫أُٞعٞدح‬ ‫ُِِٔلبد‬/etcْ‫ص‬ّٞ‫ٌو‬‫ثؤخز‬‫ٛزا‬ٍ‫ا‬ output‫ًـ‬ ِٚ‫ٌٝذخ‬input‫االٓش‬ ًُ‫ا‬less‫طلؾخ‬ ‫طلؾخ‬ ًُٝ‫اال‬ ‫اُ٘زٍغخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ‫اُزي‬ ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝpipe: َ‫ٓض‬ ‫ٓشاد‬ ‫ػذح‬ ls –la | grep a| less ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝpipeٍ‫ا‬ ‫ٓغ‬redirection
  • 37. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 36 CHAPTER 2. THE SHELL INTRODUCTION ٍ‫ا‬ ٞٛ ‫ٓب‬shell? ٍ‫ا‬shellٍ‫ا‬ ْ‫ٓزشع‬ ٞٛcommands: ٕ‫ٗٞػب‬ ٚ٘ٓ ‫ٌٝٞعذ‬ 1-Login shell ٍ‫ا‬ ًُ‫ا‬ ‫دخُٞي‬ ٖ‫ػ‬ ٍٞ‫أُغئ‬ ٞٛٝsystemٍ‫ا‬ ‫كٍٜب‬ ‫ٌظٜش‬ ً‫ٝاُز‬usernameٍ‫ٝا‬ password 2-Non-login shell ٍ‫ا‬ ًٛterminalٍ‫ا‬ ‫كٍٜب‬ ‫ٌٗزت‬ ً‫اُز‬commandsٍ‫ا‬ َ‫ٓض‬bash, sh, ksh, csh، ٖٓ ‫ٌوشة‬ ‫ٓب‬ ‫ٝٛ٘بى‬50 non-login shell‫اعزخذآٜب‬ ٌٌٖٔ
  • 38. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 37 ٍ‫ا‬ ْٜ‫ٗل‬ ًٌُٝshellٍ‫ا‬ ّ‫ع٘غزخذ‬ ‫اٗ٘ب‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫ٌغت‬ ٌُٖٝ ، َٔ‫رؼ‬ ‫ًٍق‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫ٌغت‬bash ‫رٞصٌؼ‬ ْ‫ٓؼظ‬ ً‫ك‬ ‫اعزخذآب‬ ‫االًضش‬ ٞٛ ٚٗ‫ال‬‫اٌٍُِ٘ظ‬ ‫بد‬ ٍ‫ا‬ ًٛ ‫ٓب‬ ‫ٗؼشف‬ ًٌُٝshell‫أُغزخذٓخ‬ echo $0 WHAT IS THE LOGIN SHELL? ٍ‫ا‬login shellٖ‫ػ‬ ‫أُغئُٞخ‬ ًٛ: 1-ٍ‫ا‬ ٍَ‫رشـ‬non-login shell 2-َٔ‫ثؼ‬ ّٞ‫ٌو‬checkًِ‫ػ‬ٍ‫ا‬environment variablesٍ‫ا‬ ‫ٌؾزبعٜب‬ ً‫اُز‬systemَ‫ٓض‬ ٍ‫ا‬PATH, TERM, UID, GIDَُuser‫ا‬ ّ‫ٌغزخذ‬ ‫اُزي‬ٍsystem 3-ٍ‫ا‬ َٔ‫ثؼ‬ ّٞ‫رو‬default variablesٍ‫ا‬ َ‫ٓض‬USERNAME, HISTSIZE, HOSTNAME, HOME
  • 39. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 38 ٍ‫ا‬ ٍَ‫رشـ‬ ‫ثذاٌخ‬ ‫ٝػ٘ذ‬systemٍ‫ا‬ ّٞ‫ٌو‬login shellَٔ‫ثؼ‬checkٍ‫ا‬ ٖٓ ٍٖ‫ٗٞػ‬ ًِ‫ػ‬files: 1-User profile files 2-Shell rc files َُ ‫ٝثبُ٘غجخ‬systemٍ‫ا‬ ٙ‫كٜز‬filesًٔ‫رغ‬profileٝbashrcًٝ‫ك‬ ‫رٞعذ‬/etcٝ‫رؾزٞي‬ ًٛ ٍ‫ا‬ ًِ‫ػ‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ً‫ك‬ ّ‫رغزخذ‬ ً‫اُز‬systemٝ ًٌٍَ‫ا‬ ٞٛ ‫ػٜ٘ب‬ ٍٞ‫أُغئ‬ root ٍ‫ا‬ ‫ٌٝؾزٞي‬/etc/profileٍ‫ا‬ ًِ‫ػ‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ٍٖ‫ٌغزؼ‬ ً‫اُز‬login shell ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ُِذخ‬system
  • 40. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 39 ٍ‫ا‬ ‫ٌؾزٞي‬ ‫ثٍ٘ٔب‬/etc/bashrcٍ‫ا‬ ًِ‫ػ‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ‫ٌؾزبعٜب‬ ً‫اُز‬non-login shellٍ‫ا‬ ًُ‫ا‬ ٍٞ‫اُذخ‬ ‫ثذاٌخ‬ ‫ػ٘ذ‬terminalٍ‫ا‬ ‫ٌغزخذٜٓب‬ ً‫اُز‬ ‫االػذاداد‬ ًِ‫ػ‬ ‫ُِزؼشف‬userً‫ك‬ ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬shell
  • 41. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 40 َُ ‫ثبُ٘غجخ‬ ‫آب‬normal usersًٔ‫رغ‬ ‫أُِلبد‬ ٙ‫كٜز‬.bashrcٝ.bash_profileٍ‫ا‬ ً‫ك‬ ‫ٝرٞعذ‬ home directoryٌَ‫ث‬ ‫اُخبص‬userٌٕٞ‫ٝر‬hiddenٍ‫ا‬ ٖ‫ػ‬ ‫ٓغئُٞخ‬ ًٛٝfunctionsٍ‫ٝا‬ aliasesٍ‫ثب‬ ‫اُخبطخ‬userٍ‫ا‬ ‫ٌٝغزطٍغ‬ ، ٚ‫ٗلغ‬user‫ُٜب‬ ‫ٝاالػبكخ‬ ‫ػٍِٜب‬ ٌَ‫اُزؼذ‬ ‫ِٓق‬ ٕ‫ا‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬.bash_profileٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬aliasesٍ‫ٝا‬functions ٍ‫ثب‬ ‫اُخبطخ‬Userٍ‫ا‬ ‫ٌؾزبعٜب‬ ً‫ٝاُز‬system‫ثذاٌخ‬ ‫ػ٘ذ‬ٍ‫ا‬ ًُ‫ا‬ ٍٞ‫اُذخ‬user profile
  • 42. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 41 ‫ِٓق‬ ‫ثٍ٘ٔب‬.bashrcٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ٜٞ‫ك‬aliasesٍ‫ٝا‬functionsٍ‫ا‬ ‫ٌغزخذٜٓب‬ ً‫اُز‬userً‫ك‬ ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬non-login shellٍ‫(ا‬terminal)ٚ‫ث‬ ‫اُخبطخ‬ ‫ك‬ ‫ارا‬ٍ‫ثب‬ ‫اُخبطخ‬ ‫بُِٔلبد‬login shellًٛ /etc/profile >>>>> for system .bash_profile >>>>> for user ٝ‫أُِلبد‬ ٙ‫ٛز‬ ‫رؾزٞي‬ًِ‫ػ‬system initialization dataٍ‫ا‬ ‫ٌغزخذٜٓب‬systemٍ‫ا‬ ‫ػ٘ذ‬login ٍ‫ثب‬ ‫اُخبطخ‬ ‫أُِلبد‬ ‫ثٍ٘ٔب‬non-login shell: ًٜ‫ك‬ /etc/bashrc >>>>> for system .bashrc >>>>> for user ٍ‫ا‬ ّٞ‫ٌو‬ ٕ‫ا‬ ٌٌٖٔٝUser‫اي‬ ‫ٝاػبكخ‬ ٚ‫ِٓلبر‬ ًِ‫ػ‬ ٌَ‫ثبُزؼذ‬aliasٝ‫ا‬function‫ػِٜٔب‬ ‫ٌشٌذ‬ ٍ‫ا‬ ٌُٖٝroot userٍ‫ا‬ ‫ِٓلبد‬ ٌَ‫رؼذ‬ ًِ‫ػ‬ ‫اُوبدس‬ ‫اُٞؽٍذ‬ ٞٛ/etc/profileٝ/etc/bashrc ٍ‫ا‬ ٍَ‫ثزشـ‬ ّٞ‫ٗو‬ ‫ٓشح‬ ًَ ً‫ٝك‬terminal (non-login shell or bash)ً‫ِٓل‬ ٍَ‫رشـ‬ ْ‫ٌز‬ /etc/bashrcٝ~/.bashrc ًِ‫ػ‬ ٍٞ‫اُذخ‬ ٌٌٖٔٝbashٍ‫ا‬ ‫ٗلظ‬ ٖٓ ‫اخشي‬bashٍِٜ‫ػ‬ َٔ‫اػ‬ ً‫اُز‬‫االٓش‬ ‫ر٘لٍز‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ب‬ bash
  • 43. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 42 ٍَ‫رشـ‬ ْ‫كٍز‬bash‫(ٍُٝظ‬ ‫عذٌذح‬tabٍ‫ا‬ ‫ٗلظ‬ ً‫ك‬ )‫عذٌذح‬terminal‫ُِٝخشٝط‬ ، ‫أُلزٞؽخ‬ ‫االٓش‬ ‫ٌٗزت‬ exit ٍ‫ٝا‬bashًٔ‫رغ‬ ‫االطٍِخ‬parent bashٍ‫ا‬ ‫ثٍ٘ٔب‬bashًٔ‫رغ‬ ‫اُغذٌذح‬child bashٝ‫ا‬sub- shell ًِ‫ػ‬ ٍٞ‫ثبُذخ‬ ‫هٔ٘ب‬ ‫ٝارا‬bashٍ‫ا‬ ٖٓ ‫عذٌذح‬bashٍ‫ا‬ ٕ‫كب‬ ‫اُوذٌٔخ‬systemٍ‫ا‬ ٍَ‫ثزشـ‬ ّٞ‫ٌو‬ ‫ال‬ profile files‫اخشي‬ ‫ٓشح‬ ‫االٓش‬ ‫ثٌزبثخ‬ ‫اعزٔشسٗب‬ ‫ٝارا‬exitٍ‫ا‬ ٖٓ ‫ٗخشط‬ ‫كغٞف‬bashٍ‫ا‬ ًُ‫ا‬login shell ٍ‫ا‬ ‫عٍٔغ‬ ٕ‫ا‬ ‫ٗغذ‬ ّ‫ػب‬ ٌَ‫ثش‬ ‫اٌٍُِ٘ظ‬ ً‫ٝك‬initialization filesًِ‫ػ‬ ‫رؾزٞي‬“rc” ‫كٜ٘بى‬.vimrcٍ‫ا‬ ٍَ‫رشـ‬ ٖ‫ػ‬ ‫أُغئُٞخ‬vimٝ‫ٛ٘بى‬rc0, rc1ٍ‫ا‬ ٖ‫ػ‬ ‫أُغئُٞخ‬runlevel initialization‫ٌٛزا‬ THE JOB OF THE SHELL َُ ‫اُلؼٍِخ‬ ‫اُٞظٍلخ‬ ‫ٓؼشكخ‬ ‫اسدٗب‬ ‫ارا‬shellٍ‫ا‬ ٕ‫ا‬ ‫كغ٘غذ‬shellّٞ‫ٌو‬: ً‫ثبالر‬ COMMAND INTERPRETER ٍ‫ا‬ ّٞ‫ٌو‬ ‫ؽٍش‬shellٍ‫ا‬ ‫ثزشعٔخ‬commandٍ‫ا‬ ً‫ك‬ ٚ٘‫ػ‬ ‫اُجؾش‬ ‫ؽشٌن‬ ٖ‫ػ‬PATH،ٚ‫ث‬ ‫اُخبص‬ : ‫كٔضال‬ ‫اع‬ ‫ػ٘ذ‬‫االٓش‬ ّ‫زخذا‬cdٍ‫ا‬ ٕ‫كب‬command interpreterٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ِْ‫ٌؼ‬commandٞٛbuilt- in commandًُ‫ا‬ ‫ُِزٛبة‬ ‫ٌؾزبط‬ ‫كال‬Pathٙ‫ثز٘لٍز‬ ّٞ‫ٌو‬ ‫ًٍق‬ ‫ُٔؼشكخ‬ ٚ‫ث‬ ‫اُخبص‬ ‫االٓش‬ ّ‫اعزخذا‬ ‫ػ٘ذ‬ ٌُٖٝmv‫ٍُظ‬ ٜٞ‫ك‬built-in commandٍ‫ا‬ ًِ‫ػ‬ ‫ٌغت‬ ‫ُزُي‬shell‫ٓؼشكخ‬ ٍ‫ا‬ ‫ٛزا‬ ً٘‫ٓؼ‬command٘‫ر‬ ‫ٌغزطٍغ‬ ًٌُٙ‫لٍز‬
  • 44. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 43 ٍ‫ا‬ ّٞ‫ٌٝو‬shellٍ‫ا‬ ‫ثزشعٔخ‬command‫خبؽئ‬ ّ‫ا‬ ‫طؾٍؼ‬ ٞٛ َٛ ‫ُٔؼشكخ‬ ALLOW S FOR VARIABLES TO BE SET ٍ‫ا‬ ‫ٌغٔؼ‬shellٌَُ ‫ؼب‬ٌ‫ا‬userٍ‫ا‬ َٔ‫ثؼ‬variablesًِ‫ػ‬ ٌَ‫اُزؼذ‬ َ‫ٓض‬ ‫ػٍِٜب‬ ٌَ‫ٝاُزؼذ‬ ٚ‫ث‬ ‫اُخبطخ‬ ٍ‫ا‬HISTFILESIZEٍ‫ا‬ ٝ‫ا‬PATHٍ‫ا‬ ٝ‫ا‬HOSTNAME I/O REDIRECTION ‫ثؼ‬ ‫ٌغٔؼ‬ ‫ًٔب‬َٔredirectionَُinputٍ‫ٝا‬Outputٍ‫ٝا‬errors PIPELINES ٍ‫ا‬ ْٜ‫ٌٝل‬shellٍ‫ا‬ ‫ؼب‬ٌ‫ا‬pipe line CUSTOMISING YOUR ENVIRONMENT ٍ‫ا‬ ‫ٌغٔؼ‬ ‫ًٔب‬shellَُUserٍ‫ا‬ ً‫ك‬ ٌْ‫ثبُزؾ‬environmentً‫ك‬ ٌْ‫اُزؾ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ٚ‫ث‬ ٚ‫اُخبط‬ ٍ‫ا‬variablesٍ‫ٝا‬running scriptsٍ‫ا‬ ٌَ‫ٝش‬prompt‫ٝؿٍشٛب‬
  • 45. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 44 CHAPTER 3. REGULAR EXPRESSIONS INTRODUCTION ٍ‫ا‬regular expressionٍ‫ا‬ ً‫ك‬ ‫االشٍبء‬ ْٛ‫ا‬ ٖٓscripting WHAT ARE REGULAR EXPRESSIONS? ٍ‫ا‬regular expressionًٛpatternٝ‫ا‬ ٍُٞ‫ٓذ‬ ‫ُٜب‬characterَ‫ٓض‬ ٍٚ٘‫ٓؼ‬ ‫ٝظٍلخ‬ ُٚ(*) َٔ‫ثؼ‬ ّٞ‫ٌو‬ ‫اُزي‬matching‫أل‬ٍ‫ا‬ ٖٓ ‫ػذد‬ ‫ي‬charactersٍ‫ا‬ ‫اٗٞاع‬ ‫ثؼغ‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ٝع٘زؾذس‬ ، pattern THE FULLSTOP (PERIOD) ”.” ٍ‫ا‬fullstopً٘‫رؼ‬match any character ‫االٓش‬ ّ‫ثبعزخذا‬ ‫ٓضال‬ ‫هٔ٘ب‬ ‫كبرا‬sed‫اي‬ ٖ‫ػ‬ ‫ُِجؾش‬pattern‫ثـ‬ ‫ٌجذأ‬ ٌَ‫ش‬ ٝ‫ا‬“l”ْ‫ص‬“i”ْ‫ص‬“n”ْ‫ص‬ “u”ٌَ‫ثزجذ‬ ّٞ‫ٌو‬ ْ‫ص‬“l”ًُ‫ا‬“L”ٍ‫ٝا‬“i”ًُ‫ا‬“I”ٍ‫ٝا‬“n”ًُ‫ا‬“N”ٍ‫ٝا‬“u”ًُ‫ا‬“U”ّٞ‫ٌو‬ ْ‫ص‬ ٍ‫ا‬ ٌَ‫ثزجذ‬patternًُ‫اُزب‬‫كوؾ‬ًُ‫ا‬“X”‫االٓش‬ ّ‫كغ٘غزخذ‬ sed 's/Linu./LINUX/g' fullstop_test ٍ‫ا‬ ‫ٝٛزا‬commandً٘‫ٌؼ‬ s (search for) / Linu. / (replace with) LINUX / g (globally) <filename to search> ---------------^-------^----------------------^-------------^--- ---------------------
  • 46. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 45 ٕ‫ا‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٝالؽع‬“linu”ٍ‫ا‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬ ‫ؽٍش‬ ‫اعزجذاُٜب‬ ْ‫ٌز‬ ُْٝ ‫رزـٍش‬ ُْpattern ‫ثـ‬ ‫ٓزجٞػب‬character‫رطجٍن‬ ْ‫ٌز‬ ِٖ‫ك‬ ‫ٝاال‬ ‫اُششؽ‬ ٍِٚ‫ػ‬ ‫ٌطجن‬ ً‫ؽز‬ ‫اخش‬“sed”ٍ‫ا‬ ‫ٛزا‬ ًِ‫ػ‬ pattern ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔsedٍ‫ا‬ ‫ٓغ‬pipeًُ‫اُزب‬ ٍ‫ثبُٔضب‬ ‫ًٔب‬‫ؽٍش‬ ،“nl”ً٘‫رؼ‬number the lines in the file sed 's/Linu./LINUX/g' fullstop_test | nl
  • 47. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 46 LET'S EXPLORE "SED" SYNTAX ٍ‫ا‬ ٖ‫ػ‬ ‫هٍِال‬ ‫ُ٘زؾذس‬sed،ٖ‫ػ‬ ‫ثبُجؾش‬ ّٞ‫ٌو‬ ٜٞ‫ك‬patternٍٖ‫ٓؼ‬‫عطش‬ ‫عطش‬، ‫ثآخش‬ ُٚ‫ٝاعزجذا‬ ٝsedً٘‫ٌؼ‬stream editorٍ‫ٝا‬ ،streamٍ‫ا‬ ٖٓ ً‫ٌؤر‬fileٍ‫ا‬ ٖ‫ػ‬ ٍٚ‫ك‬ ‫اُجؾش‬ ‫أُشاد‬pattern ٍٝ‫ا‬formٍ‫ا‬ ‫ُٜزا‬ ‫اُؼبٓخ‬commandًٛ sed „[command] / pattern / [replace sequence] / [modifier]‟ [command] sed 's/Linu./LINUX/g' fullstop_test ٝsed‫ٌزجؼٜب‬commandٍ‫ا‬ ‫ٌٞػؼ‬ ‫اخش‬action، ِٚٔ‫ػ‬ ‫أُشاد‬ً‫ك‬ ‫ٝٛ٘ب‬ٍ‫ا‬ ‫ٛزا‬ ٕ‫كب‬ ‫ٓضبُ٘ب‬ commandٞٛ„s‟ً٘‫ٌٝؼ‬search ٍ‫ا‬ ٙ‫ثؼذ‬ ً‫ٌؤر‬ ْ‫ص‬patternٍٖ‫ػالٓز‬ ٍٖ‫ث‬ ٚ‫ؼؼ‬ٗٝ ٚ٘‫ػ‬ ‫اُجؾش‬ ‫أُشاد‬“/”ٞٛٝlinu.‫ٓضبُ٘ب‬ ً‫ك‬ ٍ‫ا‬ ٚ‫ٌٝجزؼ‬replaced sequenceٍ‫ا‬ ٞٛٝpatternٌْ‫اُوذ‬ َ‫ٓؾ‬ َ‫عٍؾ‬ ‫اُزي‬ ‫اُغذٌذ‬‫ؼب‬ٌ‫ا‬ ‫ٌٝٞػغ‬ ٍٖ‫ػالٓز‬ ٍٖ‫ث‬“/”ٞٛٝ“LINUX”‫ٓضبُ٘ب‬ ً‫ك‬ ْ‫ص‬ٍ‫ا‬ ً‫ٌؤر‬modifierٞٛٝ“g”‫ٛزا‬ ‫ٓضبُ٘ب‬ ً‫ك‬ً٘‫ٌٝؼ‬globallyٍ‫ا‬ ‫ٌخجش‬ ٞٛٝ،sedَٔ‫ثؼ‬ ّٞ‫ٌو‬ ٕ‫ا‬ ٍ‫ا‬ ‫ٛزا‬replaceٍ‫ا‬ ًِ‫ػ‬fileٚ‫ٗزٍغ‬ ٍٝ‫ا‬ ‫ػ٘ذ‬ ‫ٌزٞهق‬ ‫ٝال‬ ًِٚ ٍٝ‫ا‬ ٍ‫ٗغزجذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬matched patternْ‫اُشه‬ ‫ؼغ‬٘‫ك‬ ‫كوؾ‬“1”ٖٓ ‫ثذال‬“g” ًٗ‫صب‬ ٍ‫ٗغزجذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬matched patternْ‫اُشه‬ ‫ؼغ‬٘‫ك‬ ‫كوؾ‬“2”ٖٓ ‫ثذال‬“g” ٍ‫ا‬ ‫اُٜ٘بٌخ‬ ً‫ك‬ ً‫ٌؤر‬ ْ‫ص‬fileٍ‫ا‬ ٖ‫ػ‬ ِٚ‫ثذاخ‬ ‫اُجؾش‬ ‫أُشاد‬patterns
  • 48. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 47 sed „/hi/p‟ myfirstscript ‫ؼغ‬ٗ ٕ‫ا‬ ٌٌٖٔ“p”ٍ‫ثذ‬“g”َٔ‫ثؼ‬ ّٞ‫ٌو‬ ًٌُprintَُMatched line
  • 49. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 48 ‫ؼغ‬ٗ ٕ‫ا‬ ٌٌٖٔٝ“d”َٔ‫ثؼ‬ ّٞ‫ٌو‬ ًٌُdeleteٍ‫ا‬ ٌَُlinesًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬“hi” SQUARE BRACKETS ( [ ] ), THE CARET ( ^ ) AND THE DOLLAR ( $ ) ٍ‫ا‬square brackets ([abc])َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٚٗ‫ا‬ ً٘‫رؼ‬matchٍcharacterٍٖ‫ث‬ ٖٓ ‫ٝاؽذ‬ range of charactersٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ٍ‫ا‬caret (^hmed)َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٚٗ‫ا‬ ً٘‫رؼ‬matchٍ‫ا‬ ‫عٍٔغ‬lines‫ر‬ ً‫اُز‬‫ثؤي‬ ‫جذأ‬character ‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓٞعٞد‬ ٍ‫ا‬Dollar (ahme$)َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٚٗ‫ا‬ ً٘‫رؼ‬matchٍ‫ا‬ ‫عٍٔغ‬lines‫ر‬ ً‫اُز‬‫ثؤي‬ ًٜ‫٘ز‬character ‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓٞعٞد‬ sed „/^[ahl]/p‟ myfirstscript ّ‫اعزخذا‬ ٌٌٖٔsedٍ‫ا‬ ‫ٓغ‬“^”َٔ‫ػ‬ ً‫ك‬invert selection‫ظٍـخ‬ُ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬“^/^[ahl]” sed '/^[^ahl]/p‟ myfirstscript ٍ‫ا‬ ‫ٛزا‬ ٕ‫كب‬ ‫ُزُي‬command‫اي‬ ‫اؽجغ‬ ً٘‫ٌؼ‬line‫ثؤي‬ ‫ٌجذأ‬character‫ؿٍش‬a,h,l
  • 50. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 49 sed '/^[^ahl]/d‟ myfirstscript ٍ‫ا‬ ‫عٍٔغ‬ ‫آغؼ‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬lines‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓٞعٞد‬ ‫ؿٍش‬ ‫ؽشف‬ ‫ثبي‬ ‫رجذأ‬ ً‫اُز‬ ‫ًٝٔب‬ٍ‫ا‬ ً‫ك‬ ٍ‫اُؾب‬ ٞٛcaret (^)ٍ‫ا‬ ًِ‫ػ‬ ‫ؼب‬ٌ‫ا‬ ‫ٌغشي‬dollar ($)‫ث‬ ‫رٞػغ‬ ‫ٌُٜٝ٘ب‬ٍ‫ا‬ ‫ؼذ‬ brackets sed '/[it]$/!d' myfirstscript ٍ‫ا‬ ‫ٛزا‬ ً٘‫ٝٓؼ‬commandٍ‫ا‬ ًَ ‫ثٔغؼ‬ ّٞ‫رو‬ ‫اٗال‬linesٍ‫ثب‬ ًٜ‫ر٘ز‬ ً‫اُز‬“i”ٝ‫ا‬“t”‫ٝآغؼ‬ ً‫اُجبه‬ ٍ‫ا‬ ٕ‫ا‬ ‫ظٞسح‬ُ‫ا‬ ٙ‫ٛز‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬commandٍ‫ا‬ ًَ ‫ثٔغؼ‬ ّ‫هب‬ ٍٝ‫اال‬linesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬ file: myfirstscript‫ال‬ ‫ٗزٍغخ‬ ‫اي‬ ٚ٘‫ػ‬ ‫ٌظٜش‬ ٍُْ‫ا‬ ٕfile : myfirstscript‫اي‬ ٚ‫ث‬ ‫ٍُظ‬Line ٍ‫ثب‬ ًٜ‫ٌ٘ز‬“a”ٝ‫ا‬“h”ٝ‫ا‬“l”ٍ‫ا‬ ًَ ‫ثٔغؼ‬ ّ‫كوب‬lines ٍ‫ا‬ ً‫ك‬ ‫ثٍ٘ٔب‬commandٍ‫ا‬ ّ‫هب‬ ًٗ‫اُضب‬sedٍ‫ثب‬ ‫ثبالؽزلبظ‬lineٍ‫ثب‬ ًٜ‫ٌ٘ز‬ ‫اُزي‬“i”ً‫ثبه‬ ‫ٝٓغؼ‬ ٍ‫ا‬lines‫اُضبُش‬ ٍ‫أُضب‬ ً‫ك‬ ِٚ‫ٝٓض‬
  • 51. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 50 ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔ ‫ًٔب‬“^”ٍ‫ا‬ ‫ٓغ‬“$”‫ػ‬ ‫ُِذالُخ‬‫اُلبسؽ‬ ‫اُغطش‬ ًِ sed „/^$/d‟ myfirstscript ٍ‫ا‬ ‫ِٝٓخض‬expressions: ًٛ ‫اعزخذٓ٘بٛب‬ ً‫اُز‬ . any single character [] a range of characters ^ start of line (when outside [ ]) ^ do not (when inside [ ]) $ end of line ^$ empty line * 0 or more of the previous pattern + 1 or more of the previous pattern {n} {n, }+ {n,m} USING SED AND PIPES
  • 52. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 51 ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔsedٍ‫ا‬ ‫ٓغ‬pipeٍ‫ا‬ ‫ٗزٍغخ‬ ًِ‫ػ‬ ‫ػٍِٔخ‬ ‫اي‬ ‫اعشاء‬ ً‫ك‬ ‫اُشؿجخ‬ ‫ػ٘ذ‬ ‫ٝرُي‬sed sed '/^[^ahl]/d' bazaar.txt | sed '/^$/d' | nl ٍ‫ا‬ ‫دٓظ‬ ٌٌٖٔ ‫اُٞهذ‬ ‫ُٝزٞكٍش‬2 sed commandsٍ‫ا‬ ّ‫اعزخذا‬ ٕٝ‫ثذ‬ ‫ثؼغ‬ ‫ٓغ‬pipeّ‫ٝثبعزخذا‬ sedٍ‫ا‬ ‫ٝػغ‬ ‫ٓغ‬ ‫كوؾ‬ ‫ٝاؽذح‬2 command optionsٍٖ‫اُؼالٓز‬ ٍٖ‫ث‬„ „ sed '/^[^ahl]/d;/^$/d' bazaar.txt | nl ّ‫اعزخذا‬ ٌٌٖٔٝform‫اخشي‬‫اُ٘زٍغخ‬ ‫ٗلظ‬ ً‫رؼط‬
  • 53. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 52 cat myfirstscript | sed '/^[^ahl]/d;/^$/d' THE SPLAT (ASTERISK) ) * ( ٍ‫ا‬asteriskّٞ‫ثٍو‬َٔ‫ثؼ‬matchingَُpatern‫أُٞعٞد‬‫هجِٜب‬ًِٚ‫ع‬ٍ‫ا‬ ‫ٛزا‬ ٕ‫ًب‬ ‫ٞاء‬pattern ‫ال‬ ّ‫ا‬ ‫ٌٓشس‬ sed '/ahm*/p' splatscript grep “a*” splatscript
  • 54. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 53 ٕ‫كب‬ ‫ظٞسح‬ُ‫ا‬ ٙ‫ٛز‬ ًٛٝgetٍ‫ا‬ ‫ٌؼشع‬patternٍ‫ا‬ ٕ‫ًب‬ ُٞ ً‫ؽز‬characterَُ ‫اُغبثن‬“*”‫ؿٍش‬ ‫ك‬ ‫ًٔب‬ ‫ٓٞعٞد‬ٍٝ‫اال‬ ‫اُغطش‬ ً1999 THE PLUS OPERATOR) + ( ٍ‫ا‬plusَٔ‫ثؼ‬ ّٞ‫ثٍو‬matchingَُpaternٍ‫ا‬ ‫ٛزا‬ ٌٌٕٞ ٕ‫ا‬ ‫ثششؽ‬ ‫هجِٜب‬ ‫أُٞعٞد‬pattern ًِٚ ‫ٓٞعٞد‬
  • 55. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 54 MATCHING A SPECIFIED NUMBER OF THE PATTERN USING THE CURLY BRACKETS}{ ‫رٌشاس‬ ٌٌٖٔ ٚٗ‫ا‬ ٕ‫اُؼ٘ٞا‬ ‫ٛزا‬ ً٘‫ٝٓؼ‬pattern‫ُؼ‬ ٍٖ‫ٓؼ‬ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫أُشاد‬ ٖٓ ‫ذد‬{} ٌَ‫اُش‬ ‫كٜزا‬a{4} = aaaa sed '/19{3}/p' splatscript ‫ٝػغ‬ ‫ٌغت‬ ٌُٖٝ“”ٍ‫ا‬ َ‫هج‬“{“ٍ‫ٝا‬“}” sed '/19{3}/p' splatscript
  • 56. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 55 ٝ‫ا‬ grep “19{2}” splatscript َٔ‫ػ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝmatching‫الي‬3 charactersٍ‫ا‬ ّ‫ك٘غزخذ‬form grep “<[a-z][a-z][a-z]>” 3character ‫اُؼالٓخ‬ ٙ‫ٝٛز‬(< and >)ًٔ‫رغ‬encapsulationٍ‫ا‬ ‫ػذد‬ ً‫ك‬ ٌْ‫ُِزؾ‬letters
  • 57. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 56 ٍ‫ا‬ ‫ٛزا‬ ‫ًزبثخ‬ ٌٌٖٔٝcommandٌَ‫اُش‬ ‫ثٜزا‬ grep “<[a-z]{3}>” 3character A DETOUR - USING A DIFFERENT FIELD SEPARATOR IN SED PATTERN MATCHING ‫اُج‬ ‫اسدٗب‬ ‫ارا‬ٍ‫ا‬ ‫ٛزا‬ ٖ‫ػ‬ ‫ؾش‬patternٍٖ‫ٓؼ‬ ‫ِٓق‬ ً‫ك‬ /home/hamish/some_where ٍ‫ا‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬sedٌَ‫اُش‬ ‫ثٜزا‬ sed „//home/hamish/some_where/!d‟ pathscript ٍ‫ا‬ ٙ‫ٛز‬ ٌُٖٝformٍ‫ا‬ ٙ‫ٛز‬ ‫ًزبثخ‬ ٍَٜ‫ُٝزغ‬ ، ‫ٓب‬ ‫ؽذ‬ ًُ‫ا‬ ‫طؼجخ‬formٍ‫ا‬ ‫عٍٔغ‬ ٍ‫اعزجذا‬ ٌٌٖٔ “”ٍ‫ا‬ ّ‫آب‬ ‫رٞػغ‬ ً‫اُز‬regular expressions‫ثـ‬“%”ٍ‫ا‬ ‫ثذاٌخ‬ ً‫ك‬ ‫كوؾ‬ ‫ٝاؽذح‬command ٚ‫ٜٝٗبٌز‬ ‫ػالٓخ‬ ٕ‫ا‬ ‫االػزجبس‬ ً‫ك‬ ‫االخز‬ ‫ٓغ‬“%”‫ؼب‬ٌ‫ا‬ ‫ٌغجوٜب‬ ٕ‫ا‬ ‫ٌغت‬“” ٍ‫ا‬ ‫ػالٓخ‬ ٕ‫ال‬ ‫ٝٛزا‬“%”ٍ‫ا‬ ‫رخجش‬ ّٞ‫رو‬shellٞٛ ‫ثؼذٛب‬ ً‫ٌؤر‬ ‫عٞف‬ ‫ٓب‬ ٕ‫ا‬regular expression sed „%/home/ahmed%!d‟ pathscript
  • 58. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 57 USING W ORD ENCAPSULATING CHARACTERS ‫اُؼالٓخ‬ ٙ‫ٛز‬(< >)ًٔ‫رغ‬encapsulationِْٜ‫هج‬ ‫ٌٝٞػغ‬“”ٍ‫ا‬ ْٜ‫ٓؼ‬ َٓ‫ٌزؼب‬ ًٌُshell ْٜٗ‫ا‬ ًِ‫ػ‬regular expresionsٌَ‫اُش‬ ‫ثٜزا‬ ‫ظجؾٞا‬ٍ‫ك‬(< >) ٍ‫ا‬ ‫ٝٝظٍلخ‬encapsulationٍ‫ا‬ ‫رـٍِق‬ ًٛpattern‫ثذهخ‬ ٚ‫أُطِٞث‬ ‫اُ٘زٍغخ‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫االٓش‬ ٍٖ‫ث‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫اُلشم‬ ‫الؽع‬ٌٖ ٍ‫ا‬ ّ‫هب‬ ٍٝ‫اال‬ ‫االٓش‬ ٕ‫ا‬ ‫ؽٍش‬shellٍٝ‫ا‬ ٍ‫ثبعزجذا‬3 charactersًَ ٖٓlineّ‫ثبالسهب‬321ً‫ؽز‬ ‫ٛ٘بى‬ ٕ‫ًب‬ ٕ‫ٝا‬Lineٖٓ ‫اًضش‬ ًِ‫ػ‬ ‫ٌؾزٞي‬3 characters ٍ‫ا‬ ّ‫هب‬ ًٗ‫اُضب‬ ‫االٓش‬ ً‫ك‬ ‫ثٍ٘ٔب‬shellٍ‫ا‬ ٍ‫ثبعزجذا‬linesًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬3 characters‫كوؾ‬ RETURNING FROM DETOUR TO OUR DISCUSSION ON CURLY BRACES… َٔ‫ػ‬ ٌٌٖٔmatching‫ُـ‬2 “a” characters‫ؽشٌن‬ ٖ‫ػ‬ َ‫االه‬ ًِ‫ػ‬ sed „/a{2,}/!d‟ infinit ‫اُوٞط‬ َ‫داخ‬ ‫ٝػؼ٘ب‬ ‫ٝارا‬{2,4}ً٘‫ٌؼ‬ ‫كٜزا‬matchًٗ‫اد‬ ‫ثؾذ‬2ً‫ظ‬‫اه‬ ‫ٝثؾذ‬4 sed „/a{2,4}/!d‟ infinit THE TR COMMAND ً٘‫ٌؼ‬translateّٞ‫ٌو‬ ُٞٛٝ‫ؽب‬ ‫ثزـٍٍش‬ٍ‫ا‬ ٖٓ ‫اُؾشف‬ ‫خ‬capitalٍ‫ا‬ ًُ‫ا‬small
  • 59. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 58 ٍ‫ا‬ ‫ر٘لٍز‬ ٌٌٖٔٝcommandَٔ‫ٝػ‬ ٌَ‫اُش‬ ‫ثٜزا‬redirectَُoutputًِ‫ػ‬file ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔtr commandٍ‫ا‬ َٔ‫ػ‬ ٍَٜ‫رغ‬ ً‫ك‬reports‫اُزخِض‬ ًِ‫ػ‬ ‫ٌغبػذٗب‬ ‫ؽٍش‬ ، ٍ‫ا‬ ٖٓspacesٍ‫ٝا‬tabs‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ ٍٚ‫ك‬ ‫ثٌضشح‬ ‫أُٞعٞدح‬option : -sٌ ‫اُزي‬ً‫ك‬ ‫غبػذ‬ ٍ‫ا‬ ‫ػـؾ‬charactersًُ‫ا‬ ٜٚ‫أُزشبث‬character‫كوؾ‬ ‫ٝاؽذ‬ ‫االٓش‬ ‫ػشػ٘ب‬ ‫ارا‬ ‫كٔضال‬freeًَ ٍٖ‫ث‬ ‫أُغبكبد‬ ٖٓ ‫اٌُضٍش‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ٚٗ‫ا‬ ‫كغ٘غذ‬column، ‫ٝاخش‬ ‫االٓش‬ ّ‫ك٘غزخذ‬ ‫ٓغبكخ‬ ‫ٝعؼِٜب‬ ‫أُغبكبد‬ ٙ‫ٛز‬ ‫ؼـؾ‬ٗ ٕ‫ا‬ ‫اسدٗب‬ ‫كبرا‬ free | tr –s “ ” ٍ‫ا‬ ٍ‫اعزجذا‬ ٌٌٖٔٝspace‫ثؤي‬characterٚ‫ػـط‬ ‫ٗشٌذ‬ ‫اخش‬
  • 60. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 59 THE CUT COMMAND ٍ‫ا‬command : cutٍ‫ا‬ ٖٓ ٍٖ‫ٓؼ‬ ‫عضء‬ ‫هطغ‬ ً‫ك‬ ّ‫ٌغزخذ‬lineّ‫ثبعزخذا‬delimiter‫ُزؾذٌذ‬ ‫اعبعٜب‬ ًِ‫ػ‬ ‫اُوطغ‬ ْ‫عٍز‬ ً‫اُز‬ َ‫اُلٞاط‬ ٍ‫ا‬ ٙ‫ٝٛز‬delimitersٍ‫ا‬ ً‫ك‬ ٙ‫ٓٞعٞد‬shell variablesْ‫ثبع‬IFS (Input Field Separators) ٕ‫كب‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬ٍ‫ا‬delimitersٍ‫ا‬ ‫ُذي‬ ‫أُؼشكخ‬cutًٛt = tab, n=new line, “ ”= new line free | tr -s ' ' | grep Mem | cut -d" " –f1-3 ‫ؽٍش‬–d: delimiter ٍ‫ٝا‬–f : field no.
  • 61. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 60 ٍ‫ٝا‬fieldًُ‫ا‬ ْ‫ٌ٘وغ‬ ‫اُغطش‬ ٕ‫ا‬ ً٘‫ثٔؼ‬ ، ‫أُغبكخ‬ ‫ثؼذ‬ ً‫اُز‬ ‫اُؤٍخ‬ ٞٛfields‫ثٍٜ٘ب‬ َ‫ظ‬‫ٌل‬ ( ‫ٓغبكبد‬delimiter) ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٌٖٔٝ“-c”َٔ‫ُؼ‬cutَُcharacters free | tr -s ' ' | grep Mem | cut -c6-13,15,17 ّ‫رغزخذ‬ ٕ‫ا‬ ‫اسدد‬ ‫ٝارا‬tabٖٓ ‫ثذال‬spaceٍ‫ا‬ ٌُٖٝdelimiterٖ‫ػ‬ ‫ػجبسح‬character‫كوؾ‬ ‫ٝاؽذ‬ ٍ‫ا‬ ‫ٌٗزت‬ ٕ‫ا‬ ٌٌٖٔ ‫ٝال‬tabٌَ‫اُش‬ ‫ثٜزا‬“t”ٍ‫ا‬ ً‫ك‬ ‫ًٔب‬IFS‫ؼـؾ‬ٗ ‫ُزُي‬ ،CTRL+vْ‫ص‬tab THE PASTE COMMAND ٍ‫ا‬command : paste‫ٓؾزٌٞبد‬ ‫ثذٓظ‬ ّٞ‫ٌو‬2 files‫ؼغ‬ٌ ‫ثؾٍش‬“tab”ًَ ٍٖ‫ث‬line‫ٝاالخش‬ paste pastescript pasteequal ّ‫اعزخذا‬ ٌٌٖٔٝdelimitersٍ‫ا‬ ً‫ك‬ ‫ٌؾذس‬ ‫ًٔب‬command: cutٍ‫ا‬ ‫ٛزا‬ ‫ؼغ‬ٌ ‫ٛ٘ب‬ ٌُٖٝ delimiterٍ‫ا‬ ٖٓ ‫ثذال‬tab
  • 62. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 61 paste –d”;” pastescript pasteequal THE UNIQ COMMAND ‫االٓش‬uniq‫ٓززبٍُخ‬ ٌٕٞ‫ر‬ ٕ‫ا‬ ‫ثششؽ‬ ‫أٌُشسح‬ ‫اُغطٞس‬ ‫ثؾزف‬ ّٞ‫ٌو‬ ‫ِٓق‬ ‫ٓؾزٌٞبد‬ ‫ثبعزؼشاع‬ ‫هٔ٘ب‬ ‫كبرا‬/etc/passwdٍ‫ا‬ ًٛ ‫ٓب‬ ‫ٓؼشكخ‬ ‫ٝاسدٗب‬shells‫أُغزخذٓخ‬ ٍ‫ا‬ ‫ٗلظ‬ ‫ثٜب‬ ‫أٌُزٞة‬ ‫اُغطٞس‬ ٖٓ ‫اٌُضٍش‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫أُِق‬ ٕ‫ا‬ ‫ك٘غذ‬shells ‫ثبع‬ ّٞ‫ك٘و‬ّ‫زخذا‬uniq‫كوؾ‬ ‫أُخزِق‬ ًِ‫ػ‬ ‫ٝاُؾلبظ‬ ٜٚ‫أُزشبث‬ ‫اُغطٞس‬ ‫ثؾزف‬ ّٞ‫ٗو‬ ًٌُ cut –d”:” –f7 /etc/passwd | uniq
  • 63. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 62 ‫ٗغذ‬ ‫ٝٛ٘ب‬ٕ‫ا‬uniqٜٚ‫ٝأُزشبث‬ ‫أُززبٍُخ‬ ‫اُغطٞس‬ ًَ ‫ثؾزف‬ ّ‫هب‬‫رظٜش‬ ‫ٓبصاُذ‬ ٌُٖٝ ،shells َٔ‫ثؼ‬ ّٞ‫ٗو‬ ٕ‫ا‬ َ‫كبُؾ‬ ، ٜٚ‫ٓزشبث‬sortَُfileَٔ‫ثؼ‬ ّٞ‫ٗو‬ ْ‫ص‬ ‫اٝال‬uniq cut –d”:” –f7 /etc/passwd | sort | uniq THE SORT COMMAND ٍ‫ا‬sort commandsٖٓٝ ‫االًجش‬ ًُ‫ا‬ ‫االطـش‬ ٖٓ ‫أُِق‬ ‫ٓؾزٌٞبد‬ ‫ثزشرٍت‬ ّٞ‫ٌو‬“a”ًُ‫ا‬“z”
  • 64. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 63 ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔoption : -o‫االٓش‬ ‫ٓغ‬sortٍ‫ا‬ ‫ػالٓخ‬ ٖٓ ‫ثذال‬redirectionً٘‫ٌؼ‬ ٞٛٝ output cut -d: -f7 /etc/passwd |sort -ruo test ٍ‫ا‬ ‫ثؼغ‬ ٙ‫ٝٛز‬options‫االٓش‬ ‫ٓغ‬ ّ‫رغزخذ‬ ً‫اُز‬sort Option Action
  • 65. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 64 -o َٔ‫ثؼ‬ ّٞ‫ٌو‬redirectًِ‫ػ‬fileٖٓ ‫ثذال‬“>” -u َٔ‫ُؼ‬uniq sort +t ٍ‫ا‬ ٞٛdelimiterٍ‫ثب‬ ‫اُخبص‬sort +3 ٍ‫ا‬ ‫ػذد‬fields‫عٍزغبِٜٛب‬ ً‫اُز‬ -n ‫اُؾشٝف‬ ‫ٍُٝظ‬ ّ‫االسهب‬ ‫ؽغت‬ ‫اُغطٞس‬ ‫ُزشرٍت‬ -r ٔ‫ُؼ‬َreverse sort cut –d”:” –f3,7 /etc/passwd | sort –t: -rn THE GREP COMMAND ٍ‫ا‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٌٖٔgrep‫ًـ‬filterَ‫داخ‬ ‫ُِ٘ظش‬ ٝ‫ا‬fileٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ‫ٌغزطٍغ‬ ‫ًٔب‬regular expression ٍ‫ا‬ ّ‫اعزخذا‬ ‫اسدٗب‬ ‫ارا‬grepَ‫ثذاخ‬ ‫ُِ٘ظش‬fileٍ‫ا‬ ٙ‫ٛز‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬form grep “/bin/bash” /etc/passwd ٍ‫ا‬ ٕ‫ٝال‬patternًِ‫ػ‬ ‫ٌؾزٞي‬ ٚ٘‫ػ‬ ‫ٗجؾش‬ ‫اُزي‬“/”ٍ‫ا‬ ‫ٛزا‬ ‫ثٞػغ‬ ‫كؤ٘ب‬patternٍ‫ػالٓز‬ َ‫داخ‬ٖ ٍ‫ا‬ ٕ‫ا‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫ٌغت‬ ‫ًٝزُي‬ ، ""grepٖ‫ػ‬ ‫ٌجؾش‬ ٌُٖٝ ‫ًِٔخ‬ ٖ‫ػ‬ ‫ٌجؾش‬ ‫ال‬pattern‫ثـ‬ ‫ٌجذأ‬“/”ْ‫ص‬ “b”‫اُخ‬ ٍ‫ا‬ ‫ثؼغ‬ ‫ٝٛ٘بى‬optionsَُ ‫أُلٍذح‬grep‫كٔضال‬:
  • 66. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 65 ‫اػبكخ‬ ٌٌٖٔoption : -B1ٍ‫ا‬ َ‫هج‬ ‫اُغطٞس‬ ٖٓ ٍٖ‫ٓؼ‬ ‫ػذد‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ًٌُpattern ‫اػبكخ‬ ٌٌٖٔٝ–A1ٍ‫ا‬ ‫ثؼذ‬ ‫ٝاؽذ‬ ‫عطش‬ ‫ُؼشع‬pattern ّ‫اعزخذا‬ ٌٌٖٔٝ–vَٔ‫ُؼ‬reverseَُpatternٍ‫ا‬ ‫ػذا‬ ‫ٓب‬ ‫اُغطٞس‬ ًَ ‫ٌؼشع‬ ٚٗ‫ا‬ ً٘‫ثٔؼ‬ pattern
  • 67. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 66 ّ‫اعزخذا‬ ٌٌٖٔٝ–nَٔ‫ُؼ‬lableَُpattern‫اُزي‬ ‫اُغطش‬ ْ‫سه‬ ‫ؼغ‬ٌ(ٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬pattern) Option Action -B1 ٍ‫ا‬ ‫ٌؼشع‬patternٍ‫ٝا‬lineٚ‫ٌغجو‬ ‫اُزي‬ -A1 ٍ‫ا‬ ‫ٌؼشع‬patternٍ‫ٝا‬lineٌٍِٚ ‫اُزي‬ -v ٍ‫ا‬ ًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬ ‫ػذا‬ ‫اُغطٞس‬ ًَ ‫ٌؼشع‬pattern -n ٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬ ‫اُغطش‬ ْ‫سه‬ ‫ؼغ‬ٌpatternٚ‫ثغبٗج‬ ‫ًِٔخ‬ ‫ٗغزخشط‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ahmedٍ‫ا‬ ‫عٍٔغ‬ ٖٓfilesٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬working directory ٍ‫ا‬ ْ‫سه‬ ‫ٝٓؼشكخ‬Lineٍ‫ا‬ ‫ٛزا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬patternٍ‫ا‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬form‫اُزبٍُخ‬: ٍ‫ا‬ ْ‫اع‬ ٍ‫ثبعزجذا‬ ‫هٔ٘ب‬ ‫ؽٍش‬file‫ثـ‬“*”ٍ‫ا‬ ًَ ً‫ك‬ ‫ٌجؾش‬ ً‫ؽز‬filesٍ‫ا‬ ْ‫اع‬ ‫ثؼشع‬ ّ‫هب‬ ‫ٝٛ٘ب‬ ، fileٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫اُزي‬Patternْ‫ٝسه‬ٍ‫ا‬ ً‫ك‬ ‫اُغطش‬file
  • 68. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 67 ّ‫اعزخذا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬grep‫ًـ‬filter ُ‫ر‬ ٌٍٕٞ‫ك‬‫ي‬ٍ‫ا‬ ّ‫اعزخذا‬ ‫ؽبُخ‬ ً‫ك‬grepٍ‫ا‬ ‫ٓغ‬pipeٍ‫ا‬ َ‫ٌذخ‬ ‫ؽٍش‬outputٍ‫ا‬ ًِ‫ػ‬ ‫ًبٓال‬grep َٔ‫ثؼ‬ ّٞ‫كٍو‬filtrationٍ‫ا‬ ‫ٝاعزخشاط‬ ُٚdata‫أُطِٞثخ‬ ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ ‫ثٞػٞػ‬ ‫رُي‬ ‫ٌٝظٜش‬logs: ًُ‫اُزب‬ ٍ‫أُضب‬ ً‫ك‬ ‫ًٔب‬ tail -10 /var/log/messages |grep '19:[0-5][0-9]:[0-5][0-9]‟ ‫كٜ٘ب‬ٍ‫ا‬ ‫اخزٗب‬outputٖٓtailٞٛٝ10ًِ‫ػ‬ ٙ‫ٝادخِ٘ب‬ ‫عطٞس‬grepَٔ‫ثؼ‬ ّ‫كوب‬filter‫ٝاخشط‬ ُٚ4 ‫كوؾ‬ ‫عطٞس‬ GREP, EGREP AND FGREP ‫ٛ٘بى‬3ٍ‫ا‬ ٖٓ ‫اٗٞاع‬grep Type Function Grep ٍ‫ا‬ ٞٛstandard grep Egrep ‫ث‬ ّ‫ٌغزخذ‬ٍ‫ا‬ ‫ٓغ‬ ‫ٌضشح‬extended regular expressions‫ثطئ‬ ٌُٚ٘ٝ Fgrep ٍ‫ا‬ ‫ٓغ‬ ّ‫ٌغزخذ‬ ‫ال‬regular expressions‫عشٌغ‬ ٜٞ‫ك‬ ‫ُزُي‬ ٍ‫ٝا‬sedٍ‫ا‬ ٖٓ ‫هٍِال‬ ‫اعشع‬grep
  • 69. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 68 CHAPTER 4. PRACTICALLY SHELL SCRIPTING SECTION TECHNIQUES TO USE WHEN WRITING, SAVING AND EXECUTING SHELL SCRIPTS ‫اي‬ َٔ‫ػ‬ ‫ثذاٌخ‬ ً‫ك‬ ‫اٗ٘ب‬ ًِ‫ػ‬ ‫ٗزلن‬ ‫دػٞٗب‬scriptٍ‫ا‬ ‫ثزطجٍن‬ ‫ٗجذأ‬ ٕ‫ا‬ ‫ٌغت‬commandsٍ‫ا‬ ًِ‫ػ‬ command lineٍ‫ا‬ ًُ‫ا‬ ‫ث٘وِٜب‬ ّٞ‫ٗو‬ ‫عٍذ‬ ٌَ‫ثش‬ ‫ػِٜٔب‬ ٖٓ ‫اُزؤًذ‬ ‫ٝثؼذ‬script file َٔ‫ػ‬ ‫اسدٗب‬ ‫كبرا‬scriptٍ‫ا‬ ‫ُٔؼشكخ‬ ّٞ‫ٌو‬shellsٍ‫ا‬ ً‫ك‬ ‫أُغزخذٓخ‬systemٍ‫ا‬ ‫ثزطجٍن‬ ‫اٝال‬ ّٞ‫ك٘و‬ commandًِ‫ػ‬ٍ‫ا‬terminal cat –d: -f7 /etc/passwd | sort –u ٍ‫ا‬ ‫ٛزا‬ ‫ثٞػغ‬ ‫رُي‬ ‫ثؼذ‬ ّٞ‫ٗو‬ ْ‫ص‬command‫ٓضال‬ ٍٚٔ‫ٝٗغ‬ ‫ِٓق‬ ً‫ك‬script.sh ٍ‫ا‬ ٖ‫ػ‬ ‫ٗؼِٜٔب‬ ٕ‫ا‬ ‫ٌغت‬ ‫اُوٞاػذ‬ ‫ثؼغ‬ ‫ٛ٘بى‬ ٌُٖٝscriptٕ‫اال‬ ‫ػٍِٜب‬ ‫ٗزؼشف‬ ‫ٝعٞف‬ DETOUR: FILE EXTENSION LABELS 1-ٍ‫ثب‬ ْ‫ٌٜز‬ ‫ال‬ ‫اٌٍُِ٘ظ‬extensions ‫ال‬ ٚ‫ٌؼشك‬ ‫ٝال‬ٕ‫ا‬ ٍٚ‫ك‬ ‫االعبعٍخ‬ ‫اُوبػذح‬ ٕeverything is a fileْ‫اع‬ ًُ‫ا‬ ‫االٓزذاد‬ ‫ؼٍق‬ٗ ‫هذ‬ ‫ٌُٝ٘٘ب‬ ٍ‫ا‬fileٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ٖ‫ٗؾ‬ ‫ٗززًش‬ ًٌُfileٞٛscript‫اُخ‬ ً‫ظ‬ٗ ‫ِٓق‬ ٝ‫ا‬ script script.sh 2-ٍ‫ا‬scriptٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬executable‫االٓش‬ ‫ثز٘لٍز‬ ‫ٝرُي‬ chmod +x script.sh 3-ٍ‫ا‬ ‫ُز٘لٍز‬script‫ؼغ‬ٗ ٕ‫ا‬ ‫ٌغت‬ٚٓ‫آب‬“./”ٝ‫ا‬“sh”ٍ‫ا‬ ‫ٌؼشف‬ ً‫ؽز‬shellٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬fileٞٛ script ./script sh script
  • 70. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 69 COMMENTS IN SCRIPTS ٍ‫ا‬ ً‫ك‬ ٍٖ‫ٓؼ‬ ‫عطش‬ ‫ٝظٍلخ‬ ‫ٗششػ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬scriptٍ‫ا‬ َ‫ثذاخ‬ ٚ‫ٌٗزج‬ ٕ‫ا‬ ٌٍٖٔ‫ك‬script‫اػزجبس‬ ًِ‫ػ‬ ٚٗ‫ا‬commentٍ‫ا‬ ّٞ‫ٌو‬ ‫ٝال‬shell‫ؼغ‬ٗ ‫رُي‬ َٔ‫ُٝؼ‬ ، ٙ‫ثز٘لٍز‬(#)ٍ‫ا‬ ّ‫آب‬line‫ًـ‬ ٙ‫اػزجبس‬ ‫أُشاد‬ comment #A script to produce the unique shells using the /etc/passwd file cut -d: -f7 /etc/passwd |sort -u VARIABLES ٍ‫ا‬variables‫أُؼِٞٓبد‬ ٌٖ‫ُزخض‬ ٚ‫ٓئهز‬ ‫ؽشٌوخ‬ ًٍٛ‫ا‬ ً‫ك‬ ‫ٓغبؽخ‬ ‫ؽغض‬ ْ‫ٌٝز‬memoryْ‫ثبع‬ ٍ‫ا‬variable nameٍ‫ا‬ ‫كٍٜب‬ ‫ٌٝٞػغ‬variable NAME=”ahmed” ٍ‫ا‬ ‫ؽٍش‬variable nameٞٛNAMEٍ‫ٝا‬ ،variableٞٛahmed ٍ‫ا‬ ‫ٓغ‬ َٓ‫ُِزؼب‬ ٍٖٜٔٓ ٍٖ‫هبػذر‬ ‫ٝٛ٘بى‬variables 1-ٍ‫ا‬variableٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬capital‫ًِٔخ‬ ‫ٗشي‬ ‫ًٔب‬NAME 2-ٍ‫ا‬ ٍٖ‫ث‬ ‫ٓغبكبد‬ ‫اي‬ ‫رٞعذ‬ ‫ال‬variable name‫ٝػالٓخ‬“=”ٍ‫ا‬ ٍٖ‫ث‬ ‫ٝال‬“”ٍ‫ٝا‬value ٛ ‫ٓغ‬ َٓ‫ُِٝزؼب‬ٍ‫ا‬ ‫زا‬variableٍ‫ثب‬ ‫ٝاالعزلبدح‬value‫ػالٓخ‬ ٚٓ‫آب‬ ‫ؼغ‬ٗ ٕ‫ا‬ ‫ٌغت‬“$” echo "$NAME" ٍ‫ا‬ ‫ًزبثخ‬ ٍ‫اشٌب‬ ‫اثغؾ‬ ٙ‫ٝٛز‬script
  • 71. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 70 SHEBANG OR HASHPLING!# ٍ‫ا‬ ّ‫ٌغزخذ‬ ‫ٓ٘ب‬ ‫اٌُضٍش‬bashٚٓ‫ٌغزخذ‬ ‫ال‬ ‫هذ‬ ‫اُجؼغ‬ ‫ٛ٘بى‬ ٌُٖ‫ثٌزبثخ‬ ‫هٔذ‬ ‫ٝارا‬ ،scriptٍٖ‫ٓؼ‬ ٍ‫ا‬ ًِ‫ػ‬Bash‫ػ‬ ‫طؾٍؼ‬ ٌَ‫ثش‬ َٔ‫ٌؼ‬ ‫ال‬ ‫كوذ‬ٍ‫ا‬ ٖٓ ‫اخش‬ ‫ٗٞع‬ ًِshells ٍ‫ا‬ ‫اعجبس‬ ‫كٍغت‬ ‫ُزُي‬scriptً‫ك‬ َٔ‫ٌؼ‬ ٕ‫ا‬shellٍٚ٘‫ٓؼ‬: ٍٖ‫اُطشٌوز‬ ٖٓ ‫ٝاؽذ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ 1-ٍ‫ا‬ ٍَ‫رشـ‬script‫االٓش‬ ّ‫ثبعزخذا‬sh sh script.sh 2-ٍ‫ا‬ ‫اػبكخ‬shebang ٍ‫ٝا‬shebangٍ‫ا‬ ٖٓ ‫ٓضٌظ‬ ٞٛ“# : hash”ٍ‫ٝا‬“! : bang”ٍ‫ا‬ َ‫ثذاخ‬ ‫رٞػغ‬scriptٚ‫ثذاٌز‬ ً‫ك‬ ٍُِ‫ا‬ ‫ٗٞع‬ ًِ‫ػ‬ ‫ذالُخ‬interpreter‫ٓغ‬ َٓ‫عٍزؼب‬ ‫اُزي‬ٍ‫ا‬script #!/bin/bash EXIT ٍ‫ا‬ ‫اُطشٌوخ‬ ‫ػشك٘ب‬ ٕ‫ا‬ ‫ثؼذ‬standardٍ‫ا‬ ‫ُجذاٌخ‬scriptًٜ٘ٗ ٕ‫ا‬ ‫ٌغت‬ ً‫اُز‬ ‫اُطشٌوخ‬ ًِ‫ػ‬ ‫ع٘زؼشف‬ ٍ‫ا‬ ‫ثٜب‬scriptٍ‫ثب‬ ‫ٌؼشف‬ ‫ٓب‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ending status ٍٚ٘‫ٓؼ‬ ‫هٍٔخ‬ ‫رخشط‬ ‫ثشٗبٓظ‬ ‫اي‬ َٔ‫ػ‬ ‫اٗزٜبء‬ ‫كؼوت‬ًٜ‫اٗز‬ َٛ( ‫اُجشٗبٓظ‬ ‫ٛزا‬ َٔ‫ػ‬ ًٜ‫اٗز‬ ‫ًٍق‬ ‫رٞػؼ‬ ٍ‫ا‬ ًٔ‫رغ‬ ‫اُؤٍخ‬ ٙ‫ٝٛز‬ )‫اخطبء‬ ٚ‫ث‬ ّ‫ا‬ ‫طؾٍؼ‬ ٌَ‫ثش‬exit value ‫ٌؾذس‬ ُْٝ ‫طؾٍؼ‬ ٌَ‫ثش‬ ‫اُجشٗبٓظ‬ ًٜ‫اٗز‬ ‫كإرا‬errorsٍ‫ا‬ ٌٕٞ‫كز‬exit value =0 ٍ‫ا‬ ‫ثؼغ‬ ‫ٝؽذس‬ ‫طؾٍؼ‬ ٌَ‫ثش‬ ‫اُجشٗبٓظ‬ ًٜ‫ٌ٘ز‬ ُْ ‫ارا‬ ‫آب‬errorsٍ‫ا‬ ٌٕٞ‫كز‬exit value = 1-255 Exit Value Exit Status 0 (Zero) Success
  • 72. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 71 Non-zero Failure 2 Incorrect usage 127 Command Not found 126 Not an executable my be the script is not executable ٍ‫ا‬ ‫ٓؼشكخ‬ ‫ٌغت‬ ‫ُزُي‬exit statusًَ ‫ٜٗبٌخ‬ ً‫ك‬script‫ٜٗبٌخ‬ ً‫ك‬ ‫اُغطش‬ ‫ٛزا‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ٍ‫ا‬script echo $? NULL AND UNSET VARIABLES ٍ‫ا‬ ‫ثؼغ‬ ‫ٛ٘بى‬variablesَ‫ٓض‬ ‫ػٜ٘ب‬ ‫ٗزؾذس‬ ٕ‫ا‬ ‫ٌغت‬ ً‫اُز‬ ‫اُٜبٓخ‬nullٝunset ٍ‫ا‬ ٕ‫ا‬ ً٘‫ٝٓؼ‬variable nullٍ‫ا‬ ٕ‫ا‬ ٞٛvariable‫ٓٞعٞد‬‫ح‬(set)ُٜ ‫ٍُظ‬ ٌُٖٝ‫هٍٔخ‬ ‫ب‬ (null)ًُ‫ًبُزب‬ NAME=”” NAME=
  • 73. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 72 ٍ‫ا‬ ٕ‫كب‬ ‫ٝٛ٘ب‬Variable=NAMEٚ‫هٍٔز‬ ٌُٖٝ ‫ٓٞعٞد‬null‫ٝالؽع‬ٍ‫ا‬ ٍٖ‫ث‬ ‫ٓغبكخ‬ ‫ٝعٞد‬ ّ‫ػذ‬“” ٍ‫ا‬ ‫ٛزا‬ ٖ‫ػ‬ ‫ٌٝ٘زظ‬variable‫كبسؽ‬ ‫عطش‬ ‫ٌغبٝي‬ ‫ال‬ ‫ٛزا‬ ٌُٖٝ NAME=” ” ٍ‫ا‬ ٍٖ‫ث‬ ‫أُغبكخ‬ ٕ‫ال‬“ ”ٖ‫ػ‬ ‫رؼجش‬value‫رغبٝي‬ ًٜ‫ك‬ ‫ُزُي‬ NAME=”ahmed” ٍ‫ا‬ ‫آب‬Unsetٍ‫ا‬ ‫ثٔغؼ‬ ّٞ‫رو‬ ًٜ‫ك‬valueَُ ٚ‫ظ‬‫ظ‬‫أُخ‬variableًٌِ ‫ًٔب‬ unset NAME ٍ‫ا‬ ٍٖ‫ث‬ ‫ٗلشم‬ ٕ‫ا‬ ‫ٌٝغت‬null valueٍ‫ٝا‬empty valueٍ‫أُضب‬ ‫ٗشي‬ ‫اًضش‬ ‫اُلشم‬ ‫ؼؼ‬‫ٌز‬ ًٌُٝ، ًُ‫اُزب‬‫اُضالس‬ ٍٖ‫ث‬ ‫اُلشم‬ ‫ٝالؽع‬variables:
  • 74. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 73 VARIABLE EXPANSION ٍ‫ا‬ ّٞ‫ٌو‬ ‫ًٍق‬ ٖ‫ػ‬ ‫ع٘زؾذس‬ ‫ٝٛ٘ب‬shellٍ‫ا‬ ‫ثزشعٔخ‬variablesٕ‫ًب‬ ‫كبرا‬ ،variable=NAME‫ُٜٝب‬ value = ahmed NAME=”ahmed” ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫ٝهٔذ‬echo‫ُؼشع‬ٍ‫ا‬ ‫هٍٔخ‬Value echo $NAME ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ‫اُ٘برظ‬ ٌٍٕٞ‫كغ‬ ٍ‫ا‬ ‫ًزج٘ب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝcommandٌَ‫اُش‬ ‫ثٜزا‬ echo $NAMEX ٍ‫ا‬ ٕ‫كب‬shellٍ‫ا‬ ٕ‫ا‬ ‫عٍغذ‬NAMEXٍ‫ا‬ ‫خِق‬ ‫ًبِٓخ‬ ‫ٌٓزٞثخ‬$‫ٛ٘بى‬ ٕ‫ا‬ ٖ‫كٍظ‬variable‫اعٜٔب‬ NAMEXٝ ‫ٌغذٛب‬ ِٖ‫ك‬ ‫ػٜ٘ب‬ ‫ٌجؾش‬ ‫ػ٘ذٓب‬ ٌُٖٝ‫اُ٘زٍغخ‬ ٌٕٞ‫عز‬errorًٌِ ‫ًٔب‬
  • 75. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 74 ‫عٍذا‬ ‫اُلشم‬ ‫ٝالؽع‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ًُ‫ا‬ ‫اٗظش‬ ٍ‫ا‬ ٍٖ‫ث‬ ‫ُِزلشٌن‬ ‫ؽشٌوخ‬ َ‫ؼ‬‫ٝاك‬variableٍ‫ا‬ ‫ؼغ‬ٗ ٕ‫ا‬ ًٛ ٌٍِٚ ‫شٍئ‬ ‫ٝاي‬ ٚ‫ٗلغ‬variableٍٖ‫ث‬ curly brackets {} echo ${NAME}X ٍ‫ا‬ ْٜ‫ٌل‬ ‫ٝعٞف‬shellٍ‫ا‬ ٕ‫ا‬variablٍ‫ا‬ ٕ‫ٝا‬ ‫االهٞاط‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ًٛX‫ٜٓ٘ب‬ ‫عضء‬ ‫ٍُغذ‬ ENVIRONMENTAL VS SHELL VARIABLES ‫ال‬shell variableٍ‫ا‬ ًٛvariableٍ‫ا‬ ًِ‫ػ‬ ‫رطجن‬ ً‫اُز‬shell‫كوؾ‬ ‫ؽبٍُب‬ ‫ػٍِٜب‬ َٔ‫ٗؼ‬ ً‫اُز‬ ُٖٝ‫اي‬ ًِ‫ػ‬ ‫رطجن‬shell‫ًبٗذ‬ ‫ارا‬ ً‫ؽز‬ ‫ٗلزؾٜب‬ ‫عذٌذح‬shellٍ‫ا‬ َ‫داخ‬ ‫ٓلزٞؽخ‬shellّ‫ثبعزخذا‬ ‫االٓش‬Bash
  • 76. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 75 ‫ال‬environment variablesٍ‫ا‬ ًَ ًِ‫ػ‬ ‫رطجن‬shellsً‫ك‬ ‫أُٞعٞدح‬ٍ‫ا‬system‫ٌٝوشأٛب‬ ٍ‫ا‬systemٍ‫ا‬ ‫ػ٘ذ‬login ٍ‫ا‬ ٍٞ‫اؽ‬ ٕ‫ا‬ ‫اسدد‬ ‫ٝارا‬shell variableًُ‫ا‬environment variable‫االٓش‬ ّ‫ٗغزخذ‬export export NAME ARITHMETIC IN THE SHELL ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫اُؾغبثٍخ‬ ‫اُؼالٓبد‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ع٘زؾذس‬scriptingٍ‫ا‬ ٖ‫ػ‬ ‫ٝع٘زؾذس‬ integer arithmetic ٍ‫ا‬ ّ‫ثبعزخذا‬ ‫ظؾٍؾخ‬ُ‫ا‬ ‫اُؾغبثٍخ‬ ٍْ‫اُو‬ ‫ٓغ‬ َٓ‫ُِزؼب‬ ‫ؽشم‬ ‫ػذح‬ ‫ٝٛ٘بى‬scripts: 1-ٍ‫ا‬ ‫ٝػغ‬expressionٍٖ‫ٓضدٝع‬ ٍٖ‫هٞع‬ ً‫ك‬ ‫اُؾغبثٍخ‬ ‫أُؼبدُخ‬ ٝ‫ا‬ ً‫اُؾغبث‬$(( ))
  • 77. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 76 ٍ‫ا‬ ً‫ك‬ ّ‫رغزخذ‬ ً‫اُز‬ ‫اُؾغبثٍخ‬ ‫اُؼالٓبد‬ ‫ثؼغ‬ ٙ‫ٝٛز‬script Arithmetic operators action + ‫اُغٔغ‬ ‫ػالٓخ‬ - ُ‫ا‬ ‫ػالٓخ‬‫طشػ‬ * ‫ؼشة‬ُ‫ا‬ ‫ػالٓخ‬ / ‫اُوغٔخ‬ ‫ػالٓخ‬ % ‫أُئٌٞخ‬ ‫اُ٘غجخ‬ ‫ػالٓخ‬ ٍ‫ا‬ ‫ٌُزبثخ‬ ‫اُطشم‬ ٙ‫ٛز‬ ًَ ٕ‫ا‬ ‫ٝالؽع‬expression‫اُ٘زٍغخ‬ ‫ٗلظ‬ ًُ‫ا‬ ‫رئدي‬ ((J=I+5)) J=$((I+5)) J=$(( I + 5)) $(( J = I + 5)) ٚ٘‫ػ‬ ‫ٌ٘زظ‬ ‫عٞف‬ "=" ‫ػالٓخ‬ ‫ٝثؼذ‬ َ‫هج‬ ‫ٓغبكبد‬ ‫ٝعٞد‬ ٌُٖٝerror J = $(( I + 5 ))
  • 78. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 77 CHAPTER 5. USING QUOTATION MARKS INTRODUCTION ٍ‫ا‬ ‫ٛزا‬ ً‫ك‬chapterٍ‫ا‬ ٖ‫ػ‬ ‫ع٘زؾذس‬quotation marks، ‫االخش‬ ٖ‫ػ‬ ‫ٝاخزالكٜب‬ ‫ٝٝظٍلزٜب‬ ‫ٝٛ٘بى‬3ٍ‫ا‬ ٖٓ ‫اٗٞاع‬quotation marks Our term Real term Symbol Ticks Single quotes „ Back ticks Back quotes ` ("‫"ر‬ ٍ‫ا‬ ‫ؽشف‬ ًِ‫)ػ‬ Quotes Double quotes “ SINGLE QUOTES OR "TICKS" 1-ٍ‫ا‬ ّ‫ٗغزخذ‬single quotesٍ‫ا‬ ‫ؽجبػخ‬ ‫اسدٗب‬ ‫ارا‬charactersً‫ؽز‬ ٌَ‫اُش‬ ‫ث٘لظ‬ ‫ًبِٓخ‬ ًِ‫ػ‬ ‫رؾزٞي‬ ‫ًبٗذ‬ ‫ارا‬special characters‫رزشعٜٔب‬ ‫ال‬ ًٜ‫ك‬ 2-ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ‫اص٘بء‬ ٚٓ‫اعزخذا‬ َ‫ؼ‬‫ٌل‬ ‫ال‬filesًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬spacesٌَ‫اُش‬ ‫الؽع‬ ، ‫اُزب‬ًُ
  • 79. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 78 3-َٔ‫ُؼ‬ ‫اعزخذآٜب‬ ٌٌٖٔsetَُvariablesٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ ّ‫رغزخذ‬ ‫ٝال‬variables ٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬commands ‫الؽع‬ٕ‫ا‬ٍ‫ا‬shellٕ‫ا‬ ‫اػزجشد‬ٍ‫ا‬valueًٛahmed gamilٍ‫ثب‬ ‫ٓـِلخ‬ ‫الٜٗب‬ ‫ًِٜب‬single quotes 4-َٔ‫ُؼ‬ ‫اعزخذآٜب‬ ٌٌٖٔnew line DOUBLE QUOTES 5-ٍ‫ا‬ ‫ٓغ‬ ّ‫رغزخذ‬special characters ٕ‫ا‬ ‫ٝالؽع‬ٙ‫ٛز‬ٍ‫ا‬commands‫اُ٘زٍغخ‬ ‫ٗلظ‬ ًُ‫ا‬ ‫ٌئدٝا‬
  • 80. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 79 ٍ‫ا‬ ًَspecial charactersٍ‫ا‬ َ‫ثذاخ‬ ‫أُٞعٞدح‬“”‫ًـ‬ ‫ٓؼٜب‬ َٓ‫اُزؼب‬ ْ‫ٌز‬characters‫ٝال‬ ‫ػبدٌخ‬ َٔ‫ػ‬ ْ‫ٌز‬expansionٍ‫ا‬ ‫ػذا‬ ‫ُٜب‬$ٝ„ ٍ‫ا‬ ّ‫اعزخذا‬ ‫اسدٗب‬ ‫ارا‬“$”‫ًـ‬character‫ٍُٝظ‬ ‫ػبدي‬special character‫ػالٓخ‬ ‫ؼغ‬٘‫ك‬“” ًُ‫ًبُزب‬ ٍ‫ا‬ ٕ‫ا‬ ‫ٗغذ‬ ‫ٝٛ٘ب‬shellٍ‫ا‬ َٓ‫ٌؼب‬“”‫ًـ‬escape characterٍ‫ا‬ ٌَٞ‫ثزؾ‬ ّٞ‫رو‬special characterًُ‫ا‬ ‫ٌٍِٜب‬ ‫اُزي‬character‫ػبدي‬ٚ‫رشعٔز‬ ْ‫ٌز‬ ‫ال‬ ً‫ُط‬ ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔ“”‫االٓش‬ ‫ٓغ‬ ‫اخش‬ ٌَ‫ثش‬echo –eٍ‫ا‬ َٓ‫رؼب‬ ‫ؽشٌوخ‬ ‫ثزـٍٍش‬ ّٞ‫ٌو‬ ‫اُزي‬shell‫ٓغ‬ ٍ‫ا‬“”ٌٌٕٞ ‫ؽٍش‬ Action Command n ‫عذٌذ‬ ‫ُغطش‬ ٍٝ‫اُ٘ض‬ t ‫اػبكخ‬tab
  • 81. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 80 BACKTICKS ٍ‫ا‬ ّ‫رغزخذ‬(``)ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬‫ٗ٘لز‬commandٍ‫ا‬ ‫ٝٗؤخز‬output‫كبرا‬ ،‫اخشي‬ ‫ٓشح‬ ٚٓ‫ٝٗغزخذ‬ ‫االٓش‬ ّ‫ك٘غزخذ‬ ًُ‫اُؾب‬ ‫اُزبسٌخ‬ ‫ػشع‬ ‫اسدٗب‬ date ٍ‫ا‬ ٍَ‫رشـ‬ ‫اص٘بء‬ ًُ‫اُؾب‬ ‫اُزبسٌخ‬ ‫ٗؼشع‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝscriptٕ‫ا‬ ‫كٍغت‬ً‫ك‬ ٚ‫ؼؼ‬ٗvariableْ‫ص‬ ٍ‫ا‬ ‫ٛزا‬ ّ‫ٗغزخذ‬Variableٍ‫ا‬ ً‫ك‬scriptٌَ‫اُش‬ ‫ثٜزا‬ ٍ‫ا‬ ‫هٍٔخ‬ ٕ‫ا‬ ‫الؽع‬ ٌُٖٝDATEٍ‫ا‬ ٕ‫ال‬ ‫اخشي‬ ‫ٓشح‬ ‫رزـٍش‬ ُٖٝ ًٛ ‫ًٔب‬ َ‫عزظ‬variable : DATE ٍ‫ا‬ ٍَ‫رشـ‬ ْ‫ر‬ ‫ارا‬ ‫كوؾ‬ ‫ٝاؽذح‬ ‫ٓشح‬ ‫ٌزـٍش‬commandٍ‫ا‬ ٍٖ‫ث‬backticks ? َ‫اُؾ‬ ‫كٔب‬ ‫ارا‬ َٔ‫ػ‬ ‫ٌغت‬resetَُDATEٍ‫ا‬ ‫ٌظٜش‬ ٕ‫ا‬ ‫ٗشٌذ‬ ‫ٓشح‬ ًَ ً‫ك‬date‫ظٍض‬‫رخ‬ ‫اػبدح‬ ‫ؽشٌن‬ ٖ‫ػ‬ ًُ‫اُؾب‬ ٍ‫ا‬variable‫اخشي‬ ‫ٓشح‬ DATE=`date` ٍ‫ا‬ ّٞ‫ٌو‬ ‫ٝثزُي‬variable : DATEٍ‫ا‬ ‫ثوشاءح‬valueَُ ‫اُغذٌذح‬date
  • 82. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 81 ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔ ‫ًٔب‬variable : DATEٍ‫ا‬ ‫ٛزا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ٙ‫ٝؽذ‬ ‫اُٞهذ‬ ‫ُؼشع‬command TIME=`echo $DATE | cut –d‟ ‟ –f4` ٍ‫ا‬ ً‫ك‬ ‫اُزـٍٍش‬ ٕ‫كب‬ ‫ٝثزُي‬DATE variableٍ‫ا‬ ً‫ك‬ ‫رـٍٍش‬ ٚ‫ٌزجؼ‬TIME variable ٍ‫ا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝback ticksٍ ‫ظٜب‬ٍ‫ظ‬‫رخ‬ ٕٝ‫ثذ‬ ‫ٗلغٜب‬variableٍ‫أُضب‬ ً‫ك‬ ‫ًٔب‬ ًُ‫اُزب‬ ٍ‫ا‬ ًُ‫ا‬ ‫اُ٘زٍغخ‬ ‫خشعذ‬ ٌُٖٝ ٙ‫ر٘لٍز‬ ْ‫ر‬ ‫االٓش‬ ٕ‫ا‬ ‫ع٘غذ‬command lineُ‫ُز‬ ، ‫ُز٘لٍزٛب‬ٍ‫ا‬ ‫ظٜش‬ ‫ي‬ error‫ٌٞعذ‬ ‫ال‬ ٚٗ‫ال‬commandٚٔ‫اع‬08:49:46،‫ظٍض‬‫رخ‬ َ‫ؼ‬‫ٌل‬ ‫ُزُي‬variableَُback ticks commands ‫ػالٓخ‬ ّ‫اعزخذا‬ ‫ؼب‬ٌ‫ا‬ ٌٌٖٔ$()ٍ‫ا‬ ٖٓ ‫ثذال‬back ticksٍ‫ا‬ ٕ‫ال‬back ticks‫سإٌزٜب‬ ‫ؼؼت‬ٌ ‫سثٔب‬ ٍ‫ا‬ ً‫ك‬script SHELL ARITHMETIC'S WITH EXPR AND BACK QUOTES ‫رؾذص‬ ‫ُوذ‬ٖ‫ػ‬ ‫عبثوب‬ ‫٘ب‬$(())ٍ‫ا‬ ‫ثؼغ‬ ‫ٛ٘بى‬ ٌُٖٝ ‫اُؾغبثٍخ‬ ‫اُؼٍِٔبد‬ ً‫ك‬ ّ‫رغزخذ‬ ً‫اُز‬shells ‫ثـ‬ ‫ػٜ٘ب‬ ‫االعزؼبػخ‬ ٌٖٔ‫ث‬ ‫ُزُي‬ ‫رلٜٜٔب‬ ‫ال‬ ‫اُوذٌٔخ‬commandٚٔ‫اع‬exprً‫ًبالر‬
  • 83. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 82 i=0 i=$((i+1)) ‫ٌغبٝي‬ ‫ٝٛزا‬ i=0 i=$(expr i+1) ‫ؼب‬ٌ‫ا‬ ‫ٌغبٝي‬ ٞٛٝ i=`expr i+1` ANOTHER TIP WHEN USING QUOTATION MARKS ‫ظٍض‬‫ثزخ‬ ‫هٔ٘ب‬ ‫ارا‬variable : file‫االٓش‬ ‫ٗزغخ‬ ‫ُؼشع‬ls –al‫اُ٘زٍغخ‬ ‫ثؼشع‬ ‫ٝهٔ٘ب‬ file=`ls -al` echo $file ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫ًِٜب‬ ‫اُ٘زٍغخ‬ ‫كغزظٜش‬Unformatted ‫ؼٍق‬ٗ ٕ‫ا‬ ‫كٍغت‬ ‫أُشٌِخ‬ ٙ‫ٛز‬ ‫ٗؼبُظ‬ ًٌُٝ“”
  • 84. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 83 echo “$file”
  • 85. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 84 CHAPTER 6. SO, YOU WANT AN ARGUMENT? INTRODUCTION ًٔ‫اي‬ ٍَ‫ُزشـ‬ ٕ‫ا‬ ‫ػِٔ٘ب‬ ‫ب‬scriptًُ‫ًبُزب‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌغت‬ ./script.sh ًُ‫ًبُزب‬ ‫رشـٍِخ‬ ‫ؼب‬ٌ‫ا‬ ٌٌٖٔ ٌُٖٝ ./eatout.sh file.txt ٍ‫ا‬ ٙ‫ٝٛز‬formٍ‫ا‬ ‫ر٘لٍز‬ ‫اسدٗب‬ ‫ارا‬ ‫ٓلٍذح‬scriptًِ‫ػ‬fileٍٖ‫ٓؼ‬ ٍ‫ا‬ ‫ر٘لٍز‬ ٌٌٖٔٝscriptٍ‫ا‬ َ‫ثذاخ‬ ‫رٞعذ‬ ‫ًِٔخ‬ ًِ‫ػ‬file‫ٛ٘ب‬ ًٔ‫رغ‬ ‫أٌُِخ‬ ٙ‫ٝٛز‬ ،argument ./eatout.sh Word-in-file.txt ‫ُذٌ٘ب‬ ٕ‫ا‬ ‫ٗلزشع‬script : eat.shٝfile : restaurant.txtًِ‫ػ‬ ‫ٌؾزٞي‬dataْ‫أُطبػ‬ ٖ‫ػ‬ ٌٍُٖٝ ْ‫أُطبػ‬ ٖٓ ٍٖ‫ٓؼ‬ ‫ٗٞع‬ ‫ثٍبٗبد‬ ‫ٗغزخشط‬ ٕ‫ا‬ ‫ٝٗشٌذ‬Italian ٍ‫ا‬ ٕ‫ٝا‬scriptً‫االر‬ ًِ‫ػ‬ ‫ٌؾزٞي‬
  • 86. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 85 ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ّٞ‫ٗو‬ ًٌُٝscriptُ‫ثب‬ ‫االٓش‬ ‫ثٌزبثخ‬ ّٞ‫ٗو‬ًُ‫اُزب‬ ٌَ‫ش‬ ./eat.sh Italian ٍ‫ا‬ ً‫ك‬ ًٗ‫اُضب‬ ‫اُغطش‬ ٕ‫ا‬ ‫عٍذا‬ ‫الؽع‬script‫اُشٓض‬ ًِ‫ػ‬ ‫ٌؾزٞي‬$1‫ٛ٘بى‬ َٛٝ ٙ‫ٓؼ٘ب‬ ‫كٔب‬$0ٝ$2 ‫اُخ‬ ٍ‫كب‬ ْ‫ٗؼ‬shell‫اعضاء‬ ‫ٓغٔٞػخ‬ ًُ‫ا‬ ‫االٓش‬ ‫ٛزا‬ ٍْ‫ثزوغ‬ ّٞ‫رو‬ ./eat.sh Italian َ‫رٔض‬ ‫ؽٍش‬./eat.sh‫ثبُشٓض‬$0 ٍ‫ٝا‬italian‫ثبُشٓض‬$1 ‫اي‬ ‫ٝػؼ٘ب‬ ‫ٝارا‬argument‫ثؼذ‬ ‫اخش‬italian‫ثبُشٓض‬ ُٚ ‫كٍشٓض‬$2‫اُخ‬ ًٔ‫رغ‬ ‫اُشٓٞص‬ ٙ‫ٝٛز‬positional parameters ٍ‫ا‬ ٌَ‫ثزؼذ‬ ‫هٔ٘ب‬ ‫كبرا‬scriptٍ‫ا‬ ‫ٝعؼِ٘ب‬TYPE = $2 ٍ‫ا‬ ‫ثز٘لٍز‬ ‫ٝهٔ٘ب‬script‫ثؼشع‬ ّ‫هب‬ ٙ‫ٗغذ‬ٍ‫ا‬ ‫ثٍبٗبد‬argumentٞٛٝ ًٗ‫اُضب‬smart ٍ‫ا‬ ْ‫اع‬ َ‫ٗغؼ‬ ٕ‫ا‬ ‫ؼب‬ٌ‫ا‬ ٌٌٖٔٝfile : restaurant.txt‫اي‬ ‫ٝػغ‬ ٌٌٖٔ ‫ثؾٍش‬ ‫ٓزـٍش‬file‫اخش‬ ٍ‫ا‬ َ‫داخ‬ ٍُٚ‫ا‬ ‫ٝٗشٍش‬script‫ثبُشٓض‬$2ًُ‫ًبُزب‬
  • 87. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 86 ٍ‫ا‬ ‫ر٘لٍز‬ ‫ٝػ٘ذ‬scriptٍ‫ا‬ ّ‫ٗغزخذ‬form‫اُزبٍُخ‬ POSITIONAL PARAMETERS 0 AND 1 THROUGH 9 ٍ‫ا‬ ٕ‫ا‬ ‫رًشٗب‬ ‫ًٔب‬positional parametersٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ًٛparametersًُ‫ا‬ ‫رشٍش‬ ً‫اُز‬ ٍ‫ا‬ ٕ‫ٌٓب‬argumentٍ‫ا‬ ً‫ك‬ ّ‫عٍغزخذ‬ ‫اُزي‬script ٍ‫ا‬ ٖٓ ‫ػذد‬ ‫ٝاًجش‬parametersٍ‫ا‬ ‫ٓغ‬ ٚٓ‫اعزخذا‬ ٌٌٖٔscriptٞٛ10 parametersٖٓ ‫اي‬$0 ًُ‫ا‬$9 ٍ‫ا‬ ‫ٌٝشٍش‬$0ٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬script ٍ‫ا‬ ‫ٌٝشٍش‬$1ٍٝ‫ا‬ ًُ‫ا‬argument‫ٌٝٛزا‬ ٍ‫ا‬ ٕ‫ا‬ ‫عٍذا‬ ‫رززًش‬ ٕ‫ا‬ ‫ٌغت‬ ٌُٖٝ$0ٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬ ‫رشٍش‬scriptّ‫اعزخذ‬ ‫ارا‬ٍ‫ا‬ ‫ٓغ‬script‫ثٍ٘ٔب‬ ٍ‫ا‬ ْ‫اع‬ ًُ‫ا‬ ‫رشٍش‬shell‫ًـ‬ ٙ‫اعزخذٓ٘ب‬ ‫ارا‬ ّ‫أُغزخذ‬commandًُ‫ًبُزب‬ َ‫ظ‬‫ٓ٘ل‬
  • 88. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 87 ‫ظٍض‬‫رخ‬ َ‫ؼ‬‫ٌل‬variableَُargument‫ظٍض‬‫رخ‬ َ‫ؼ‬‫االك‬ ٖٓ ٚٗ‫ا‬ ً٘‫ثٔؼ‬TYPE=$1ّ‫ٝاعزخذا‬ ٍ‫ا‬variableٍ‫ا‬ ً‫ك‬ ‫ٗلغٜب‬scriptٍ‫ا‬ ‫ٍُٝظ‬argument‫اُغطش‬ ً‫ك‬ ‫ًٔب‬ grep $TYPE $FILE ‫ثؼذ‬ ‫الٗ٘ب‬َٔ‫ػ‬ ‫ًٍلٍخ‬ ٖ‫ػ‬ ‫ع٘زؾذس‬ ٍَِ‫ه‬shiftَُarguments‫ٓؾزٌٞبد‬ ‫رـٍٍش‬ ًُ‫ا‬ ‫عٍئدي‬ ‫ٝٛزا‬ ٍ‫ا‬positional argumentsٕٝ‫كب‬ ًُ‫ثبُزب‬$1ٍ‫ا‬ ‫ٗلظ‬ ًِ‫ػ‬ ‫رؾزٞي‬ ُٖargumentٍٝ‫اال‬ ٍ‫ا‬ ‫ثؾلع‬ ّٞ‫ٗو‬ ٕ‫ا‬ َ‫ؼ‬‫كبالك‬ ‫ُزُي‬positional argumentً‫ك‬variable OTHER ARGUMENTS USED WITH POSITIONAL PARAMETERS ٍ‫ا‬ ‫ػذد‬ ٕ‫ا‬ ‫عبثوب‬ ‫رًشٗب‬ ‫ًٔب‬positional argumentٞٛ10ّ‫اعزخذا‬ ٌٌٖٔ ‫اُؾوٍوخ‬ ً‫ك‬ ٌُٖٝ ‫رُي‬ ٖٓ ‫اًضش‬ $# HOW MANY POSITIONAL ARGUMENTS HAVE W E GOT ? ٍ‫ا‬ ‫ػذد‬ ًْ ‫ٗؼشف‬ ًٌُpositional argumentsٍ‫ا‬ ً‫ك‬ ‫ٗغزخذٜٓب‬ ً‫اُز‬script‫ؼغ‬ٗ ٕ‫ا‬ ٌٌٖٔ ‫اُشٓض‬“$#”ٍ‫ا‬ ً‫ك‬script $* DISPLAY ALL POSITIONAL PARAMETERS ٍ‫ا‬ ًٛ ‫ٓب‬ ‫ٗؼشف‬ ًٌُٝpositional arguments‫اُشٓض‬ ّ‫ٗغزخذ‬ ‫أُغزخذٓخ‬“$*”ٍ‫ا‬ َ‫داخ‬ script
  • 89. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 88 USING THE "SHIFT" COMMAND - FOR MORE THAN 9 POSITIONAL PARAMETERS ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬ ‫ُوذ‬positional argumentٕ‫ا‬ ‫ٝهِ٘ب‬$0َُ ٚ‫ظ‬‫ظ‬‫ٓخ‬script‫ٌٍِٜب‬ ْ‫ص‬$1ًُ‫ا‬$9 ٍ‫ا‬ ٖٓ ‫رُي‬ ٖٓ ‫اًضش‬ ‫ٛ٘بى‬ ٕ‫ا‬ ‫ٝرًشٗب‬positional argument? ‫رُي‬ ‫كٌٍق‬ ‫اًضش‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫اُؾ‬ ٌٌٖٔ$9َٔ‫ػ‬ ‫ؽشٌن‬ ٖ‫ػ‬shiftَُpositional arguments‫ٓوذاس‬ ‫ثؤي‬ ‫هِ٘ب‬ ‫كبرا‬ shift 5 ‫اػبكخ‬ ْ‫ٌز‬ ‫كجزُي‬$1 : $5ٍ‫ا‬ ‫ظجؼ‬‫ٝر‬ ‫عذٌذح‬$1 >>> $6ٍ‫ٝا‬$9 >>> $14 ‫االك‬ ٖٓ ٚٗ‫ا‬ ‫هِ٘ب‬ ‫ُزُي‬‫ظٍض‬‫رخ‬ ْ‫ٌز‬ ٕ‫ا‬ َ‫ؼ‬variableٌَُpositional argument EXIT STATUS OF THE PREVIOUS COMMAND ‫اخش‬$ًٛ ٕ‫اال‬ ‫ػٜ٘ب‬ ‫ع٘زؾذس‬“$?”ٍ‫ا‬ ‫رٞػؼ‬ ًٛٝexit status‫ال‬‫خش‬commandٙ‫ر٘لٍز‬ ْ‫ر‬ ‫ٛ٘بى‬ ٕ‫ا‬ ّ‫ا‬ ‫ث٘غبػ‬ ٙ‫ر٘لٍز‬ ْ‫ر‬ َٛ(error) ٍ‫ا‬ ٍٚ‫ك‬ ٕ‫ًب‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ٕ‫ا‬ ‫ٛ٘ب‬ ‫ٝٗالؽع‬exit status 0ٍ‫ا‬ ‫ر٘لٍز‬ ْ‫ر‬ ٚٗ‫ا‬ ‫رُي‬ ً٘‫ٝٓؼ‬scriptٌَ‫ثش‬ ‫طؾٍؼ‬ ٍ‫ا‬ ‫ًبٗذ‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ك‬ ٌُٖٝexit status 2‫ُٞعٞد‬errorً‫ك‬ٍ‫ا‬ ‫ر٘لٍز‬script‫طؾٍؼ‬ ٌَ‫ثش‬ ‫ٝعٞد‬ ّ‫ُؼذ‬fileًٔ‫ٌغ‬fake
  • 90. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 89 ٍ‫ا‬ ‫ًبٗذ‬ ‫اُضبُش‬ ٍ‫أُضب‬ ً‫ٝك‬exit status 1‫ُٞعٞد‬errorً‫ك‬ٍ‫ا‬ ‫ر٘لٍز‬script‫ٝعٞد‬ ّ‫ُؼذ‬ argumentًٔ‫ٌغ‬egypt ًَٝcommandُٚ ٌٌٕٞ ٙ‫ر٘لٍز‬ ْ‫ٌز‬exit status‫ٌُٜٝ٘ب‬by default‫اال‬ ‫اُشبشخ‬ ًِ‫ػ‬ ‫رظٜش‬ ‫ال‬ ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫ارا‬command : $?
  • 91. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 90 CHAPTER 7. WHERE TO FROM HERE? MAKING DECISIONS ‫ر٘لٍز‬ ًُ‫ا‬ ‫ٗؾزبط‬ ٕ‫االؽٍب‬ ٖٓ ‫ًضٍش‬command‫ؽذٝس‬ ‫ػ٘ذ‬ ٍٖ‫ٓؼ‬action‫ًزا‬ ‫ؽذس‬ ‫ارا‬ ً٘‫ثٔؼ‬ ،‫ٓب‬ ‫اك‬‫ششؽٍخ‬ َٔ‫ع‬ ًُ‫ا‬ ‫ٗؾزبط‬ ‫اٗ٘ب‬ ‫اي‬ ، ‫ًزا‬ َ‫ؼ‬ if [ expression ] then OK #Do something else NOT OK #Do something else fi TESTING FOR A TRUE OR FALSE CONDITION َ‫ٓض‬ ‫اُششؽٍخ‬ َٔ‫اُغ‬ ‫ثؼغ‬ ٖ‫ػ‬ ‫ع٘زؾذس‬ ‫ُزُي‬if-elseّٞ‫كغ٘و‬ ‫ػٜ٘ب‬ ‫ٗزؾذس‬ ٕ‫ا‬ َ‫هج‬ ٌُٖٝ ، ‫االٓش‬ ٖ‫ػ‬ ‫ثبُؾذٌش‬test THE TEST COMMAND ٍ‫كب‬test commandَٔ‫ثؼ‬ ّٞ‫ٌو‬checkٍ‫ا‬ ًِ‫ػ‬file typeٝcompareٍ‫ا‬ ٍٖ‫ث‬Values ٍ‫ا‬ ٍ‫اعزجذا‬ ٌٍٖٔ‫ك‬form‫اُزبٍُخ‬ if [ x -eq 9 ] then echo equal else echo no equal fi ٍ‫ثب‬form‫اُزبٍُخ‬ test $x -eq 9 if [ $? -eq 0 ] then echo equal else
  • 92. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 91 echo no equal fi ٝ‫ؽشٌن‬ ٖ‫ػ‬ ٍَ‫اُزلبط‬ ٖٓ ‫ٓضٌذ‬ ‫ٓؼشكخ‬ ٌٌٖٔ info test W HAT IS "TRUE" AND "FALSE" ً٘‫ٌؼ‬ ‫ٓبرا‬trueٝ‫ا‬falseٍ‫ا‬ ً‫ك‬ ‫ػٜ٘ب‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ ‫ًٍٝق‬shell?? ٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ ‫ثشٓغخ‬ ‫ُـخ‬ ‫اي‬ ً‫ك‬trueٝ‫ا‬falseٍ‫ا‬ ً‫ٝك‬ ،ٍٚ٘‫ٓؼ‬ ‫ثؤٍخ‬shellٍ‫ا‬ ٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ trueٍ‫ثب‬value 0‫ا‬ ٖ‫ػ‬ ‫ٝاُزؼجٍش‬ٍfalseَ‫ٓض‬ ‫اخش‬ ْ‫سه‬ ‫ثؤي‬1ٝ25ٝ2000 ٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫ٌز‬ ‫كٔضال‬false‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ٍ‫ا‬ ‫ظٜٞس‬ ً٘‫ٝٓؼ‬status code :1ٍ‫ا‬ ‫ر٘لٍز‬ ‫ٗزٍغخ‬ ٕ‫ا‬ ٞٛPingٖ‫ػ‬ ‫اُزؼجٍش‬ ْ‫،ٌٝز‬ ‫خبؽئخ‬ ‫ًبٗذ‬ trueًٌِ ‫ًٔب‬ ٍ‫ا‬ ‫ظٜٞس‬ ً٘‫ٝٓؼ‬status code :0‫ر٘لٍز‬ ‫ٗزٍغخ‬ ٕ‫ا‬ ٞٛwho‫طؾٍؾخ‬
  • 93. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 92 DIFFERENT TYPES OF TESTS ٍ‫ا‬ ‫ر٘لٍز‬ ٌٌٖٔtest command‫ػذح‬ ًِ‫ػ‬parameters: َ‫ٓض‬ 1. a string test 2. a numeric test 3. a file test TESTING A STRING ٍ‫ا‬ ّٞ‫ٌو‬test commandَٔ‫ثؼ‬checkٍ‫ا‬ ًِ‫ػ‬stringsٍ‫ا‬ ٙ‫ٛز‬ ‫ثز٘لٍز‬ ْ‫ُ٘و‬commands NAME="ahmed" test $NAME = ahmed echo $? ُ‫اُزب‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ع٘غذ‬‫ٍخ‬ ٍ‫ا‬ ‫ر٘لٍز‬ ‫ٗزٍغخ‬ ٕ‫ا‬form‫ظٜشد‬ ًُٝ‫اال‬0ٍ‫ا‬ ٕ‫ال‬conditionٍ‫ا‬ ً‫ك‬ ‫اُؼٌظ‬ ٌُٖٝ ‫ٓزؾون‬form ‫اُضبٍٗخ‬ ٍ‫ا‬ ً‫ك‬ ‫ؼب‬ٌ‫ا‬ ‫ع٘غذ‬test commandٍ‫ا‬ ٍٖ‫ث‬ ‫ٓغبكخ‬ ‫ٛ٘بى‬ ٕ‫ا‬variable name : NAMEٍ‫ٝا‬ test condition : =ٍ‫ٝا‬variable value : ahmed ‫ٝعٞد‬ ٖٓ ‫ٗزؤًذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫آب‬variable‫اعٜٔب‬NAME‫ال‬ ّ‫ا‬‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ٌٍٖٔ‫ك‬
  • 94. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 93 ٍ‫ا‬ ٕ‫ا‬ ‫ٝالؽع‬“”ٍ‫ا‬ ‫ثزشعٔخ‬ ‫هبٓذ‬$‫ى‬ ‫ٝٓؼبِٓزٜب‬regular expressionٖٓ ‫اُزبًذ‬ ‫اسدٗب‬ ‫ارا‬ ٌُٖٝ ، ‫ٝعٞد‬variableًٔ‫رغ‬HI ٍ‫ا‬ ٕ‫ا‬ ‫ك٘غذ‬“ status 1 “‫ٝعٞد‬ ّ‫ػذ‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬variableْ‫االع‬ ‫ثٜزا‬ ‫ٝػؼ٘ب‬ ‫ارا‬ ٌُٖٝ$NAMEٍٖ‫ػالٓز‬ ٍٖ‫ث‬ticks „‟ ٍ‫ا‬ ٕ‫ا‬ ‫كغ٘غذ‬status = 0ٍ‫ا‬ ٕ‫ا‬ ٖٓ ْ‫اُشؿ‬ ًِ‫ػ‬ticks „‟َٔ‫ؿ‬ ‫ثبُـبء‬ ّٞ‫رو‬expansionَُ$ ? ‫رُي‬ ‫كٌٍق‬ ٍ‫ا‬ ٕ‫ال‬test commandٍ‫ا‬ ‫ٝعذ‬ ‫ارا‬ticks „‟َٔ‫ثؼ‬ ّٞ‫ٌو‬ ‫ال‬ ٚٗ‫كب‬checkٍ‫ا‬ ًِ‫ػ‬variables َٔ‫ثؼ‬ ّٞ‫ٌو‬ ٌُٚ٘ٝcheckٍ‫ا‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ‫أٌُِخ‬ ًِ‫ػ‬ticksًٛ َٛstring‫ال‬ ّ‫ا‬‫ٝثبُطجغ‬ ، ‫اٜٗب‬ ‫ٌغذ‬stringٍ‫ا‬ ‫كزظٜش‬status = 0 ٍ‫ا‬ ً‫ػالٓز‬ ‫ٝٝػغ‬ ‫عٍذا‬ ‫اُؾزس‬ ‫ٌغت‬ ‫ُزُي‬“”ٍ‫ا‬ ٍٞ‫ؽ‬variable nameَٔ‫ثؼ‬ ّٞ‫ٌو‬ ً‫ؽز‬check ٍ‫ا‬ ًِ‫ػ‬variablesٍ‫ا‬ ًِ‫ػ‬ ‫ٍُٝظ‬strings test "$NAME" = "hamish" test "$NAME" = hamish HAS A VARIABLE BEEN SET OR NOT ?
  • 95. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 94 ‫رؤ‬ ٕ‫ا‬ ‫ٝثؼذ‬ٍ‫ا‬ ‫ٝعٞد‬ ٖٓ ‫ًذٗب‬variableٍ‫ا‬ ‫ٛزا‬ ٖٓ ‫ٗزؤًذ‬ ‫عٞف‬variableُٚvalueَٛ ‫اي‬ ‫ال‬ ّ‫ا‬ ٍ‫ا‬ ‫ٛزا‬Variable set or unset ٍ‫ا‬ ٙ‫ٛز‬ َ‫ٓض‬ ّ‫ٗغزخذ‬ ٕ‫ا‬ ًٛٝ ‫ثغٍطخ‬ ‫ثطشٌوخ‬ ْ‫ٌز‬ ‫رُي‬ ٖٓ ‫اُزؤًذ‬form test "${NAME}x" = x ٍ‫ا‬ ‫ًبٗذ‬ ‫كبرا‬variable : NAME‫هٍٔخ‬ ‫ُٜب‬(set)ٌٍُٖٝahmed‫ٗزٍغخ‬ ٕ‫كب‬${NAME}x ‫رغبٝي‬(ahmedx)‫رغبٝي‬ ‫ال‬ ‫ثبُطجغ‬ ًٛٝ(x)‫اُ٘زٍغخ‬ ‫ظجؼ‬‫كز‬falseٍ‫ٝا‬status = 1 ٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ‫آب‬variable : NAME‫هٍٔخ‬ ‫ُٜب‬ ‫ٍُظ‬(unset)‫ٗزٍغخ‬ ٕ‫كب‬${NAME}x‫رغبٝي‬ (x)‫أُبدُخ‬ ٖٓ ٌٖٔ‫اال‬ ‫اُطشف‬ ‫رغبٝي‬ ًٛٝ ‫كوؾ‬(x)‫اُ٘زٍغخ‬ ‫ظجؼ‬‫كز‬trueٍ‫ٝا‬status = 0 ٌ‫ؽش‬ ‫ؼب‬ٌ‫ا‬ ‫ٝٛ٘بى‬ٍ‫ا‬ ٍٞ‫ؽ‬ ٖٓ ‫ُِزؤًذ‬ ‫اخشي‬ ‫وخ‬string String test Meaning -z Zero – length -n Non zero – length ٍ‫ا‬ ‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫كبرا‬variableًِ‫ػ‬ ‫ٌؾزٞي‬valueٖٓ ٌٕٞ‫رز‬5‫ًبٗذ‬ ‫ارا‬ ‫ٗزؤًذ‬ ٕ‫ا‬ ‫ٝاسدٗب‬ ‫ٓغبكبد‬ ٍ‫ا‬ ٙ‫ٛز‬variableًِ‫ػ‬ ‫ٌؾزٞي‬value‫ال‬ ّ‫ا‬non valueَٔ‫ثؼ‬ ّٞ‫ك٘و‬checkٍ‫ا‬ ٍٞ‫ؽ‬ ًِ‫ػ‬ valueٍ‫ا‬ ٍٞ‫ؽ‬ ٝ‫ا‬string
  • 96. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 95 ٍ‫ا‬ َ‫عؼ‬ ‫ٓغ‬ ٌُٖٝ ‫اخشي‬ ‫ٓشح‬ ٍ‫أُضب‬ ‫ٗؼٍذ‬variable‫اي‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ‫ال‬value َُ ٕ‫اال‬ ‫ع٘زطشم‬test condition‫ػالٓخ‬ َ‫ٓض‬“=”ٌٌٖٔ ً‫اُز‬ ‫اُؼالٓبد‬ ٖٓ ‫اٌُضٍش‬ ‫كٜ٘بى‬ ٍ‫ا‬ ‫ٓغ‬ ‫اعزخذآٜب‬string testَ‫ٓض‬ String test condition Name = ‫ٌغبٝي‬ != ‫ٌغبٝي‬ ‫ال‬ <= ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ َ‫اه‬ >= ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ ‫اًجش‬ < ٖٓ َ‫اه‬ > ٖٓ ‫اًجش‬ ٍ‫ا‬ ٙ‫ٝٛز‬conditionsٍ‫ثب‬ ٚ‫خبط‬string test NUMERIC TESTS ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬ ٕ‫ا‬ ‫ثؼذ‬string testٍ‫ا‬ ٖ‫ػ‬ ‫اُؾذٌش‬ ًُ‫ا‬ ٕ‫اال‬ ً‫ٗؤر‬numeric testّ‫رغزخذ‬ ًٛٝ : َ‫ٓض‬ ، ّ‫االسهب‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ً‫ك‬ x=101 test "$x" -lt 10 echo?$ ‫اُشٓض‬ ‫ٝعٞد‬ ‫ٗالؽع‬ ‫ٝٛ٘ب‬“-lt”? ً٘‫ٌؼ‬ ‫كٔبرا‬ ‫اُشٓض‬“-lt”ٍ‫ا‬ ‫ٌؼزجش‬numeric test conditionً٘‫ٌٝؼ‬less thanٍ‫ا‬ ‫اٗٞاع‬ ًٌِ ‫ٝكٍٔب‬numeric conditions String test condition Name -eq ‫ٌغبٝي‬ -neq ‫ٌغبٝي‬ ‫ال‬
  • 97. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 96 -le ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ َ‫اه‬ -ge ‫ٌغبٝي‬ ٝ‫ا‬ ٖٓ ‫اًجش‬ -lt ٖٓ َ‫اه‬ -gt ٖٓ ‫اًجش‬ ٍٖ‫ث‬ ‫أُوبسٗخ‬ ‫كؼ٘ذ‬ ‫ارا‬2 stringdٍ‫ا‬ ّ‫ٗغزخذ‬string test conditions ٍ‫ا‬ ٍٖ‫ث‬ ‫أُوبسٗخ‬ ‫ػ٘ذ‬ ‫آب‬valuesٍ‫ا‬ ّ‫ك٘غزخذ‬numeric test conditions FILE TEST ٚ٘‫ػ‬ ٌِْ‫ع٘ز‬ ‫ٗٞع‬ ‫ٝاخش‬ ‫صبُش‬ ٍٞٛٝ‫ا‬ ‫ٛزا‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓب‬ ٖٓ ‫ُِزؤًذ‬ ّ‫ٌغزخذ‬ ٞٛٝ ،fileٞٛdirectory ٝ‫ا‬normal fileٝ‫ا‬soft linkٝ‫ا‬hard linkٍ‫ا‬ ‫ثؼغ‬ ّ‫اعزخذا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬ ،options‫ٓغ‬ ‫االٓش‬test Option Type -f File -d Directory -L , -h Symbolic link -s The size is greater than zero ٍ‫ا‬ ٖٓ ‫اٌُضٍش‬ ‫ٝٛ٘بى‬options:‫االٓضِخ‬ ‫ثؼغ‬ ‫ٝع٘ؤخز‬ ‫ثٜزا‬ ً‫عٌ٘زل‬ ٌُٖٝ
  • 98. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 97 ‫ا‬ ٍ‫ٓضب‬ٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫خش‬directory ٍ‫أُضب‬ ‫ٛزا‬ ‫ٗؤخز‬ ‫ٝاخٍشا‬ ٍ‫ا‬“.”ٍ‫ا‬ ًٛcurrent directoryٍ‫ا‬ ‫كبً٘ذ‬ ‫ُزُي‬status = 1ٍ‫ا‬ ٖٓ ًَ ً‫ك‬–f, -L ‫رغبٝي‬ ‫ٌُٜٝ٘ب‬0ً‫ك‬–d
  • 99. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 98 LOGICAL OPERATORS ٍ‫ا‬ ٖ‫ػ‬ ‫اُؾذٌش‬ ٖٓ ‫اٗزٍٜ٘ب‬ ‫ُوذ‬test‫ٓغ‬ ٚٓ‫اعزخذا‬ ‫ًٍٝلٍخ‬One condition: test if “x” is true then “y” ٍ‫ا‬ ّ‫اعزخذ‬ ٕ‫ا‬ ‫اسدد‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝtestٖٓ ‫اًضش‬ ‫ٓغ‬condition: َ‫ٓض‬ test if “x” OR “y” is true then “z” ٍ‫ثب‬ ‫ٌؼشف‬ ‫ٓب‬ ّ‫ع٘غزخذ‬ ‫اُؾبُخ‬ ٙ‫ٛز‬ ً‫ك‬logical operatorsَ‫ٓض‬ NOT‫ثبُشٓض‬ ‫ُٜب‬ ‫ٌٝشٓض‬“!” AND‫ثبُشٓض‬ ‫ُٜب‬ ‫ٌٝشٓض‬“-a” OR‫ثبُشٓض‬ ‫ُٜب‬ ‫ٌٝشٓض‬“-o” ‫ا‬ ِْ‫ٗؼ‬ ‫ًٝٔب‬‫اعزخذٓ٘ب‬ ‫ارا‬ ٚٗNOTٌٌٕٞ ‫كغٞف‬ !1=0 !0=1 ‫اعزخذٓ٘ب‬ ‫ٝارا‬ANDَُ ‫ٝسٓضٗب‬true‫ثؾشف‬“T”ٍ‫ٝا‬false‫ثؾشف‬“F” 0 -a 0 = 0 0 -a 1 = 1 1 -a 0 = 1 1 -a 1 = 1 ‫ًٝزُي‬ T and T = T T and F = F F and T = F F and F = F ‫اعزخذٓ٘ب‬ ‫ٝارا‬ORَُ ‫ٝسٓضٗب‬true‫ثؾشف‬“T”ٍ‫ٝا‬false‫ثؾ‬‫شف‬“F” 0 -o 0 = 0
  • 100. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 99 0 -o 1 = 0 1 -o 0 = 0 1 -o 1 = 1 ‫ًٝزُي‬ T or T = T T or F = T F or T = T F or F = F ‫ٗزٍغخ‬ ٕ‫كب‬ ‫ٝٛ٘ب‬“$NAME” = ahmedًٛtrueٝ‫ا‬“T”ٝ“-n”ٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ً٘‫رؼ‬stringً٘‫ٌؼ‬ “non zero length”ٚٗ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬trueٝ‫ا‬“T”‫اُ٘زٍغخ‬ ٌٕٞ‫كز‬ ‫ؼب‬ٌ‫ا‬ T OR T = T ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ٝك‬ F OR T = T ‫اُضبُش‬ ٍ‫أُضب‬ ً‫ٝك‬
  • 101. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 100 T AND T = T ‫اُشاثغ‬ ٍ‫أُضب‬ ً‫ٝك‬ F and T = F ٍ‫ا‬ ‫ٗٞع‬ ٖٓ ‫ٗزؤًذ‬ ٕ‫ا‬ ٌٌٖٔٝfile: ًٌِ ‫ًٔب‬ test ( -f .bashrc ) test ( ! -f .bashrc ) CONDITIONS IN THE SHELL ٍ‫ا‬conditions‫ٗز‬ ٕ‫ا‬ ‫ٌغت‬ ً‫اُز‬ ‫االشٍبء‬ ْٛ‫ا‬ ٖٓ ًٍٛ‫ا‬ ً‫ك‬ ‫ؼِٜٔب‬scripting‫ؽشم‬ ‫ػذح‬ ‫ٝٛ٘بى‬ ، ٍ‫ا‬ ‫ٓغ‬ َٓ‫ُِزؼب‬conditions USING THE "IF" STATEMENT ‫ٓغ‬ َٓ‫ٗزؼب‬ ‫ًٍق‬if statementٍ‫ا‬ ٍ‫اشٌب‬ ‫اثغؾ‬ ٕ‫ا‬ ?if statement: ٞٛ if condition then do some operations fi
  • 102. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 101 ٍ‫ا‬ ‫رجذأ‬ ٕ‫ا‬ ‫ٌغت‬ ٍ‫أُضب‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬ ًٛٝif statement:‫ثـ‬ 1-“if” 2-ٌِ‫ًِٔخ‬ ًٗ‫اُضب‬ ‫اُغطش‬ ً‫ك‬ ‫ٍٜب‬“then” 3-‫اُضبُش‬ ‫اُغطش‬ ً‫ك‬ ‫ٌٍِٜب‬ٍ‫ا‬commands‫ٝػغ‬ َ‫ؼ‬‫(ٌٝل‬ ‫ر٘لٍزٛب‬ ‫ٗشٌذ‬ ً‫اُز‬tabٍٖ‫ٓغبكز‬ ٝ‫ا‬ ٍ‫ا‬ َ‫هج‬commands) 4-ٍ‫ا‬ ‫ثبٜٗبء‬ ّٞ‫ٗو‬ ْ‫ص‬statement‫ثـ‬“fi” THE "IF" "THEN" "ELSE" STATEMENT ٍ‫ا‬ ٖٓ ‫ٓضٌذ‬ ‫ثبػبكخ‬ ٕ‫اال‬ ّٞ‫ٗو‬featuresٍ‫ا‬ ًِ‫ػ‬if statement‫ٝا‬‫خٍبساد‬ ‫ثبػبكخ‬ ‫ُ٘ب‬ ‫رغٔؼ‬ ً‫ُز‬ ‫اًضش‬ if condition then <condition was TRUE, do these actions> else <condition was FALSE, do these actions> fi ٖٓ ‫اًضش‬ َٔ‫ػ‬ ٌٌٖٔٝtest‫ؽشٌن‬ ٖ‫ػ‬ if condition then <condition was TRUE, do these actions> else if condition then <condition was TRUE, do these actions> else <condition was FALSE, do these actions> fi fi
  • 103. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 102 THE "ELIF" STATEMENT ٖٓ ‫اٌُضٍش‬ ‫ٛ٘بى‬ ‫االخٍش‬ ٍ‫أُضب‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬if statementٖٓ ‫ٝاٌُضٍش‬elseٝthenًٌِ‫ك‬ ‫ُزُي‬ ٍ‫ا‬ ٌَ‫ش‬ ‫ثزجغٍؾ‬ ّٞ‫ٗو‬if statement‫ظبس‬‫االخز‬ ‫ثؼغ‬ ‫ٝػغ‬ ٌٌٍٖٔ‫اعزجذا‬ َ‫ٓض‬ ‫اد‬else if‫ثـ‬elif if condition then <condition was TRUE, do these actions> elif condition then <condition was TRUE, do these actions> else <condition was FALSE, do these actions> fi ‫ٝعٞد‬ ًُ‫ا‬ ‫ٗؾزبط‬ ِٖ‫ك‬ ‫ظبساد‬‫االخز‬ ٙ‫ٛز‬ ّ‫ٝثبعزخذا‬“fi”ًَ ‫ٓغ‬elifً‫ٌٌٝل‬“fi”‫كوؾ‬ ٙ‫ٝاؽذ‬ ‫ُذي‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝ10 conditionsّ‫ع٘غزخذ‬ َٜ‫ك‬else if10? ‫ٓشاد‬ ? َ‫اُؾ‬ ‫كٔبرا‬ ، ‫عٍئ‬ ‫كٜزا‬ ‫ال‬ ‫ثبُطجغ‬ ّ‫اعزخذا‬ ٞٛ َ‫اُؾ‬case statementٖٓ ٍ‫ثذ‬if statement THE "CASE" STATEMENT ٍ‫ا‬case statement‫ٍُغذ‬looptَٔ‫ثؼ‬ ّٞ‫رو‬ ‫ٌُٜٝ٘ب‬matcheingٍ‫ا‬ ًِ‫ػ‬conditions َٜ‫اع‬ ‫ثطشٌوخ‬ case expression in pattern1 ) statements ;; pattern2 ) statements ;; * )
  • 104. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 103 statements ;; ... esac ٍ‫ا‬ ّٞ‫ٌو‬ ‫ؽٍش‬caseَٔ‫ثؼ‬expandَُexpressionَٔ‫ثؼ‬ ّٞ‫ٌو‬ ْ‫ص‬matchingًَ ٍٖ‫ٝث‬ ٍٚ٘‫ث‬ pattern ٍ‫ا‬ ‫ٝعذ‬ ‫كبرا‬matched patternٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫كٍو‬statementًُ‫ا‬ َ‫ظ‬ٌ ً‫ؽز‬;; ‫اي‬ ‫ٌغذ‬ ُْ ٕ‫ٝا‬matched patternَٔ‫ثؼ‬ ّٞ‫كٍو‬matcheٍ‫ا‬ ‫ٓغ‬“*”ٍ‫ا‬ ‫ٌ٘لز‬ ْ‫ص‬statement ‫ص‬ٍ‫ا‬ َٔ‫ػ‬ ‫ثبٜٗبء‬ ّٞ‫ٌو‬ ْcase statementٍ‫ا‬ ‫ٝاخشاط‬status ٍ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ َ‫رغؼ‬ ‫اُطشٌوخ‬ ٙ‫ٝٛز‬scriptَٜ‫اع‬ DEBUGGING YOUR SCRIPTS َٔ‫ػ‬ ‫ًٍلٍخ‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ع٘زؾذس‬debugَُscript‫ؽشٌن‬ ‫ػذح‬ ‫ٛ٘بى‬ ‫اُؾوٍوخ‬ ً‫ٝك‬ ،َٔ‫ُؼ‬ debugging: َ‫ٓض‬ 1-‫اػبكخ‬–xٍ‫ا‬ ً‫ك‬ ‫عطش‬ ٍٝ‫ا‬ ًُ‫ا‬script #!/bin/bash -x
  • 105. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 104 2-ٍ‫ا‬ ٍَ‫رشـ‬script‫اُطشٌوخ‬ ٙ‫ثٜز‬ bash -x eatout.sh ‫ػشع‬ ً‫ك‬ ٕ‫رغزخذٓب‬ ٍٖ‫اُطشٌوز‬ ٍٖ‫ٝٛبر‬‫ؽشٌوخ‬‫ا‬ ‫ر٘لٍز‬ٍscript‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٔب‬ ‫عطش‬ ‫عطش‬ ٍ‫ا‬ ‫ر٘لٍز‬ ًٛٝ ‫اُضبُضخ‬ ‫اُطشٌوخ‬script‫ثؼذ‬ ‫اال‬ ‫اخش‬ ًُ‫ا‬ ‫عضء‬ ٖٓ ٍ‫االٗزوب‬ ّ‫ػذ‬ ‫ٓغ‬ ‫عضء‬ ‫عضء‬ٖٓ ‫اُزؤًذ‬ ٍ‫ا‬ ‫ثؼغ‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬ ، ٚ‫ٗزٍغز‬linesٍ‫ا‬ ًُ‫ا‬scriptَ‫ٓض‬ echo #? echo "Hit any key to continue"...
  • 106. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 105 read THE NULL COMMAND ٍ‫ا‬null commandٍ‫ا‬ ‫اػبكخ‬ ٞٛ“:”ٍ‫ا‬ ًُ‫ا‬scriptٌَ‫اُش‬ ‫ثٜزا‬ if : then echo “....” fi
  • 107. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 106 ٍ‫ا‬ ٙ‫ٛز‬ ‫ٝدائٔب‬formtrueٍ‫ا‬ ٕ‫ال‬“:”‫دائٔب‬true THE || AND && COMMANDS ٍ‫ا‬ ‫ُز٘لٍز‬ ‫ظشح‬‫ٓخز‬ ‫ؽشٌوخ‬ ٖ‫ػ‬ ‫ٗجؾش‬ ‫ً٘ب‬ ‫ارا‬if statement&& ٝ || ّ‫ثبعزخذا‬ ‫رُي‬ َ‫كؼ‬ ‫ك٘غزطٍغ‬ ‫ثز‬ ‫ٌغٔؼ‬ ‫اُزي‬‫٘لٍز‬ٍ‫ا‬ ٖٓ ‫اُؼذٌذ‬command، ّ‫ثبعزخذا‬ ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬? ‫ٛزا‬ ‫ًٍق‬ ٍ‫ا‬ ‫ثز٘لٍز‬ ْ‫ُ٘و‬2 commands: ‫اُلشم‬ ‫ٝٗالؽع‬ ًٌِ ‫ًٔب‬ Command 1 grep italian restaurants.txt || echo "sorry no italians here" Command 2 grep egypt restaurants.txt || echo “sorry no italians here”
  • 108. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 107 ٍ‫ا‬ ًٛ ‫اُ٘زٍغخ‬ ‫ًبٗذ‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ً‫ك‬ ٕ‫ا‬ ‫الؽع‬italian recordٌٌٖ ِْ‫ك‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ك‬ ‫ثٍ٘ٔب‬ ‫ٛ٘بى‬Egypt recordٍ‫ا‬ َ‫ثذاخ‬restaurant.txt file‫سعبُخ‬ ‫ظٜشد‬ ‫ُزُي‬“sorry no italians here” ً٘‫ٌؼ‬ ‫كٔبرا‬‫ٛزا‬? ‫ٌغبٝي‬ ‫ٛزا‬ ٕ‫ا‬ if there are italians inside resturants.txt then return them [else] return the string “sorry no italians here” َُ ‫ٝثبُ٘غجخ‬shellً٘‫ٌؼ‬ ‫كٜزا‬ if the result of the grep command is TRUE (0) then you will get the lines containing the word italian from the file resturants.txt if the result of the grep command is FALSE (1) then print 'sorry no italians here' ‫كبُؼالٓخ‬ ‫ارا‬||ً٘‫رؼ‬OR‫(ارا‬ٍ‫ا‬ ‫رؾون‬commandٍ‫ا‬ ‫ر٘لز‬ ‫كال‬ ، ٍٝ‫اال‬commandًٗ‫اُضب‬ ‫ٝارا‬ٍ‫ا‬ ‫ٌزؾون‬ ُْcommandٍ‫ا‬ ‫ٗلز‬ ٍٝ‫اال‬command)ًٗ‫اُضب‬ echo “Oh, you're looking for italian, here they are : “ && grep italian restaurants.txt
  • 109. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 108 ً٘‫رؼ‬ && ‫كبُؼالٓخ‬ ‫ارا‬andٍ‫ا‬ ‫ٌزؾون‬ ٕ‫ا‬ ‫(ٌغت‬commandٍ‫ا‬ ًُ‫ا‬ َ‫ٌ٘زو‬ ً‫ؽز‬ ٍٝ‫اال‬ command)ًٗ‫اُضب‬ :‫مثال‬ ٍ‫ا‬ ٕ‫كب‬ ‫ٗشي‬ ‫ًٝٔب‬commandٍ‫ا‬ ‫ٌ٘لز‬ ِْ‫ك‬ ‫خطؤ‬ ٍٝ‫اال‬commandًٗ‫اُضب‬ : ‫أخر‬ ‫مثال‬ ٍ‫ا‬ ٕ‫ا‬ ‫ٗشي‬ ‫ًٝٔب‬commandّ‫كوب‬ ‫طؾٍؼ‬ ٌَ‫ثش‬ ٙ‫ر٘لٍز‬ ْ‫ر‬ ٍٝ‫اال‬ٍ‫ا‬ ‫ثز٘لٍز‬commandًٗ‫اُضب‬ : ‫اخر‬ ‫مثال‬ ٍ‫ا‬ ‫ثز٘لٍز‬ ّ‫هب‬ ‫ٛ٘ب‬commandٍ‫ا‬ ٌُٖٝ ‫طؾٍؼ‬ ٌَ‫ثش‬ ٍٝ‫اال‬command‫كؼشع‬ ، ‫خطؤ‬ ًٗ‫اُضب‬ ٍ‫ا‬ ‫ٗزٍغخ‬command‫كوؾ‬ ٍٝ‫اال‬
  • 110. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 109 CHAPTER 8. LOOPS INTRODUCTION ‫ٛ٘بى‬3ٍ‫ا‬ ٖٓ ‫اٗٞاع‬loopsٍ‫ا‬ ‫ٓغ‬ ْٜٓ‫اعزخذا‬ ٌٌٖٔshell 1- for loops 2- while loops 3- until loops ٍ‫ا‬ ‫ٗلظ‬ ُْٜ ْٜ‫ٝعٍٔؼ‬syntax‫ع٘شي‬ ‫ًٔب‬ THE "FOR" LOOP ٍ‫ا‬for loopٍ‫ا‬ ‫ٛزا‬ ‫ُٜب‬syntax for variable in list do ... done ٍ‫ا‬ ٕ‫ًٝؤ‬for loopٍٞ‫رو‬ for every element in the list (1,2,3,4)
  • 111. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 110 do something (echo $i in output) ٍ‫ا‬ ٙ‫ٝٛز‬List‫(ا‬ ‫شٍئ‬ ‫اي‬ ٌٕٞ‫ر‬ ٕ‫ا‬ ٌٌّٖٔ‫سهب‬–‫اعٔبء‬–ٝ‫ا‬variablesٝ‫ا‬commandsٝ‫ا‬ ‫ٓؾزٞي‬fileٝ‫ا‬ ٍٖ‫ٓؼ‬)‫اخش‬ ‫شٍئ‬ ‫اي‬ ‫علي‬ ‫مثال‬‫في‬ ‫االسماء‬‫ال‬for loop ‫ال‬ ‫استخدام‬ ‫علي‬ ‫اخر‬ ‫مثال‬commands‫ال‬ ‫في‬for loop ٍ‫ا‬ ‫ٝػؼ٘ب‬ ‫اٗ٘ب‬ ‫الؽع‬commandsٍٖ‫ث‬``َ‫داخ‬ ٚ‫ٝػؼ‬ ٌٌٖٔٝ$( ) ‫ٝاالٓش‬fileٍ‫ا‬ ‫ٗٞع‬ ‫ثؼشع‬ ّٞ‫ٌو‬file
  • 112. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 111 ٕ‫ٝا‬ٍ‫ا‬commandٞٛls -1 (one)‫ٍُٝظ‬ls –lًَ ‫ثؼشع‬ ّٞ‫ٌو‬ ٞٛٝfile‫عطش‬ ً‫ك‬‫ٝالؽع‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫اُلشم‬ ‫ال‬ ‫محتويات‬ ‫استخدام‬ ‫علي‬ ‫اخر‬ ‫مثال‬files‫ال‬ ‫في‬for loop ٍ‫ا‬ ّ‫اعزخذا‬ ًِ‫ػ‬ ‫اخش‬ ٍ‫ٓضب‬for loop‫االػذاد‬ ‫ٓغ‬
  • 113. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 112 ‫االٓش‬ ّٞ‫ٌو‬ ‫ؽٍش‬seqَٔ‫ثؼ‬print numeric sequence ‫اخ‬ ٍ‫ٓضب‬‫ًِٔخ‬ ّ‫اعزخذا‬ ٕٝ‫ثذ‬ ‫ش‬“in”ٍ‫ا‬ َ‫ثذاخ‬ ‫أُٞعٞدح‬script
  • 114. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 113 ٍ‫اعزجذا‬ ٌٌٖٔٝ“i=i+1”‫ثـ‬“i++”ٍ‫ٝاعزجذا‬“i=i-1”‫ثـ‬“i--”
  • 115. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 114 ‫ًِٔخ‬ ٖ‫ػ‬ ‫االعزـ٘بء‬ ‫ٗغزطٍغ‬“in”ٍ‫ا‬ َ‫ثذاخ‬ ‫أُٞعٞدح‬scriptٍ‫ا‬ ٙ‫ٛز‬ ‫ؼغ‬٘‫ع‬ ٌُٖٝvaluesً‫ك‬ ‫ثغبٗت‬ ‫اُخبسط‬ٍ‫ا‬scriptًٌِ ‫ًٔب‬ ٍ‫ا‬ ّ‫اعزخذا‬ ً‫ك‬ ‫اخشي‬ ‫ؽشٌوخ‬ ٙ‫ٝٛز‬for loop‫ٝػغ‬ ًٛٝvariable countٚ‫هٍٔز‬1ّٞ‫ٌو‬ ٍ‫ا‬ ‫ثٜب‬ ‫هبٓذ‬ ً‫اُز‬ ‫اُؼٍِٔبد‬ ‫ػذد‬ ‫ثؾغبة‬for loop ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫اٗ٘ب‬ ‫الؽع‬form $((count=count+1)) ٍ‫ا‬ ٙ‫ٝٛز‬formٍ‫ا‬ ‫رلٜٜٔب‬ ‫ال‬shellًٌِ ‫ًٔب‬ ‫اُ٘زٍغخ‬ ‫عزظٜش‬ ‫ُزُي‬
  • 116. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 115 ٍ‫ا‬ ًُ‫ا‬ ‫ٗظشٗب‬ ‫ٝارا‬error‫ا‬ ‫ثغجت‬ ‫ٌ٘زظ‬ ٚٗ‫ا‬ ‫ٗغذ‬ ‫اُظبٛش‬ٍline 6ٍ‫ا‬ ‫هٍٔخ‬ ‫ثضٌبدح‬ ‫اُخبص‬ ٞٛٝcount ٍ‫ا‬ ّ‫هب‬ ‫ؽٍش‬shellٍ‫ا‬ ٙ‫ٛز‬ ‫ثز٘لٍز‬formٍ‫ا‬ ‫هٍٔخ‬ ‫ٝصٌبدح‬countّ‫هب‬ َ‫ث‬ ‫رُي‬ ‫ػ٘ذ‬ ‫ٌزٞهق‬ ُْٝ ‫ًؤٜٗب‬ ‫ثز٘لٍزٛب‬command‫ٌغذ‬ ِْ‫ك‬ ‫ُزُي‬commandٚٔ‫اع‬2ٝ‫ا‬3ٝ‫ا‬4ٝ‫ا‬5 ? َ‫اُؾ‬ ‫كٔب‬ ‫ارا‬ ‫أُشٌِخ‬ ٙ‫ٛز‬ َ‫ُؾ‬ ‫ؽشم‬ ‫ػذح‬ ‫ٛ٘بى‬ ‫االولي‬ ‫الطريقة‬‫ٝػغ‬ ًٛ(noop “:” )ٍ‫ا‬ ٙ‫ٛز‬ ّ‫آب‬formًُ‫ًبُزب‬ ٌٕٞ‫ُز‬ : $((count=count+1)) ‫الثانية‬ ‫الطريقة‬ٍ‫ا‬ ٙ‫ٛز‬ ٍ‫اعزجذا‬ ًٛٝform‫ة‬formَ‫ٓض‬ ‫اخشي‬ count=$((count+1))
  • 117. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 116 ‫الثالثة‬ ‫الطريقة‬ٍ‫ا‬ ٙ‫ٛز‬ ٍ‫اعزجذا‬ ًٛform‫ة‬form‫اخشي‬ count=`expr $count + 1` W HILE AND UNTIL LOOPS ‫ع٘زؾذس‬ٍ‫ا‬ ٖٓ ٌٖ‫اخش‬ ٍٖ‫ٗٞػ‬ ٖ‫ػ‬ ٕ‫اال‬loopsٍ‫ا‬ ‫ٝٛٔب‬while loopٍ‫ٝا‬until loop‫ٗلظ‬ ‫ُٜٝب‬ ٍ‫ا‬syntax ٍ‫ا‬while loop‫ُٜب‬syntax
  • 118. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 117 while <condition is true> do Action done ٍ‫ٝا‬until loop‫ُٜب‬syntax until <condition is true> do Action done ٍْٜ٘‫ث‬ ‫اُلشم‬ ‫كٔب‬ ‫ارا‬ ٍ‫ا‬while loopٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫رو‬true conditions‫ُٜب‬ ً‫اُز‬status 0‫كوؾ‬ ٍ‫ا‬ ‫ثٍ٘ٔب‬until loopٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫عزو‬false conditionsٍ‫ا‬ ًُ‫ا‬ َ‫ظ‬‫ر‬ ً‫ؽز‬true condition ‫مثال‬ i=5 while test "$i" -le 10 do echo $i done
  • 119. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 118 ٍ‫اعزجذا‬ ٌٌٖٔٝ while test "$i" -le 10 ٍ‫ثب‬form while [ "$i" -le 10 ]
  • 120. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 119 ‫اخر‬ ‫مثال‬ while [ !-d `ls` ] do echo "file" done ٍ‫ا‬ ‫ٝٛزا‬scriptٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫ٌو‬command : lsٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬ ٖٓ ‫ٌٝزؤًذ‬files‫ٍُغذ‬directories ‫ًِٔخ‬ ‫ٌخشط‬ ْ‫ص‬file ‫اخر‬ ‫مثال‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓب‬ ‫ٗؼشف‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬userٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ثبُذخ‬ ّ‫هب‬ ‫هذ‬ ٍٖ‫ٓؼ‬system‫ػذح‬ ‫كٜ٘بى‬ ،‫ال‬ ّ‫ا‬‫ؽشم‬ ‫رُي‬ َٔ‫ُؼ‬ َٔ‫ثؼ‬ ّٞ‫ٗو‬ : ‫اٝال‬script‫ثز٘لٍز‬ ّٞ‫ٌو‬who commandٍ‫ا‬ ‫ٛزا‬ ًِ‫ػ‬User user=$1 while `who | grep "$user" > /dev/null` do echo "User logged in" done ّ‫ثبعزخذا‬ ٝ‫ا‬Until‫عبُخ‬ ‫ثؼشع‬ ّٞ‫ٌو‬ ّٞ‫ٌو‬ ‫اُزي‬“User not logged in”ٍ‫ا‬ َ‫ٌذخ‬ ً‫ؽز‬ userٍ‫ا‬ ًُ‫ا‬system‫كٍزٞهق‬ٍ‫ا‬scriptَٔ‫اُؼ‬ ٖ‫ػ‬ user=$1 until `who | grep "$user" > /dev/null` do echo "User not logged in" done ٍ‫ا‬ ‫ٌٜٔ٘ب‬ ‫ال‬ ‫ٝٛ٘ب‬command output‫ٝػؼ٘ب‬ ‫ُزُي‬/dev/null ٍ‫ا‬ ‫ٛزا‬ ٌُٖٝscriptٍ‫ا‬ َ‫ٗغؼ‬ ٕ‫ا‬ ٌٌٖٔ ‫ُزُي‬ ، َ‫اُشعبئ‬ ٖٓ َ‫ٛبئ‬ ًْ ‫ثؼشع‬ ّٞ‫عٍو‬script‫ٌ٘زظش‬ ‫ُٔذح‬10ًٗ‫صٞا‬ٍ‫ا‬ ‫ٌؼٍز‬ ٕ‫ا‬ َ‫هج‬check‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ ‫اخشي‬ ‫ٓشح‬sleep 10ًٌِ ‫ًٔب‬
  • 121. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 120 #!/bin/bash user=$1 until who |grep "$user"> /dev/null do echo "User not logged in" sleep 10 done echo "Finally!! $user has entered the OS" exit 0 THE BREAK AND CONTINUE COMMANDS ‫ٗؾزب‬ ‫هذ‬ٍ‫ا‬ ‫ٗٞهق‬ ٕ‫ا‬ ًُ‫ا‬ ‫اؽٍبٗب‬ ‫ط‬scriptٍ‫ا‬ ‫ٌٝٗغش‬ ٙ‫ر٘لٍز‬ ‫اص٘بء‬ َٔ‫اُؼ‬ ٖ‫ػ‬loop ‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫ارا‬ ‫كٔضال‬scriptًِ‫ػ‬ ‫ٌٝؾزٞي‬ ‫ًجٍش‬loops: َ‫ٓض‬ ‫ٓزذاخِخ‬ for do for do if then break; fi done done ٍ‫ا‬ ٖٓ ‫كِِخشٝط‬loop‫ؽشٌن‬ ٖ‫ػ‬ ‫ثٌغشٛب‬ ّٞ‫ٗو‬ ٕ‫ا‬ ‫ٌغت‬ ‫اُذاخٍِخ‬break ‫ٓض‬ ‫ٝٛزا‬ٍ‫ا‬ ّ‫اعزخذا‬ ‫ًٍلٍخ‬ ‫ٌٞػؼ‬ ٍ‫ب‬breakٍ‫ا‬ ْ‫سه‬ ‫ثؼذ‬ ّٞ‫ٌو‬ ‫اٗزشٗذ‬ ‫طلؾخ‬ ً‫ك‬ ٍٝ‫عذ‬ َٔ‫ػ‬ ً‫ك‬ columnٍ‫ا‬ ْ‫ٝسه‬rowٍٝ‫اُغذ‬ ً‫ك‬ ‫ثٜب‬ ‫اُخبطخ‬ ‫اُخبٗخ‬ ً‫ك‬ ْٜ‫ًٝزبثز‬
  • 122. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 121 /!#bin/bash # Start by warning the browser that a table is starting echo "<TABLE BORDER='1'>” #Start the ROWs of the table (4 rows) for row in `seq 4` do #Start the row for this iteration echo "<TR>” #Within each row, we need 3 columns (or table-data) for col in `seq 3` do #If this row 2, then break out of this inner (column) loop, returning to if [ $row -eq 2 ] then break; fi #If this is NOT row 2, then put the cell in here. echo " <TD>$row,$col</TD>” done #End this ROW echo "</TR>” done #End this table. echo "</TABLE>” exit 0
  • 123. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 122 ‫ًغش‬ ٌٌٖٔٝ2 inner loopsْ‫اُشه‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬2ًُ‫ا‬break break 2 ٍ‫ا‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ع٘زؾذس‬command : continueٍ‫ا‬ ‫ػٌظ‬ ‫ٌؼزجش‬ ‫اُزي‬command : breakٍ‫كب‬ command : breakٍ‫ا‬ ٖٓ ‫ثبُخشٝط‬ ّٞ‫ٌو‬loopٍ‫ا‬ ‫ثٍ٘ٔب‬continueٍ‫ا‬ ‫ثذاٌخ‬ ًُ‫ا‬ ‫ثبُؼٞدح‬ ّٞ‫ٌو‬ loop‫اي‬ َٛ‫ٌٝزغب‬ ‫اخشي‬ ‫ٓشح‬commandٙ‫ثؼذ‬ ً‫ٌؤر‬ ‫اُغضء‬ ‫ٛزا‬ ً‫ك‬ ٚ٘‫ػ‬ ‫ع٘زؾذس‬ ‫ٓب‬ ‫ٝأخش‬‫ارا‬ ٍٞٛ‫ا‬ ‫ٓغ‬ َٓ‫اُزؼب‬ ‫اسدٗب‬script output‫ٓض‬ ٌَ‫ش‬ ‫ثؤي‬َ ٍ‫ا‬ ٍ‫اسعب‬outputًُ‫ا‬fileٍ‫ا‬ ٌَٞ‫رؾ‬ ٝ‫ا‬outputٖٓsmall lettersًُ‫ا‬capital lettersٕ‫كب‬ ٍ‫ا‬ ‫اخش‬ ً‫ك‬ ْ‫ٌز‬ ‫رُي‬script‫ًِٔخ‬ ‫ثؼذ‬done ‫كبرا‬ٍ‫ا‬ ‫ؽلع‬ ‫ٗشٌذ‬ ‫اٗ٘ب‬ ‫كشػ٘ب‬loop outputً‫ك‬fileٍ‫ا‬ ‫ػالٓخ‬ ّ‫كغ٘غزخذ‬ ٍٖ‫ٓؼ‬redirection ٍ‫ا‬ ‫ٜٗبٌخ‬ ً‫ك‬scriptًٌِ ‫ًٔب‬ for ((i=0;i<10;i++)) do echo "Number is now $i" done > forloop.txt
  • 124. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 123 ٍ‫ا‬ ٍٞ‫ٗؾ‬ ‫اسدٗب‬ ‫ارا‬ ‫ًٝزُي‬small lettersًُ‫ا‬capital letters for ((i=0;i<10;i++)) do echo "Number is now $i" done |tr '[a-z]' '[A-Z]' > forloop.txt GETOPTS USING ARGUMENTS AND PARAMETERS ٍ‫ا‬ ‫ٗ٘لز‬ ٕ‫ا‬ ‫ٗغزطٍغ‬script: َ‫ٓض‬ ٍ‫اشٌب‬ ‫ثؼذح‬ ./eatout.sh -a -i -r <parameter> ./eatout.sh -ai -r <parameter> ./eatout.sh -air <parameter> ./eatout.sh -r <parameter> -ai ٍ‫ٝا‬Getopts‫ظبس‬‫اخز‬ ًٛgetting optionsً٘‫ٝرؼ‬getting options from the command lineٍ‫ا‬ ٕ‫ا‬ ٖٓ ‫ٝاُزؤًذ‬shell‫ٌغزطٍغ‬ٙ‫ثٜز‬ َٓ‫ٌزؼب‬ ٕ‫ا‬parametersٍِٚ‫ػ‬ ‫ٝث٘بء‬ ‫ٌخشط‬trueٝ‫ا‬false ٍ‫ا‬ ‫ٓغ‬ َٓ‫ٗزؼب‬ ‫ًٍق‬ ‫ارا‬getopts?
  • 125. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 124 CHAPTER 9. USER INPUT TO A SCRIPT INTRODUCTION َٔ‫ػ‬ ٕ‫اال‬ ‫ٗغزطٍغ‬scriptٍ‫ا‬ ٖٓ َٔ‫ٌؼ‬CLIَٔ‫ثؼ‬ ّٞ‫ٗو‬ ‫ًٍق‬ ِْ‫ع٘زؼ‬ ٕ‫ٝاال‬interactive script THE READ COMMAND ٍ‫ا‬ َٔ‫ٌؼ‬read commandٍ‫ا‬ ‫اٗٞاع‬ ‫عٍٔغ‬ ‫ٓغ‬shellsٞٛٝ ،built-in shell command ٍ‫ا‬ ٕ‫ًب‬ ‫ارا‬ ‫ٓب‬ ‫ُٝٔؼشكخ‬commandٞٛbuilt-in commandً‫االر‬ َٔ‫ثؼ‬ ّٞ‫ٗو‬ ّ‫ا‬ type command ٍ‫ا‬ ًُ‫ا‬ ‫ٗؼٞد‬command : read‫ًزج٘ب‬ ‫كبرا‬ read X Y ‫ٝػـط٘ب‬enterٖٓ ًَ ‫هٍٔخ‬ ‫ًزبثخ‬ ‫ٌٝ٘زظش‬ ًُ‫اُزب‬ ‫اُغطش‬ ًُ‫ا‬ ٍ‫كغٍ٘ض‬X,Y
  • 126. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 125 ٍ‫ا‬ ‫ٛزا‬ ‫ؽجو٘ب‬ ‫ٝارا‬commandٍ‫ا‬ َ‫ثذاخ‬scriptًُ‫ًبُزب‬ ٌٍٕٞ‫كغ‬ ‫ا‬ ٌٌٖٔ‫اػبكخ‬option : -pَُ ‫سعبُخ‬ ‫ُؼشع‬userٍ‫ا‬ ‫ٗٞع‬ ٖ‫ػ‬ ٙ‫رخجش‬ ًٌُInputّٞ‫عٍو‬ ‫اُزي‬ : َ‫ٓض‬ ُٚ‫ثبدخب‬ ٍ‫ا‬ ٕ‫كب‬ ‫ٗشي‬ ‫ًٔب‬ ‫ٝٛ٘ب‬curser‫ٌ٘زظش‬ٍ‫ا‬Inputٚ‫عٌ٘زج‬ ‫اُزي‬
  • 127. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 126 َُ ‫عذا‬ ‫ٛبٓخ‬ ‫اخشي‬ ‫ٝظٍلخ‬ ‫ٝٛ٘بى‬read commandٍ‫ا‬ ‫ٓؾزٌٞبد‬ ‫هشاءح‬ ًٛٝfilesْٜ‫ٌل‬ ٚٗ‫ا‬ ‫ًٔب‬ ٍ‫ا‬delimiterٍ‫ا‬ ٌٌٕٞ ٕ‫ا‬ َ‫ؼ‬‫(ٌل‬delimiter‫ػالٓخ‬ ٞٛ“,”)‫ٓغبكخ‬ ‫ٍُٝظ‬ ٍ‫ا‬ ٕ‫ا‬ ‫ٗغذ‬ ‫ٝٛ٘ب‬restaurant.txt file: ًِ‫ػ‬ ‫ٌؾزٞي‬ ْ‫أُطؼ‬ ‫ٗٞع‬typeٚٗ‫ٌٓب‬ ،placeٕٞ‫اُزٍِل‬ ْ‫سه‬ ،telْ‫أُطؼ‬ ‫دسعخ‬ ،rating‫ثبُزشرٍت‬ ٍ‫ا‬ ّ‫اعزخذا‬ ‫ٝٗشٌذ‬read commandٌٍُٕٞ ‫اُزشرٍت‬ ‫ٛزا‬ ‫رـٍٍش‬ ً‫ك‬ ْ‫أُطؼ‬ ‫ٗٞع‬typeْ‫أُطؼ‬ ‫دسعخ‬ ،ratingٚٗ‫،ٌٓب‬placeٕٞ‫اُزٍِل‬ ْ‫سه‬ ،tel ٍ‫ا‬ ‫ٛزا‬ ّ‫ٗغزخذ‬ ‫ُزُي‬scriptٍ‫ا‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ًُ‫ا‬read command ٍ‫ا‬ ٕ‫ا‬ ‫ٝٗالؽع‬IFSًٛinput field separatorٍ‫ا‬ ‫ٗٞع‬ ‫رٞػؼ‬ ًٛٝseparatorَ‫ظ‬‫عٍل‬ ‫اُزي‬ ًَ ٍٖ‫ث‬field‫ٝاخش‬ ٝBy defaultٍ‫ا‬ ٕ‫كب‬IFS=$‟ tn‟ً٘‫ٝرؼ‬spaceٝ‫ا‬tabٝ‫ا‬new lineٍ‫أُضب‬ ‫ٛزا‬ ً‫ك‬ ‫ٌُٝ٘٘ب‬ ٍ‫ا‬ ‫ثزـٍٍش‬ ‫هٔ٘ب‬IFS ٍ‫ا‬ ‫ٝػؼ٘ب‬ ‫اٗ٘ب‬ ‫ؼب‬ٌ‫ا‬ ‫ٝٗالؽع‬fileٍ‫ا‬ ‫اخش‬ ً‫ك‬script‫ًـ‬STDIN
  • 128. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 127 PRESENTING THE OUTPUT THE ECHO COMMAND ٍ‫ا‬ ٖٓ ٍٖ‫ٓخزِل‬ ٍٖ‫ٗٞػ‬ ‫ٛ٘بى‬echo command 1-built in shell 2-external program /bin/echo ٍ‫ثب‬ ‫اعزؼ٘ب‬ ‫ٝارا‬helpٍ‫ثب‬ ‫اُخبص‬echo program ٍ‫ا‬ ‫ثؼغ‬ ‫ٛ٘بى‬special charactersٍ‫ا‬ ‫ٓغ‬ ‫اػبكزٜب‬ ٌٌٖٔ ً‫اُز‬echo command‫ؼٍغ‬‫ر‬ ً‫ٝاُز‬ ٍ‫ا‬ ٖٓ ‫ٓضٌذ‬featuresٍ‫ا‬ ًِ‫ػ‬command: َ‫ٓض‬ n ‫الي‬ ‫النزول‬new line t ‫اػبكخ‬Tab c ‫ٌطجغ‬‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫شًء‬ ًَ ٌٝ‫ثؼذٛب‬ ‫ٓب‬ ًَ ‫ٔغؼ‬ r ‫هجِٜب‬ ‫ٓب‬ ًَ ‫ُٔغؼ‬ b Back space‫ؽشف‬ ‫ُٔغؼ‬‫اُخِق‬ ٖٓ ٍ‫ا‬ ٌُٖٝechoٍ‫ا‬ ‫ثزشعٔخ‬ ّٞ‫ٌو‬ ‫ٝال‬ ٞٛ ‫ًٔب‬ ‫االهٞاط‬ ٍٖ‫ث‬ ‫ٓب‬ ًَ ‫ثٌزبثخ‬ ّٞ‫ٌو‬special characters ‫ثزشعٔخ‬ ّٞ‫عٍو‬ ‫كٌٍق‬ ‫ارا‬ ،“”? ًٛ ‫ًٔب‬ ‫ثٌزبثزٜب‬ ّٞ‫ٌو‬ ‫ٝال‬
  • 129. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 128 ‫ٛ٘بى‬ ٕ‫ا‬ ٞٛ َ‫اُؾ‬ٍ‫ا‬ ‫ثؼغ‬optionsٍ‫ا‬ ‫ٓغ‬ ّ‫رغزخذ‬ ً‫اُز‬echoَ‫ٓض‬ -e ‫ال‬ ‫بترجمة‬ ‫يسمح‬special characters -n : ‫آضِخ‬ ٍ‫ا‬ ٕ‫ا‬ ‫ٗشي‬ ‫ٛ٘ب‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ً‫ك‬“n”‫اػبكخ‬ ‫ثؼذ‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ك‬ ٌُٖٝ ًٛ ‫ًٔب‬ ‫ظٜشد‬“-e” ٍ‫ا‬ ‫هبٓذ‬shellٍ‫ا‬ ‫ثزشعٔخ‬“n” ٍ‫ا‬ ّ‫اعزخذا‬ ًِ‫ػ‬ ‫ؼب‬ٌ‫ا‬ ٍ‫ٓضب‬ ‫ٝٛزا‬“c”ُ٘‫ا‬ ‫اظٜبس‬ ً‫ك‬ٍ‫ٝا‬ ‫اُغطش‬ ‫ٗلظ‬ ً‫ك‬ ‫زٍغخ‬“t”‫الػبكخ‬tab THE PRINTF COMMAND ٍ‫ا‬ ٖ‫ػ‬ ‫رؾذص٘ب‬ ٕ‫ا‬ ‫ثؼذ‬echoٍ‫ا‬ ٕ‫ا‬ ‫الؽظ٘ب‬ ، ‫االٓضِخ‬ ‫ثؼغ‬ ‫ثؼشع‬ ‫ٝهٔ٘ب‬outputٌٌٕٞ ‫ٓب‬ ‫دائٔب‬ unformatted،ٍ‫ا‬ ‫ثٜب‬ َ‫ٗغؼ‬ ٕ‫ا‬ ٌٌٖٔ ‫ؽشٌوخ‬ ‫ٛ٘بى‬ َٜ‫ك‬output? َ‫ؼ‬‫اك‬ ٌَ‫ثش‬ ‫ٌظٜش‬ ٍ‫ا‬ ّ‫اعزخذا‬ ٌٍٖٔ‫ك‬ ، ْ‫ٗؼ‬printfَٔ‫ُؼ‬formattingَُoutputٍ‫ٝا‬ ،printfٍ‫ا‬ ٙ‫ُٜز‬ ‫ظغ‬‫ٌخ‬ form printf(%[flags][width][.precision]type) ٍ‫ا‬ ٍ‫اشٌب‬ ‫ٝاثغؾ‬printfًٛ
  • 130. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 129 printf(%type) ٍ‫ٝا‬typeٍٞٛ‫ا‬characters‫ؽجبػزٜب‬ ْ‫عٍز‬ ً‫اُز‬: s Srting d Decimal o Octal x Hexadecimal u Unsigned integers ٍ‫ٓضب‬‫ثط‬ ّٞ‫ع٘و‬ :‫ًِٔخ‬ ‫جبػخ‬ahmedٍ‫ا‬ ّ‫ثبعزخذا‬printfَُ ‫ٝع٘ٞػؼ‬command‫ٓب‬ ٕ‫ا‬ ٞٛ ٚ‫ثطجبػز‬ ّٞ‫عٍو‬string printf '%s' ahmed ٍ‫ا‬ ٕ‫ا‬ ‫ٝٗالؽع‬prompt‫ًِٔخ‬ ‫ثغٞاس‬ ‫ػشػٜب‬ ْ‫ر‬ahmedٍ‫ا‬ ‫ٗخجش‬ ُْ ‫الٗ٘ب‬ َ‫ٓغزو‬ ‫عطش‬ ً‫ك‬ ‫ٍُٝظ‬ command‫ٗشٌذ‬ ‫اٗ٘ب‬ٙ‫ٌؼشع‬ ٕ‫ا‬new lineٍ‫ا‬ ‫ر٘لٍز‬ ‫ثؼذ‬command،‫ؽٍش‬ٗ ٕ‫ا‬ ‫ٌغت‬ٍ‫ا‬ ‫خجش‬ printfٕ‫ا‬ ‫اسدٗب‬ ‫ارا‬ ‫ُزُي‬ ‫ؽشكٍب‬ ٙ‫ٗشٌذ‬ ‫ثٔب‬ٍ‫ا‬ ‫ر٘لٍز‬ ‫ثؼذ‬ ‫عذٌذ‬ ‫عطش‬ ‫ٗؼشع‬command‫اػبكخ‬ ٝ‫ا‬tab ‫اي‬ ٝ‫ا‬optionsٍ‫ا‬ ‫ؽبُخ‬ ً‫ك‬ ‫كؼِ٘ب‬ ‫ٓضِٔب‬echo‫اػبكخ‬ ‫كٍغت‬ n ‫الي‬ ‫النزول‬new line t ‫اػبكخ‬Tab c ‫ٝاؽذ‬ ‫عطش‬ ً‫ك‬ ‫شًء‬ ًَ ‫ٌطجغ‬ ‫ثؼذٛب‬ ‫ٓب‬ ًَ ‫ٌٝٔغؼ‬ r ‫هجِٜب‬ ‫ٓب‬ ًَ ‫ُٔغؼ‬ b Back space‫اُخِق‬ ٖٓ ‫ؽشف‬ ‫ُٔغؼ‬
  • 131. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 130 ‫اخر‬ ‫مثال‬: ‫ثبػبكخ‬precitionٍ‫ا‬ ‫اؽذ‬ ًٛٝoptions‫اُؼشع‬ ‫دهخ‬ ‫ُزؾذٌذ‬ ‫اػبكزٜب‬ ٌٌٖٔ ً‫اُز‬: printf „%.5d‟ 12 ٖٓ ‫ؽِج٘ب‬ ‫ٝٛ٘ب‬printfْ‫اُشه‬ ‫ؽجبػخ‬12ّ‫ثبعزخذا‬ ٌُٖٝ5 digits‫ظٞسح‬ُ‫ا‬ ٍٖ‫ٝث‬ ٍٚ٘‫ث‬ ‫اُلشم‬ ‫الؽع‬ ‫اُزبٍُخ‬ : ‫اخر‬ ‫مثال‬ ‫ا‬ ‫ثبػبكخ‬ٍflagsَ‫ٓض‬“+”ٝ‫ا‬“-“ ٍ‫ٝا‬“+”ٍ‫ا‬ ٖٓ ‫رطِت‬shellٍ‫ا‬ ‫ع‬ ‫ػش‬digits‫ًبٗذ‬ ‫عٞاء‬ ‫ثٜب‬ ‫اُخبطخ‬ ‫ثبالشبسح‬“+”ٝ‫ا‬“-“ : ‫اخر‬ ‫مثال‬ : ‫اُضالصخ‬ ‫االٓضِخ‬ ٍٖ‫ث‬ ‫ٝاُلشم‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ا‬ ‫الؽع‬
  • 132. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 131 ٍ‫ا‬ ‫ثؼشع‬ ‫هٔ٘ب‬ ٍٝ‫اال‬ ٍ‫أُضب‬ ً‫ك‬string: flyingٍ‫ا‬ ّ‫ثبعزخذا‬type‫اي‬ ّ‫اعزخذا‬ ٕٝ‫ٝثذ‬ ‫كوؾ‬ options ‫ثبػبكخ‬ ‫هٔ٘ب‬ ًٗ‫اُضب‬ ٍ‫أُضب‬ ً‫ٝك‬size option‫ظٍض‬‫ثزخ‬ ّٞ‫ٌو‬ ‫اُزي‬10‫ًِٔخ‬ ‫ُؼشع‬ ‫خبٗبد‬flying ‫ثؼشع‬ ّ‫كوب‬ ،flyingٍ‫ا‬ ‫اخش‬ ً‫ك‬10‫خبٗبد‬ ٍ‫ا‬ ‫ثبػبكخ‬ ‫هٔ٘ب‬ ‫اُضبُش‬ ٍ‫أُضب‬ ً‫ٝك‬flagًٛٝ“-“‫ُؼشع‬flyingٍ‫ا‬ ‫ثذاٌخ‬ ً‫ك‬10‫خبٗبد‬ ٍ‫ا‬ ‫ظـٍش‬‫ثز‬ ‫هٔ٘ب‬ ‫اُشاثغ‬ ٍ‫أُضب‬ ً‫ٝك‬size‫ُـ‬ ‫ظض‬‫أُخ‬flying‫ثؼشع‬ ّ‫كوب‬flying‫ًبٓال‬
  • 133. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 132 CHAPTER 10. ADDITIONAL INFORMATION THE SHELL ENVIRONMENTAL VARIABLES PERTAINING TO SCRIPTING ٍ‫ا‬ ًِ‫ػ‬ ‫ٗظشح‬ ً‫عِ٘و‬shellٍ‫ٝا‬environment variables‫ثٜب‬ ‫أُزؼِوخ‬ ٍ‫ا‬ ٍٖ‫ث‬ ‫اُلشم‬ ٖ‫ػ‬ ‫عبثوب‬ ‫رٌِٔ٘ب‬ ‫ُٝوذ‬shell variableٍ‫ٝا‬environment variableٖ‫ػ‬ ‫ٝرؾذص٘ب‬ ٍ‫ا‬subshellٍ‫ا‬ ٖٓ ‫ٝاُخشٝط‬ ٍٞ‫اُذخ‬ ‫ًٍٝلٍخ‬subshell ٍ‫ا‬ ‫ُٝٔؼشكخ‬environment variables‫االٓش‬ ّ‫ٗغزخذ‬ Env ٍ‫ا‬ ْٛ‫ا‬ ‫ثؼغ‬ ٙ‫ٝٛز‬environmental variablesَٔ‫ػ‬ ْ‫ٌز‬ ً‫اُز‬setٍ‫ا‬ ‫ػ٘ذ‬ ‫ُٜب‬startup
  • 134. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 133 ٍ‫ا‬ ‫ُٝٔؼشكخ‬shell variables‫االٓش‬ ّ‫ٗغزخذ‬ set ‫ا‬ ْٛ‫ا‬ ٍٖٓٝshel variablesًٛ ٍ‫ٝا‬promptًٔ‫ٌغ‬ ًُ‫اُزب‬bash prompt [root@localhost~]# ٍ‫ا‬ ‫ٛزا‬ ‫ًزبثخ‬ ‫ٝؽشٌوخ‬promptٍ‫ا‬ ًِ‫ػ‬ ‫رؼزٔذ‬form‫اُزبٍُخ‬ ‫ؼب‬ٌ‫ا‬ ‫ُٝزٌ٘ب‬prompt‫ًزبثخ‬ ‫ػ٘ذ‬ ‫ٌظٜش‬ ‫اخش‬commandٞٛٝ ‫ٗبهض‬“>” ٍ‫ا‬ ‫ٝٛزا‬promptًٔ‫ٌغ‬PS2
  • 135. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 134 ٍ‫ا‬ ٙ‫ٝٛز‬PS1, PS2ًٛ ‫ٝؿٍشٛب‬shell variables ‫ٝٛ٘بى‬special environment variablesَ‫ٓض‬“~-”ٝ“~” ‫رشٓض‬ ‫ؽٍش‬“~”ٍ‫ا‬ ًُ‫ا‬home directory ٍ‫ٝا‬“~-“ًُ‫ا‬ ‫رشٓض‬ٍ‫ا‬previous directory THE SOURCE COMMAND ٍ‫ا‬source commandٍ‫ا‬ ٍَ‫ُزشـ‬ ‫ؽشٌوخ‬ ًٛscriptsٍ‫ا‬ ‫ٝر٘لٍز‬commandsٍ‫ا‬ ٖٓ current shell‫كزؼ‬ ٕٝ‫ثذ‬new sub shell ‫ٝػغ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬“. “ٍ‫ا‬ َ‫هج‬commandٍ‫ا‬ ٝ‫ا‬scriptٍ‫ا‬ ‫ثؼذ‬ ‫ٓغبكخ‬ ‫ٛ٘بى‬ ٕ‫ا‬ ‫ٝالؽع‬ “.” ٍ‫ا‬ ٍَ‫رشـ‬ ْ‫ٌز‬ ‫ًٍق‬ ‫ٗززًش‬ ‫دػٞٗب‬ ‫ارا‬script? ٍ‫ا‬ ٍَ‫رشـ‬ ْ‫ٌز‬script: ‫اُزبٍُخ‬ ‫ثبُطشٌوخ‬ ./shellscript ٍ‫ا‬ ّٞ‫كٍو‬shell‫ثلزؼ‬new subshellٍ‫ا‬ ‫ٌٝ٘لز‬scriptٍ‫ا‬ ٕ‫ال‬ ٍٚ‫ك‬script‫ثـ‬ ‫ٌجذأ‬ ‫ٓب‬ ‫ؿبُجب‬ “#!/bin/bash” ٍ‫ا‬ ًٜ‫ٌ٘ز‬ ٍ‫االؽٞا‬ ْ‫ٓؼظ‬ ً‫ٝك‬script‫ثـ‬exit 0ٍ‫ا‬ ّٞ‫كٍو‬shellٍ‫ا‬ َٔ‫ػ‬ ‫ثبٜٗبء‬subshell‫ٝاُؼٞدح‬ ٍ‫ا‬ ًُ‫ا‬parent shell ٍ‫ا‬ ‫اعزخذٓ٘ب‬ ‫ارا‬ ‫ٌؾذس‬ ‫اُزي‬ ‫كٔب‬ ‫ارا‬source command?
  • 136. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 135 . ./shellscript ٍ‫ا‬ ّٞ‫ٌو‬current shellٍ‫ا‬ ‫ثز٘لٍز‬script ‫كبرا‬ٍ‫ا‬ ٕ‫ًب‬script‫ثـ‬ ًٜ‫ٌ٘ز‬exit 0ٍ‫ا‬ َٔ‫ػ‬ ًٍٜ٘‫ع‬ ٚٗ‫كب‬current shell‫ٛ٘بى‬ ٌٌٖ ُْ ‫ارا‬ ‫آب‬ ، exit 0ٍ‫ا‬ ٕ‫كب‬current shell‫ٓلزٞؽخ‬ َ‫عزظ‬ ٍ‫ا‬ ٕ‫ال‬ ‫ٌؾذس‬ ‫ٝٛزا‬sourcingٍ‫ا‬ َٔ‫ػ‬ ‫ثبُـبء‬ ّٞ‫ٌو‬shebangٍ‫ا‬ ٕ‫كب‬ ‫ُزُي‬ ،command ٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬scriptٍ‫ا‬ ًِ‫ػ‬ ٖٓ َٔ‫رؼ‬current shell‫ٝثب‬ ،‫ٝعٞد‬ ‫ؽبُخ‬ ً‫ك‬ ًُ‫ُزب‬exit 0 ٍ‫ا‬ ٖٓ ‫ٗخشط‬ ‫كبٗ٘ب‬current shellٍ‫ا‬ ًُ‫ا‬ ‫ٝٗزٛت‬login shell ٍ‫ا‬ ‫ٝظٍلخ‬ ًٛ ‫كٔب‬ ‫ارا‬sourcing? ًَuserٍ‫ا‬ ًِ‫ػ‬systemُٚvariablesً‫ك‬ ‫ؽلظٜب‬ ْ‫ٌز‬ ٚ‫ث‬ ‫خبطخ‬files ٍ‫ا‬ ‫ٌؾزٞي‬systemٍ‫ا‬ ٖٓ ‫ٓغٔٞػخ‬ ًِ‫ػ‬startup scriptsٍ‫ا‬ ٍَ‫رشـ‬ ‫ثذاٌخ‬ ‫ػ٘ذ‬ َٔ‫رؼ‬ ً‫اُز‬ system ٍ‫ا‬ ّٞ‫ٌو‬ ‫ػ٘ذٓب‬Userَٔ‫ثؼ‬loginٍ‫ا‬ ًِ‫ػ‬systemٍ‫ا‬ ٙ‫ٛز‬ ّٞ‫رو‬scriptsَٔ‫ثؼ‬callَُfiles ٍ‫ا‬ ًِ‫ػ‬ ‫رؾزٞي‬ ً‫اُز‬user variablesٍ‫ا‬ ‫ؽشٌن‬ ٖ‫ػ‬sourcingًٌِ ‫ًٔب‬ ‫ٛ٘بى‬Userٚٔ‫اع‬ahmed gamilٍ‫ا‬ ٝ‫ا‬ ٚ‫ثٍبٗبر‬ ٚٗ‫ا‬ ‫ُ٘لزشع‬variablesً‫ك‬ ‫رٞعذ‬ ٚ‫ث‬ ‫اُخبطخ‬file ٚٔ‫اع‬var ٕ‫ا‬ ‫ٝٗلزشع‬‫ٛ٘بى‬startup scriptًٔ‫ٌغ‬vars.shٍ‫ا‬ ٍَ‫رشـ‬ ‫ثذاٌخ‬ ‫ػ٘ذ‬ َٔ‫ٌؼ‬system‫ٌؾزٞي‬ : ًِ‫ػ‬
  • 137. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 136 ٍ‫ا‬ ٕ‫ا‬ ‫ٛ٘ب‬ ‫ٝٗالؽع‬”. var"ٍ‫ا‬ ًٛsourcingٍ‫ا‬ ًِ‫ػ‬ ‫ٌ٘بدي‬ ‫اُزي‬variable file : var ٍ‫ا‬ ‫ٛزا‬ ٍَ‫رشـ‬ ‫ٝػ٘ذ‬script: ً‫االر‬ ‫ٌؾذس‬ ‫ٝػغ‬ ٌٌٖٔٝscriptَ‫داخ‬script‫اخش‬ٍ‫ا‬ ّ‫ٝاعزخذا‬sourceٚ‫ٓؼ‬ THE EXEC COMMAND ٍ‫ا‬execٞٛcommandَٔ‫ثؼ‬ ّٞ‫ٌو‬replaceَُparent process‫ة‬process‫اخشي‬ ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬ ‫كٔضال‬command exec ls -l ٍ‫ا‬ ‫ٛزا‬ ٕ‫ا‬ ‫ٗالؽع‬commandٍ‫ا‬ ‫ثبؿالم‬ ّ‫هب‬terminal،? ‫ُٔبرا‬ ٍ‫ا‬ ٕ‫ال‬terminal‫اي‬ ًِ‫ػ‬ ‫ٌؾزٞي‬ ٌٌٖ ُْ ‫اُجذاٌخ‬ ً‫ك‬process‫ك‬ ، َٔ‫رؼ‬ٍ‫ا‬ ‫ثز٘لٍز‬ ‫ؤ٘ب‬exec commandٍ‫ا‬ ‫ثز٘لٍز‬ ّ‫هب‬ ‫اُزي‬command : ls –lًُ‫ا‬ ‫ٌؼٞد‬ ‫رُي‬ ‫ٝثؼذ‬parent process ‫اي‬ ‫ٌٞعذ‬ ‫ال‬ ‫كؼٍِب‬ ٌُٖٝparent processٍ‫ا‬ ٕ‫كب‬ ‫ُزُي‬shellٍ‫ا‬ ًُ‫ا‬ ‫ٝٗؼٞد‬ ‫رـِن‬login prompt OTHER METHODS OF EXECUTING A SCRIPT OR A SERIES OF COMMANDS ٍ‫ا‬shell‫ٓج‬: ٍٖٓ‫ٗظب‬ ًِ‫ػ‬ ً٘ 1-ٍ‫ا‬round brackets () 2-ٍ‫ا‬curly brackets {} EXECUTION W ITH ROUND BRACKETS ٍ‫ا‬round brackets ()ٍ‫ا‬ ّٞ‫ٌو‬ ٕ‫ا‬ ً٘‫رؼ‬shellٍ‫ا‬ ‫ثز٘لٍز‬commandٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ً‫ك‬subshell‫عذٌذ‬ ًُ‫اُزب‬ ‫االٓش‬ ‫ٗلزٗب‬ ‫كبرا‬
  • 138. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 137 Pwd ٌٕٞ‫عز‬ ‫اُ٘زٍغخ‬ ٕ‫كب‬ ‫ثزـ‬ ‫هٔ٘ب‬ ‫ارا‬ ‫ثٍ٘ٔب‬ٍ‫ا‬ ‫ٍٍش‬path‫ٝر٘لٍز‬pwdٍ‫ا‬ ‫ثؼشع‬ ّٞ‫كغٍو‬ ٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ٌُٖٝpath‫اُغذٌذ‬ ٍ‫ا‬ ٕ‫ا‬ ٖٓ ْ‫اُشؿ‬ ًِ‫ػ‬prompt‫ٌزـٍش‬ ُْ ٍ‫ا‬ ٕ‫ا‬ ً٘‫ٌؼ‬ ‫ٝٛزا‬shellٍ‫ا‬ ‫ر٘لٍز‬ ْ‫ر‬ ٌُٖٝ ‫ٌزـٍش‬ ُْcommandsً‫ك‬ ‫االهٞاط‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ subshell‫عذٌذح‬ٍ‫ا‬ ًُ‫ا‬ ‫اخشي‬ ‫ٓشح‬ ‫ٌؼٞد‬ ْ‫ص‬current shell EXECUTION W ITH CURLY BRACKETS ٍ‫ا‬curly brackets {}ٍ‫ا‬ ّٞ‫ٌو‬ ٕ‫ا‬ ً٘‫رؼ‬shellٍ‫ا‬ ‫ثز٘لٍز‬commandٍٖ‫اُوٞع‬ ٍٖ‫ث‬ ‫أُٞعٞدح‬ ٍ‫ا‬ ‫ٗلظ‬ ً‫ك‬shellً‫ك‬ ‫ٍُٝظ‬subshell‫عذٌذ‬ : ‫مثال‬ ٍ‫ا‬ ‫ثؼغ‬ ‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫ارا‬commandsٍ‫ا‬ ٍ‫ثبسعب‬ ّٞ‫رو‬error messagesًُ‫ا‬/tmp/error‫كٜ٘بى‬ : ‫رُي‬ َٔ‫ُؼ‬ ٍٖ‫ؽشٌوز‬ ‫االولي‬ ‫الطريقة‬: Command1 2>/tmp/errors command2 2>/tmp/errors command3 2>/tmp/errors : ‫الثانية‬ ‫الطريقة‬ {command1;command2;command3;} 2>/tmp/errors
  • 139. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 138 ًَ ‫ٌزجغ‬ ٕ‫ا‬ ‫ٌٝغت‬commsnd‫ػالٓخ‬ ‫ٝاخش‬“;” ٍ‫ا‬ ٙ‫كٜز‬form‫ػٜ٘ب‬ ‫عٍ٘زظ‬error‫ٝعٞد‬ ّ‫ُؼذ‬“;”‫ثؼذ‬pwd {ls -l; pwd} ٍ‫ٝا‬form‫ظؾٍؾخ‬ُ‫ا‬ًٛ {ls -l; pwd;}
  • 140. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 139 CHAPTER 11. POSITIONAL PARAMETERS &VARIABLES RE- VISITED INTRODUCTION ٍ‫ا‬ ‫ثؼغ‬ ٖ‫ػ‬ ‫عبثوب‬ ‫رٌِٔ٘ب‬parametersَ‫ٓض‬$0 : $9, $#, $?ٍْٜ‫ك‬ ‫ٝاؽذ‬ ًَ ‫ٝظٍلخ‬ ‫ٝػشك٘ب‬ ٍ‫ا‬ ‫ٓغ‬ ‫ثٜب‬ َٓ‫ٗزؼب‬ ٕ‫ا‬ ٌٌٖٔ ً‫اُز‬ ‫اُطشم‬ ‫ثؼغ‬ ٖ‫ػ‬ ٕ‫اال‬ ‫ٝع٘زؾذس‬parametersٌَ‫ثش‬ ٌُٖٝ ‫ٓخزِق‬ ‫ُذٌ٘ب‬ ٕ‫ا‬ ‫ٓضال‬ ‫ُ٘لزشع‬parameter : NAMEًِ‫ػ‬ ‫ٌؾزٞي‬value : ahmed NAME=ahmed ٍ‫ا‬ ٕ‫ا‬ ٖٓ ‫ُِٝزؤًذ‬parameters‫ُٜب‬ ‫اطجؼ‬value‫ُٜب‬ ‫ؽذس‬ ‫(اي‬set) ٍ‫ا‬ ‫ٓغ‬ َٓ‫ُِزؼب‬ ‫ؽشٌوخ‬ ٍٝ‫ا‬ ًُ‫ا‬ ٕ‫اال‬ ً‫ٗؤر‬parameters PARAM:-VALUE ٍ‫ا‬ ٙ‫ٛز‬ ّ‫رغزخذ‬formٕ‫ا‬ ٖٓ ‫ُِزؤًذ‬ٍ‫ا‬nset: null or uparameter(‫اي‬ ‫ؼغ‬‫ر‬ ‫ال‬ ً٘‫ٝرؼ‬ variable‫ٝعٞدٛب‬ ٖٓ ‫كوؾ‬ ‫رؤًذ‬ ٌُٖٝ) ٍ‫ا‬ ٕ‫ًب‬ ‫كبرا‬parameterُٚvalueٝ‫ا‬setٍ‫ا‬ ‫كغزظٜش‬valueٍ‫ا‬ ‫ُٜزا‬ ‫ً٘زٍغخ‬command ٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ‫آب‬parameter‫ُٜب‬ ‫ٍُظ‬valueٝ‫ا‬unsetٍ‫ا‬ ‫كغٍظٜش‬valueٍ‫ا‬ ً‫ك‬ ‫أُٞعٞدح‬ form ${PARAM:-value} ٍ‫ا‬ ‫ؽبُخ‬ ً‫ك‬ ‫كٔضال‬parameter‫اُغبثن‬NAMEَٔ‫ثؼ‬ ‫هٔ٘ب‬ ،set‫ثؤٍخ‬ ُٚahmed
  • 141. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 140 NAME=ahmed َٔ‫ثؼ‬ ‫هٔ٘ب‬ ‫كبرا‬ echo ${NAME:-'AMR'} ‫ُ٘ب‬ ‫عٍظٜش‬ahmed‫ٍُٝظ‬AMRٕ‫ال‬NAMEُٚ ٚ‫ظ‬‫ظ‬‫ٓخ‬value‫اعبعب‬‫رؤًذٗب‬ ‫هذ‬ ٌٕٞٗ ‫ٝثزُي‬ ٍ‫ا‬ ٕ‫ا‬ ٖٓvariable‫ُٜب‬value‫ُٜب‬ ٚ‫ظ‬‫ظ‬‫ٓخ‬ َٔ‫ثؼ‬ ‫هٔ٘ب‬ ‫ارا‬ ٌُٖٝunsetَُNAME‫ر٘ل‬ ‫ٝاػذٗب‬‫اخشي‬ ‫ٓشح‬ ‫االٓش‬ ‫ٍز‬ ‫ظٜش‬ ‫ٛ٘ب‬AMRٍ‫ا‬ ٕ‫ا‬ ًِ‫ػ‬ ٍ‫ٌذ‬ ‫ٝٛزا‬variable‫ُٜب‬ ‫ٍُظ‬value‫ثبُزؤًٍذ‬ ً٘‫ٌؼ‬ ‫ال‬ ‫ٝٛزا‬ ، ‫ظخ‬‫ظ‬‫ٓخ‬ ٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬variable‫ُٜب‬ ‫اطجؼ‬value‫عذٌذح‬AMR ٍ‫ا‬ ٕ‫ا‬ ‫اُغبثوخ‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫ٗشي‬ ‫ًٝٔب‬NAME‫ٓبصاُذ‬unsetٍ‫ا‬ ‫ػٍِٜب‬ ‫ٗلزٗب‬ ‫اٗ٘ب‬ ٖٓ ْ‫اُشؿ‬ ًِ‫ػ‬ form‫ٝٛزا‬ ، ‫اُغبثوخ‬ٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬ ًِ‫ػ‬ ٍ‫ٌذ‬form‫ٝعٞد‬ ٖٓ ‫كوؾ‬ ‫ُِزؤًذ‬ ّ‫رغزخذ‬variable value
  • 142. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 141 PARAM:=VALUE َٔ‫ثؼ‬ ّٞ‫ٗو‬ ‫كٌٍق‬ ‫ارا‬setَُparameter? ّ‫ثبعزخذا‬ ّٞ‫ٗو‬formًٛٝ ‫ثبُغبثوخ‬ ‫عذا‬ ٍٜٚ‫شج‬ PARAM:=value ٍ‫ا‬ ٙ‫ٛز‬formٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ٚٗ‫ا‬ ً٘‫رؼ‬parameter : (unset or null)ٍ‫ا‬ ‫ؼغ‬‫ك‬valueٌ‫اُغذ‬‫ذح‬ ٍ‫ا‬ ‫كبرشى‬ ‫ٝاال‬value‫اُوذٌٔخ‬ٍ‫ا‬ ‫ػغ‬ ً٘‫(ٝرؼ‬value)‫ٓٞعٞدح‬ ٌٖ‫ر‬ ُْ ٕ‫ا‬ ‫كوؾ‬ َٔ‫ثؼ‬ ّٞ‫رو‬ ًٛٝsetَُparametersٍ‫ا‬ ٝ‫ا‬variables‫اٜٗب‬ ‫ؽبُخ‬ ً‫ك‬unset‫ُٜب‬ ‫ٍُظ‬ ٝ‫ا‬ value‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ثب‬ ‫ًٔب‬ ٍ‫ا‬ ٙ‫كٜز‬ ‫ارا‬formَٔ‫ثؼ‬ ّٞ‫رو‬checkٍ‫ا‬ ًِ‫ػ‬Variableٞٛ َٛ ‫ُزشي‬setّ‫ا‬unsetٛ ٝ‫ا‬ُٚ َ value‫ال‬ ّ‫ا‬ ‫ًبٗذ‬ ‫كبرا‬set‫ُٜب‬ ٝ‫ا‬value‫ًبٗذ‬ ‫ارا‬ ‫آب‬ ، ًٛ ‫ًٔب‬ ‫كززشًٜب‬unset‫ُٜب‬ ‫ٍُظ‬ ٝ‫ا‬valueّٞ‫كزو‬ ٍ‫ا‬ ‫ثبػبكخ‬value‫اُغذٌذح‬ ${PARAM:+VALUE} ٍ‫ا‬ ٙ‫ٛز‬formٍ‫ا‬ ‫ًبٗذ‬ ‫ارا‬ ٚٗ‫ا‬ ً٘‫رؼ‬parameter : (unset or null)‫ٝاال‬ ًٛ ‫ًٔب‬ ‫كبرشًٜب‬ ٍ‫ا‬ ٍ‫كبعزجذ‬value‫ثب‬ ‫أُٞعٞدح‬ٍvalue‫اُغذٌذح‬ٍ‫ا‬ ٍ‫اعزجذ‬ ً٘‫(ٝرؼ‬value)‫ٝعذد‬ ٕ‫ا‬ ‫كوؾ‬
  • 143. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 142 ٍ‫ا‬ ٕ‫ا‬ ‫ٌٞػؼ‬ ‫اُزي‬ ‫ظٞسح‬ُ‫ا‬ ً‫ك‬ ‫عطش‬ ‫اخش‬ ‫الؽع‬ ٌُٖٝvalue : amr‫رزـٍش‬ ُْ،ٍ‫ا‬ ٕ‫ٝا‬form ‫اُغبثوخ‬“${NAME:+ahmed}”‫ٝعٞد‬ ٖٓ ‫ؼب‬ٌ‫ا‬ ‫ُِزؤًذ‬ ‫كوؾ‬ ‫ًبٗذ‬setٝ‫ا‬valueٍ‫ا‬ ٙ‫ُٜز‬ parameter ${VARIABLE%PATTERN} ٍ‫ا‬ ٙ‫ٛز‬formّٞ‫رو‬َٔ‫ثؼ‬matchَُpatern (variable value)ٚ‫ثؾزك‬ ّٞ‫ٝرو‬ ٚ‫ٜٗبٌز‬ ٖٓ ٌُٖٝ ٍ‫ا‬ ًِ‫ػ‬ ‫ؼب‬ٌ‫ا‬ ‫ٌئصش‬ ‫ال‬ ‫ٛزا‬ ٌُٖٝ( ً‫اُجبه‬ ‫ٝػشع‬value) ‫ٗلغٜب‬ ٍ‫ٝا‬“%”ً٘‫رؼ‬match the shortest pattern from the end of it : ًُ‫اُزب‬ ٍ‫أُضب‬ ‫الؽع‬ ٍ‫ا‬ ّ‫اعزخذا‬ ٌٌٖٔٝwild cardsٍ‫ا‬ ٙ‫ٛز‬ ً‫ك‬form
  • 144. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 143 ‫ٝٛ٘ب‬‫اهشة‬ ٖ‫ػ‬ ‫ثبُجؾش‬ ّ‫هب‬“a”ٝ“l”ٖٓ ٍْٜ٘‫ث‬ ‫ٝٓب‬ ْٜ‫ٝؽزك‬ ‫ثؼغ‬ ٖٓcharacters ٍٝ‫ا‬ ‫ٛزا‬ ٕ‫ًب‬ ‫ارا‬ ٚٗ‫ا‬ ‫الؽع‬paternٍ‫ا‬ ً‫ك‬ ‫ٓشح‬ ٖٓ ‫اًضش‬ ‫ٌٓشس‬valueٍ‫ا‬ ٕ‫كب‬formَٔ‫ثؼ‬ ّٞ‫رو‬ match‫اهشة‬ ‫ٓغ‬patern MAGIC%%R*A ٍ‫ا‬ َ‫ٓض‬ ًٛٝformٍ‫ا‬ ٙ‫ٛز‬ ٕ‫ا‬ ‫اُلشم‬ ‫ٓغ‬ ‫اُغبثوخ‬formَٔ‫ثؼ‬ ّٞ‫رو‬matchingَُlongest patternٍ‫ا‬ ‫ٍُٝظ‬shortestٍ‫ا‬ ً‫ك‬ ‫ًٔب‬form‫اُغبثوخ‬ : ًُ‫اُزب‬ ٍ‫أُضب‬ ‫اٗظش‬ ‫ثبُجؾش‬ ّ‫هب‬ ‫ٝٛ٘ب‬‫اثؼذ‬“h”ٝ“d”ٍ‫ا‬ ْٜ‫ٓؼ‬ ‫ٝؽذس‬ ْٜ‫ٝؽزك‬ ‫ثؼغ‬ ٖ‫ػ‬charactersٍْٜ٘‫ث‬ ‫أُٞعٞدح‬ VARIABLE#PATTERN
  • 145. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 144 ٍ‫ا‬ ً‫ك‬ ‫ٗالؽع‬formsٍ‫ا‬ ٕ‫ا‬ ‫اُغبثوخ‬matchingٍ‫ا‬ ‫ٜٗبٌخ‬ ٖٓ ٌٌٕٞvalue،‫ٌٞعذ‬ َٜ‫ك‬ matchingٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalue? ٍ‫ا‬ َٔ‫ػ‬ ٌٌٖٔ ، ْ‫ٗؼ‬ ًٛ ‫االعبثخ‬Matchingٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalue‫ظٍـخ‬ُ‫ا‬ ّ‫ثبعزخذا‬ variable#pattern ٍ‫ا‬ َ‫ٝٓض‬“%”ٍ‫ٝا‬“%%”ٕ‫كب‬ٍ‫ا‬“#”َٔ‫ثؼ‬ ّٞ‫رو‬ ‫ٛ٘ب‬matchingَُshortest patternًٛٝ ‫اهشة‬paternٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalue‫(ػٌظ‬“%”ً‫ك‬ ‫أُٞعٞدح‬form‫ع‬)‫بثوخ‬ َٔ‫ثؼ‬ ّ‫هب‬ ‫ٝٛ٘ب‬Matching‫الهشة‬“a”ٝ“m”ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓ ‫ثؼغ‬ ٖٓvalue‫ٓب‬ ‫ٝؽزف‬ ‫ٝؽزكٜب‬ ٍ‫ا‬ ٖٓ ٍْٜ٘‫ث‬characters ٍ‫ٝا‬“##”َٔ‫ثؼ‬ ّٞ‫رو‬Matchingَُlongest pattern‫اثؼذ‬ ًٛٝpatternٍ‫ا‬ ‫ثذاٌخ‬ ٖ‫ػ‬ value َٔ‫ثؼ‬ ّ‫هب‬ ‫ٝٛ٘ب‬Matching‫الثؼذ‬“a”ٝ“m”ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓ ‫ثؼغ‬ ٖ‫ػ‬value‫ٓب‬ ‫ٝؽزف‬ ‫ٝؽزكٜب‬ ٍ‫ا‬ ٖٓ ٍْٜ٘‫ث‬characters ٍ‫ا‬ ٕ‫ا‬ ‫ٗززًش‬ ‫ًٍق‬ ‫ارا‬“#”َٔ‫ثؼ‬ ّٞ‫رو‬matchingٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvalueٍ‫ٝا‬“%”ٍ‫ا‬ ‫ٜٗبٌخ‬ ٖٓ value? ٍ‫ا‬ ٕ‫ا‬ ِْ‫ٗؼ‬ ‫ًٔب‬“#”‫ًؼالٓخ‬ ّ‫رغزخذ‬commentٍ‫ا‬ ً‫ك‬scriptsً‫ك‬ ‫ٓٞعٞدح‬ ٌٕٞ‫ر‬ ‫ٓب‬ ‫ٝدائٔب‬ ، َٔ‫ػ‬ ‫أُشاد‬ ‫اُغطش‬ ‫ثذاٌخ‬commentٕ‫كب‬ ‫ُزُي‬ ، ٍُٚ‫ا‬“#”‫اُجذاٌخ‬ ً‫ك‬ ‫دائٔب‬ ّ‫رغزخذ‬ ٍ‫ا‬ ‫ػالٓخ‬ ٕ‫ا‬ ِْ‫ٗؼ‬ ‫ًٝٔب‬“%”ٍ‫ا‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫ُِؾ‬ ‫اُؾغبثٍخ‬ ‫اُؼٍِٔخ‬ ‫ٜٗبٌخ‬ ً‫ك‬ ‫دائٔب‬ ّ‫رغزخذ‬ percentage‫اُٜ٘بٌخ‬ ً‫ك‬ ‫دائٔب‬ ّ‫رغزخذ‬ ًٜ‫ك‬ ‫ُزُي‬ ، ٍ‫ا‬ ٕ‫ا‬ ‫ٗززًش‬ ‫ًٍق‬ ‫ارا‬“%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬shortestٍ‫ا‬ ٕ‫ٝا‬“%%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬longestٍ‫ٝا‬“#” ? ‫ًزُي‬ ‫ؼب‬ٌ‫ا‬
  • 146. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 145 ٌٌٍٖٔ‫ا‬ ٕ‫ا‬ ‫اػزجشٗب‬ ‫ارا‬ ‫رُي‬ ‫ٗززًش‬ ٕ‫ا‬“%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬ ًٜ‫ك‬ ‫ٝاؽذح‬ ‫ػالٓخ‬ ‫ٓغشد‬ ًٛshortest ‫ثٍ٘ٔب‬“%%”ٍ‫ا‬ ًِ‫ػ‬ ٍ‫رذ‬ ‫كجزُي‬ ‫اًجش‬ ‫اٜٗب‬ ‫اي‬ ٍٖ‫ػالٓز‬longest VARIABLE:OFFSET:LENGTH ٍ‫ا‬ ٙ‫ٛز‬formَٔ‫ثؼ‬ ّٞ‫رو‬cutٍ‫ا‬ ٖٓ ‫ٓؾذد‬ ‫ُؼذد‬charactersٍ‫ا‬ ً‫ك‬ ‫عضء‬ ‫اي‬ ٖٓvariable‫ٝال‬ ٌٌٕٞ ٕ‫ا‬ ‫ٌشزشؽ‬ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvariableٚ‫ٜٗبٌز‬ ٝ‫ا‬ ٍ‫ا‬ ٕ‫ًب‬ ‫كبرا‬variable=ahmedٍ‫ا‬ ٖٓ ‫عضء‬ ‫اي‬ ‫رؾذٌذ‬ ٌٍٖٔ‫ك‬variable: َ‫ٓض‬ ً‫اُجبه‬ ‫ٝؽزف‬ ahmٝ‫ا‬meٝ‫ا‬hme ٍ‫ا‬ ٙ‫ٝٛز‬form: ً‫االر‬ ً٘‫رؼ‬ 1-Variableٍ‫ا‬ ًٛٝ :variableَ‫ٓض‬ ‫ػٍِٜب‬ َٔ‫ع٘ؼ‬ ً‫اُز‬ahmed 2-Offsetٍ‫ا‬ ‫ػذد‬ ًٛٝ :characters( ‫ع٘زغبِٜٛب‬ ً‫اُز‬ٍ‫ا‬ ‫ثذاٌخ‬ ٖٓvariable‫ٝٛزا‬ ) ً‫ؽشك‬ ًِ‫ػ‬ ٍٞ‫ظ‬‫اُؾ‬ ‫اسدٗب‬ ‫ارا‬ ‫اٗ٘ب‬ ً٘‫ٌؼ‬“me”ً‫ؽشك‬ َٛ‫ٗزغب‬ ٕ‫ا‬ ‫ٌغت‬“ah”ٌٌٕٞ ‫كجزُي‬ ٍ‫ا‬offset = 2 3-Lengthٍ‫ا‬ ‫ػذد‬ ٞٛٝ :charactersٍ‫ا‬ ٖٓ ‫ع٘غزخشعٜب‬ ً‫اُز‬variable‫اسدٗب‬ ‫كبرا‬ ً‫ؽشك‬ ‫اعزخشاط‬“me”ٍ‫ا‬ ٕ‫كب‬length=2 ‫ؽشٝف‬ ‫اعزخشاط‬ ‫اسدٗب‬ ‫كبرا‬“med”ٍٖٓ‫ا‬variable : ahmed: ًُ‫ًبُزب‬ ٌٕٞ‫عز‬ ‫ظٍـخ‬ُ‫ا‬ ٕ‫كب‬ variable:OFFSET:LENGTH ahmed:1:3 #VARIABLE ٍ‫ا‬ ٙ‫ٛز‬ ّٞ‫رو‬ ‫ظبس‬‫ثبخز‬formٍ‫ا‬ ‫ػذد‬ ‫ثؼشع‬charactersٍ‫ا‬ ‫ٜٓ٘ب‬ ٌٕٞ‫رز‬ ً‫اُز‬value
  • 147. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 146 RE-ASSIGNING PARAMETERS WITH SET ‫االٓش‬ ٖ‫ػ‬ ‫عبثوب‬ ‫رؾذص٘ب‬setٍ‫ا‬ ‫ػشع‬ ً‫ك‬ ّ‫ٌغزخذ‬ ‫اُزي‬shell variablesٚٓ‫ع٘غزخذ‬ ‫ٌُٝ٘٘ب‬ ، ‫اخش‬ ٌَ‫ثش‬ ٕ‫اال‬ ٍ‫كب‬set commandَٔ‫ػ‬ ً‫ك‬ ّ‫ٌغزخذ‬ ٕ‫ا‬ ٌٌٖٔassignَُparameters ٍ‫ا‬ ّٞ‫ٌو‬script‫ثوشاء‬ ًُ‫اُزب‬3 parametersْٜ‫ٝػشػ‬ ًٌِ ‫ًٔب‬ ‫اُ٘زٍغخ‬ ٌٕٞ‫ٝر‬ ‫ٝػؼ٘ب‬ ‫ارا‬ ‫ٓبرا‬ ٌُٖٝsetٍ‫ا‬ ً‫ك‬scriptًٌِ ‫ًٔب‬
  • 148. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 147 ًُ‫ًبُزب‬ ‫اُ٘زٍغخ‬ ‫ظجؼ‬‫كغز‬ ‫كٔبرا‬? ‫ؽذس‬ ٍ‫ا‬ ّ‫هب‬ ٕ‫ا‬ ‫ثؼذ‬script‫ظٍض‬‫ثزخ‬$1, $2, $3ًُ‫ا‬one, two, three‫هبٓذ‬ ،set‫ظٍض‬‫رخ‬ ‫ثبػبدح‬ ٍ‫ا‬$1, $2, $3ًُ‫ا‬a, b, c EXPLAINING THE DEFAULT FIELD SEPARATOR FIELD - IFS ٍ‫ا‬ ٖ‫ػ‬ ‫اُغبثن‬ ً‫ك‬ ‫ؼب‬ٌ‫ا‬ ‫رؾذص٘ب‬IFS: input field separatorٍ‫ا‬ ًٛٝdelimiterٍ‫ثب‬ ‫اُخبطخ‬ cut command ً٘‫ٌؼ‬ ‫ٝٛزا‬(space and tab and new line)‫ؽشٌن‬ ٖ‫ػ‬ ‫رـٍٍشٛب‬ ٌٌٖٔ ٌُٖٝ IFS=”,” ٍ‫ا‬ ٙ‫ٛز‬ ‫رـٍٍش‬ ٌٌٖٔ ٌُٖٝvalue‫ٓغ‬ َٓ‫اُزؼب‬ ‫ػ٘ذ‬script‫ؽشٌن‬ ٖ‫ػ‬ ‫ٝرُي‬ ‫كوؾ‬ ٍٖ‫ٓؼ‬ (IFS=',';script.sh) ٌٖ‫ٓغزذٌش‬ ٍٖ‫هٞع‬ ‫ٝعٞد‬ ‫ٝالؽع‬()ً‫ك‬ ْ‫عٍز‬ ‫اُزـٍٍش‬ ‫ٛزا‬ ٕ‫ا‬ ًِ‫ػ‬ ٍ‫ٌذ‬ ‫ٝٛزا‬subshell‫كوؾ‬ ٍ‫ا‬ ً‫ك‬ ‫ٍُٝظ‬shellً‫اُشئٍغ‬ٍ‫ا‬ ‫رزـٍش‬ ُٖٝIFS‫االطٍِخ‬ SETTING VARIABLES AS "READONLY" ٍ‫ا‬ ‫ٛزا‬ ً‫ك‬ ‫ٝاخٍشا‬chapterٍ‫ا‬ ٍٖ‫ظ‬‫رؾ‬ ‫ًٍلٍخ‬ ٖ‫ػ‬ ‫ع٘زؾذس‬variable‫ٝعؼِٜب‬readonly‫ثؾٍش‬ ٍ‫ا‬ ‫اؿِوذ‬ ‫ارا‬ ‫اال‬ ‫رـٍٍشٛب‬ ٌٌٖٔ ‫ال‬shellَٔ‫ثؼ‬ ‫هٔذ‬ ٝ‫ا‬kill‫ُٜب‬ :‫ظٍـخ‬ُ‫ا‬ ٙ‫ٛز‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬
  • 149. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 148 Readonly NAME=ahmed ٍ‫ا‬ ٕ‫كب‬ ‫ٝثزُي‬variable NAMEٍ‫ا‬ ‫رـٍٍش‬ ٌٌٖٔ ُٖvalueَٔ‫ػ‬ ً‫ؽز‬ ٝ‫ا‬ ‫ثٜب‬ ‫اُخبطخ‬unset‫ُٜب‬
  • 150. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 149 CHAPTER 12. BITS AND PIECES – TYING UP THE LOOSE ENDS THE EVAL COMMAND ٍ‫ا‬ ‫ٛزا‬ ‫ثز٘لٍز‬ ‫هٔ٘ب‬ ‫ارا‬commandٍ‫ا‬ ‫ٝاعزخذٓ٘ب‬pipe “|” ls |wc –l ٌٌٖٔ َٛ ٌٍُٖٝ‫ا‬ ‫ٝػغ‬“|”ً‫ك‬variableٍ‫ثب‬ ُٚ‫اعزجذا‬ ٌٌٖٔ ‫ثؾٍش‬variable? ًُ‫ًبُزب‬ PIPE=‟|‟ ls $PIPE wc -l ‫رُي‬ ‫رٞػؼ‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ُ‫ٝا‬ ، ‫ال‬ ًٛ ‫االعبثخ‬ ٍ‫ا‬ ٕ‫ال‬sellَٔ‫ثؼ‬ ّٞ‫رو‬variable expansionٍ‫ا‬ ‫ثز٘لٍز‬ ّٞ‫رو‬ ْ‫ص‬ ‫اٝال‬ls commandٕ‫ا‬ ٕٝ‫ثذ‬ َُ ‫اُغذٌذح‬ ‫اُؤٍخ‬ ‫هشاءح‬ ‫ٌؼٍذ‬variableْ‫ص‬‫ث‬ ّٞ‫ٌو‬ٖ‫ػ‬ ‫بُجؾش‬fileًٔ‫ٌغ‬„|‟ًٔ‫ٌغ‬ ‫ٝاخش‬wc، ٍ‫ا‬ ‫ظٜش‬ ‫ُزُي‬error : No such file or directory ٍ‫ا‬ ‫ٝظٍلخ‬ ً‫رؤر‬ ‫ٝٛ٘ب‬eval commandٍ‫ا‬ ‫هشاء‬ ‫ثبػبدح‬ ّٞ‫ٌو‬ ٜٞ‫ك‬command lineٍ‫ا‬ ٍ‫اعزجذا‬ ‫ثؼذ‬ variable
  • 151. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 150 : ‫اخر‬ ‫مثال‬ ٍ‫ا‬ ٕ‫ا‬ ‫ٗالؽع‬evalٍ‫ا‬ ‫ثزشعٔخ‬ ّ‫هب‬pipe‫ؼب‬ٌ‫ا‬ُ‫ا‬ ً‫ك‬ ‫ٝالؽع‬ ،ٍ‫ا‬ ‫ٗلزٗب‬ ‫ػ٘ذٓب‬ ‫اٗ٘ب‬ ‫اُزبٍُخ‬ ‫ظٞسح‬ commandٕٝ‫ثذ‬echo‫ظٜش‬error ‫ٝػؼ٘ب‬ ‫ػ٘ذٓب‬ ٌُٖٝeval : ‫اخر‬ ‫مثال‬ ‫ُذٌ٘ب‬ ٕ‫ًب‬ ‫ارا‬x=100ٝptr=x ٍ‫ا‬ ‫هٍٔخ‬ ‫ػشػ٘ب‬ ‫كبرا‬ptrٍ‫ا‬ ّ‫ثبعزخذا‬echo‫عزغبٝي‬ ‫كغ٘غذٛب‬x‫ٍُٝظ‬100
  • 152. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 151 ٍ‫ا‬ ‫ٗؼشع‬ ًٌُٝptr=100ًُ‫اُزب‬ ٌَ‫اُش‬ ًِ‫ػ‬ ‫اُ٘زٍغخ‬ ‫ؼغ‬ٗ ٕ‫ا‬ ‫ٌغت‬ eval echo $x ٖ‫ػ‬ ‫ثبُزؼٌٞغ‬ ّٞ‫ع٘و‬ ‫اخش‬ ً٘‫ثٔؼ‬ ٝ‫ا‬xٍ‫ا‬ ً‫ك‬form eval echo $$ptr ًُ‫ًبُزب‬ ‫ظٜشد‬ ‫اُ٘زٍغخ‬ ٕ‫ا‬ ‫ع٘غذ‬ ‫ٌُٝ٘٘ب‬ ‫ٝػؼ٘ب‬ ‫ػ٘ذٓب‬ ‫اٗ٘ب‬ ‫ع٘الؽع‬$$ٍ‫ا‬ ‫ثزشعٔخ‬ ّ‫هب‬echo $$ٍ‫ا‬ ‫اٜٗب‬ ًِ‫ػ‬PIDَ‫ظ‬‫ٗل‬ ٕ‫ا‬ ‫كٍغت‬ ‫ارا‬ ، ٍ‫ا‬ ٍٖ‫ث‬$ّ‫ثبعزخذا‬ ‫ٝاُضبٍٗخ‬ ًُٝ‫اال‬{} eval echo ${$ptr} ‫ٝٛ٘ب‬ٍ‫ا‬ ٕ‫كب‬shellٍ‫ا‬ ْٜ‫رل‬$ٍ‫ا‬ ‫خبسط‬ ‫أُٞعٞدح‬{}‫اٜٗب‬ ًِ‫ػ‬special character‫رغزطٍغ‬ ‫كال‬ ٍ‫ا‬echoْ‫رزشع‬ ٕ‫ا‬formًِ‫ػ‬ ‫رؾزٞي‬2 special characters‫ا‬ ٙ‫ٛز‬ ٕ‫ال‬ ،formً٘‫رؼ‬ ${$ptr}ً٘‫رؼ‬ ‫ٝال‬${x} ‫ٝػغ‬ ‫ٌغت‬ ‫ُزُي‬“”ٍ‫ا‬ َ‫هج‬$ eval echo ${$ptr}
  • 153. ‫اُذػـــــــــــــــــبء‬ ‫طبُؼ‬ ٖٓ ‫ر٘غٞٗب‬ ‫ال‬ Translated By:AHMED GAMIL 152 RUNNING COMMANDS IN THE BACKGROUND USING& ٍ‫ا‬ ٕ‫ال‬linuxٞٛmulti-task operating systemٖٓ ‫اًضش‬ ‫ر٘لٍز‬ ٌٍٖٔ‫ك‬commandً‫ك‬ ‫اُٞهذ‬ ‫ٗلظ‬ ٍ‫ا‬ َ‫ٗغؼ‬ ٕ‫ا‬ ‫ٌغت‬ ‫رُي‬ ْ‫ٌز‬ ًٌُ ٌُٖٝprocessًٌُ ‫اُخِلٍخ‬ ً‫ك‬ َٔ‫رؼ‬ ‫ر٘لٍزٛب‬ ْ‫ٌز‬ ً‫اُز‬ ًِ‫ػ‬ َ‫ظ‬‫ٗؾ‬ ٕ‫ا‬ ‫ٗغزطٍغ‬curserٍ‫ا‬ ‫ٝٗ٘لز‬ ‫عذٌذ‬process‫اُغذٌذح‬ ‫ا‬ ‫اػبكخ‬ ‫ؽشٌن‬ ٖ‫ػ‬ ‫رُي‬ ْ‫ٌٝز‬‫ُشٓض‬“&”ٍ‫ا‬ ‫ثغبٗت‬commandًُ‫ًبُزب‬ ٍٝ‫اال‬ find / -name "ahmed" & ٍ‫ا‬ ‫ظٜٞس‬ ‫ٝٗالؽع‬PIDٍ‫ثب‬ ‫اُخبص‬process ٍ‫ا‬ ٙ‫ٛز‬ ‫ر٘لٍز‬ ٌٌٖٔ ‫ٜٓ٘ب‬ ‫ٗزؤًذ‬ ٕ‫ا‬ ‫اسدٗب‬ ‫ٝارا‬form echo $!