עקרונות תכנות במדריך זה נעסוק באספקט התכנותי יותר של PowerShell, לכן נלמד את עקרונות התכנות הבסיסיים באמצעות PowerShell. אין צורך לכתוב את הקוד כרגע, בפרק הבא ניראה כיצד אנו כותבים סקריפט פשוט שממש את העקרונות הנ"ל.
הכרזה על משתנים: משתנה הוא מקום בזיכרון של המחשב אשר מכיל מידע אשר יכול לשנות את ערכו בזמן הריצה באמצעות פקודות הניתנות לו. לכל משתנה אנו נותנים שם (כמו למשל X) אשר מאפשר לנו להתייחס אליו. ב-PowerShell אנו מכריזים על משתנים באופן הבא:
$x = 10 $y = 15 $sum = $x + $y
הסימן $ מציין משתנה ואחריו מופיע שמו של משתנה. בדוגמא הנ"ל הכרזנו על שלושה משתנים: $x, $y, $sum . לכל משתנה נתנו ערך באמצעות סימן ה-"=". המשתנה sum$ מכיל את פעולת החיבור המתמטית של המשתנים $x ו-$y.
משתנים לא מכילים רק מספרים, הם יכולים להכיל גם מחרוזות (צירוף של אותיות) ואובייקטים שונים. בנוסף ישנם משתנים המכילים מערכים. משתנה שהוא מערך בעצם אוגר בתוכו כמה משתנים אשר ניתן להתייחס אליהם באמצעות אינדקס מסויים. אנו מכריזים על מערך באופן הבא:
$a = 10, 20, 30
כאשר אנו רוצים להתייחס למשתנה מסוים בתוך המערך אלינו להתייחס אל האינדקס שלו. אינדקס מתחיל מ-0, ז"א אם נרצה להתייחס למספר 10 במערך על האינדקס להיות 0. נתייחס למשל למשתנה השלישי במערך כך: $a[2]. תנאים: עקרון תכנות זה הוא אחד מהבסיסים והחשובים. עיקרון זה מאפשר לסקריפט שלנו לרוץ על פי תנאים מסוימים שאנו נותנים לו. לדוגמא – אם המשתנה $sum קטן יותר מ-30, נציג למשתמש את ההודעה ""Cheap ואם המשתנה גדול מ-30 נציג למשתמש את ההודעה "Expensive".
כעת ניראה כיצד אנו כותבים את קטע הקוד עם שילוב של הדוגמא הקודמת:
$x = 10
$y = 15
$sum = $x + $y
if ($sum -lt 30) {
"Cheap"
}
else {
"Expensive!"
}
שימו לב שהפעם הוספנו את תנאי. תנאי תמיד מתחיל עם המילה if. לאחר מכן, הסוגריים מכילות את התנאים עצמו. שימו לב שהסוגריים שלנו מכילות את הקטע הבא:
($sum –lt 30)
המילה "-lt" (או ליתר דיוק Operator) בעצם אומרת "קטן מ-" (Lower Then) ואחריה מופיעה המספר שנרצה להשוות (30). הסוגריים המסולסלים מכילים את הקוד שנרצה שיבוצע אם התנאי נכון. שימו לב שאחר כך מופיע קטע הקוד הבא:
else {
"Expensive!"
}
המילה "else" (אחרת) אומרת למחשב כי אם התנאי הנ"ל אינו נכון, תבצע את קטע הקוד שמתחת (המופיע בתוך הסוגריים המסולסלים של else). שימו לב – ב-PowerShell כל מחרוזת שנשים בתוך גרשיים (ללא שום פקודה) באופן אוטומטי יופיע כפלט למשתמש. אם נריץ את הסקריפט, ניראה כי יופיע לנו פלט של "Cheap". כעת אם נשנה את ערכם של אחד הערכים (x$ או y$) ולאחר מכן סכומם ביחד יעבור את ה-30 יופיע לנו פלט של "Expensive!".
לולאות: עקרון תכנות זה מאפשר לנו לבצע פעולות החוזרות על עצמן עד שתנאי מסוים יתקיים. נניח ונרצה להדפיס 30 פעמים "Hello world", באמצעות לולאה, נעשה זאת בצורה הבאה:
$x = 0
do {
"Hello world"
$x = $x + 1
} while ($x -ne 30)
הכרזנו על המשתנה $x. לאחר מכן יצרנו לולאה מסוג do…while אשר אומרת כי כול עוד מתקיים התנאי המופיע בתוך הסוגריים של ה-while על שורות הקוד בתוך הלולאה להמשיך ולהתבצע. הלולאה שלנו מבצעת את הדברים הבאים:
- מדפיסה על המסך את המילה "Hello world".
- מעלה את ערכו של $x באחד.
הלולאה בודקת בכל מחזור אם המשתנה $x אינו שווה ל-30. היא עושה זאת באמצעות האופרטור הנקרא Not Equal הנהוג לכתוב בצורה –ne . ניתן לכתוב לולאות בצורות רבות – חלקן מקלות עלינו בתהליך הכתיבה וחלקן מקשות עלינו. ניתן לקרוא על לולאות PowerShell בעמוד הבא.
נניח ונרצה לכתוב סקריפט אשר מקבל מספר לא מוגבל של מספרים מהמשתמש ומוציא פלט של סכום כול המספרים שהמשתמש הכניס. כיצד נכתוב סקריפט כזה? הסקריפט יכיל לולאה הממשיכה לקבל מהמשתמש ערכים עד שהמשתמש מקליד "stop".הסקריפט שלנו יראה כך:
$result = 0
do {
$number = Read-Host "Please write a number or type 'stop' to stop: "
if ($number -ne "stop") {
$result = $result + $number
}
else {
break
}
} while ($true)
"The sum of all the numbers you entered is: $result"
נסביר מה הולך כאן:
- המשתנה $result מכיל את התוצאה הכוללת של כל הקלט שהמשתמש הכניס. כל פעם שהמשתמש מוסיף עוד קלט, משתנה זה מחבר אליו את הערך החדש עם התוצאה הקודמת. הערך ההתחלתי שלו הוא 0.
- המשתנה $number מכיל את הקלט שהמשתמש הכניס. שימו לב לתנאי שהוספנו, תנאי זה בודק אם הקלט שהמשתמש הכניס אינו שווה ל-stop. אם התנאי מתקיים, אנו מוסיפים למשתנה $result את התוצאה שהמשתמש הכניס. אם התנאי לא מתקיים אנו משתמשים בפקודה break אשר אומרת לסקריפט שלנו לצאת מהלולאה.
- שימו לב שהתנאי להתקיימות הסקריפט שלנו בתוך ה-while הוא $true או במילים אחרות – אין סוף. מפני שהתנאי הוא תמיד "אמת" ($true היא מילה שמורה שבעצם אומרת פסוק אמת). לכן, בכדי לצאת מתוך הלולאה כמו שציינו כבר, השתמשנו בפקודה break.
והינה הסקריפט שלנו בפעולה:
כמובן שהיה ניתן לכתוב את הסקריפט בצורה הרבה יותר חכמה ופשוטה, אך לשם הכרת הפקודה break בנינו את הסקריפט כך.
תפיסת שגיאות: לא תמיד מה שאנחנו רוצים מצליח. במקרים מסוימים הסקריפטים שלנו יכשלו כאשר יגיעו לשורת קוד מסוימת. במקרים כאלה אנו יודעים כי עלינו "לתפוס" את השגיאות ולטפל בהן.
נניח ונרצה להזיז קובץ שבמקרים מסוימים עלול להיות בשימוש. כיצד נוכל "לתפוס" את השגיאה, לדווח למשתמש על כך ולהמשיך בשאר הפעולות שלנו מבלי שכל הסקריפט שלנו ייכשל? בדיוק כך:
try {
Move-Item $file $destination
"Succesfully moved $file!"
}
catch {
"Failed to move $file!"
}
זהו, כזה פשוט וכל כך יעיל.
הערות: נהוג לשים הערות במקומות מסוימים בסקריפט בכדי שנוכל להסביר לעצמנו כשנחזור לסקריפט מאוחר יותר כיצד האלגוריתם עובד או מה משתנה מסוים מביע. הערות אנו מביעים באמצעות "#" (סולמית) בתחילת השורה. דוגמא לכתיבת הערה נראית כך:
#Contains the sum of all user input
$sum = 0