Skip to main content

מדריך למתחילים - תנאים ומשתנים

מדריך Java - פרק 1 - משתנים (אַפּרִיל 2025)

מדריך Java - פרק 1 - משתנים (אַפּרִיל 2025)
Anonim

מבוא

ברוכים הבאים לחלק השלישי של "המדריך למתחילים כדי באש". אם החמצת את שני המאמרים הקודמים אז אתה בטח רוצה לדעת מה עושה את המדריך הזה שונה מדריכים אחרים BASH scripting.

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

תוכל לראות את שני המדריכים הראשונים על ידי ביקור בכתובת:

  • מדריך למתחילים באש - שלום עולם
  • מדריך למתחילים כדי BASH - פרמטרים קלט

אם אתה חדש ב BASH scripting אני ממליץ לקרוא את שני המדריכים הראשונים לפני שתמשיך עם זה.

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

התקן rsstail

כדי לעקוב אחר מדריך זה יהיה עליך להתקין יישום שורת פקודה בשם rsstail אשר משמש לקרוא הזנות RSS.

אם אתה משתמש בסוג ההפצה מבוסס דביאן / אובונטו / מנטה, הבא:

sudo apt-get להתקין rsstail

עבור Fedora / CentOS וכו 'הקלד את הדברים הבאים:

yum להתקין

עבור openSUSE הקלד את הדברים הבאים:

להתקין

הצהרת IF

פתח מסוף וצור קובץ בשם rssget.sh על ידי הקלדת הדברים הבאים:

סנו ננו rssget.sh

בתוך עורך nano הזן את הטקסט הבא:

#! / bin / bashrsstail -u http://z.about.com/6/o/m/linux_p2.xml;

שמור את הקובץ על-ידי הקשה על CTRL ו- O ולאחר מכן על-ידי הקשה על CTRL ו- X.

הפעל את התסריט על ידי הקלדת הפרטים הבאים:

sh rssget.sh

הסקריפט יחזיר רשימה של כותרות מתוך עדכון ה- RSS של linux.about.com.

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

פתח את הסקריפט rssget.sh בננו שוב וערוך את הקובץ כך:

#! / bin / bash

אם $ 1 = "verbose"לאחר מכן rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;Fi

הפעל את הסקריפט שוב ​​על ידי הקלדת הפרטים הבאים:

sh rsget.sh verbose

הפעם הזנת RSS חוזר עם כותרת, קישור ותיאור.

בואו ננתח את הסקריפט בפירוט:

#! / Bin / bash מופיע בכל סקריפט שאנו כותבים. השורה הבאה בעצם מסתכלת על פרמטר הקלט הראשון שסופק על ידי המשתמש ומשווה אותו למילה "verbose". אם פרמטר הקלט והמילה "verbose" מתאימים בין השורות לאחר מכן ו Fi רצים.

התסריט הנ"ל הוא ללא ספק פגום. מה קורה אם לא מספקים פרמטר קלט בכלל? התשובה היא שאתה מקבל שגיאה לאורך השורה של מפעיל לא צפוי.

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

השתמש nano שוב כדי לערוך את הקובץ rssget.sh ולשנות את הקוד כדלקמן:

#! / bin / bash

אם $ 1 = "verbose"לאחר מכן rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml;Fi

שמור את הקובץ והפעל אותו על ידי הקלדת הפרטים הבאים:

sh rsget.sh verbose

תופיע רשימה של כותרים, תיאורים וקישורים. עכשיו להפעיל אותו שוב כדלקמן:

sh כותרות rssget.sh

הפעם מופיעה רק רשימה של כותרים.

החלק הנוסף של התסריט הוא על הקו 4 ומציג את Other הצהרה. בעיקרון את התסריט עכשיו אומר אם הפרמטר הראשון הוא המילה "verbose" לקבל את התיאור, קישורים ותארים עבור עדכון RSS, אבל אם הפרמטר הראשון הוא כל דבר אחר רק לקבל רשימה של כותרות.

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

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

עריכת סקריפט rssget.sh שלך כדי לראות את הדברים הבאים:

#! / bin / bash

אם $ 1 = "הכל"לאחר מכן rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;elif $ 1 = "תיאור"לאחר מכן rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml;Fi

החלטתי להיפטר מן המילה verbose והחליפו את זה עם כל. זה לא החלק החשוב. הסקריפט לעיל מציג אליף אשר היא דרך קצרה לומר ELSE IF.

עכשיו התסריט עובד כדלקמן. אם אתה מפעיל sh rssget.sh הכל ואז אתה מקבל תיאורים, קישורים ותארים. אם במקום זאת אתה פשוט לרוץ sh תיאור rssget.shאתה רק לקבל כותרות ותיאורים. אם אתה מספק כל מילה אחרת תקבל רשימה של כותרים.

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

להלן דוגמה המציגה כיצד הצהרות IF מקוננות פועלות:

#! / bin / bash

אם $ 2 = "aboutdotcom"לאחר מכן אם $ 1 = "הכל" לאחר מכן rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "תיאור" לאחר מכן rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml; FiOther אם $ 1 = "הכל" לאחר מכן rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "תיאור" לאחר מכן rsstail -d -u http://lxer.com/module/newswire/headlines.rss Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml; FiFi

אתה מוזמן להקליד את כל זה אם אתה אוהב או להעתיק ולהדביק אותו לקובץ rssget.sh שלך.

התסריט לעיל מציג פרמטר 2 אשר מאפשר לך לבחור או "about.com" או "lxer.com" עדכון RSS.

כדי להפעיל אותו אתה מקליד את הדברים הבאים:

sh rssget.sh כל aboutdotcom

או

sh rssget.sh כל lxer

אתה יכול כמובן להחליף את כל עם תיאורים או כותרות לספק רק תיאורים או רק כותרות.

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

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

תארו לעצמכם שרציתם להוסיף עדכון RSS נוסף כגון User Everyday Linux או Linux Today? התסריט יהפוך ענק ואם תחליט שאתה רוצה את ההצהרה הפנימית IF לשנות אתה צריך לשנות את זה במספר מקומות.

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

בואו נסתכל עכשיו על תיקון הבעיה של אנשים הזנת פרמטרים duff. לדוגמה בתסריט לעיל אם המשתמש מזין משהו אחר מאשר "aboutdotcom" כמו הפרמטר השני ואז רשימה של מאמרים להופיע מתוך הזנת RSS מ LXER ללא קשר אם המשתמש להזין lxer או לא.

בנוסף, אם המשתמש אינו מזין את "all" או "description" כפרמטר 1 אז ברירת המחדל היא רשימה של כותרות אשר יכול או לא להיות מה המשתמש התכוון.

תסתכל על התסריט הבא (או להעתיק ולהדביק אותו לקובץ rssget.sh שלך.

#! / bin / bash

אם $ 2 = "aboutdotcom" || $ 2 = "lxer"לאחר מכן אם $ 1 = "all" || $ 1 = "תיאור" || $ 1 = "כותרת" לאחר מכן אם $ 2 = "aboutdotcom" לאחר מכן אם $ 1 = "הכל" לאחר מכן rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "תיאור" לאחר מכן rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi Other אם $ 1 = "הכל" לאחר מכן rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "תיאור" לאחר מכן rsstail -d -u http://lxer.com/module/newswire/headlines.rss Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi Fi FiFi

הדבר הראשון שיש לציין הוא כי התסריט הוא עכשיו מקבל די גדול ואתה יכול לראות במהירות איך מתוך שליטה מקוננות הצהרות IF יכול להיות.

הקטע החשוב בתסריט זה הוא משפט IF הצהרה על סעיף 2 בשורה 4.

|| מייצג OR. אז הקואם $ 2 = "aboutdotcom" || $ 2 = "lxer"בודק אם הפרמטר השני שווה ל "aboutdotcom" או "lxer". אם זה לא אז ההצהרה IF הושלמה כי אין Other הצהרה החיצוני ביותר אם.

בדומה לקו 4 הקו אם $ 1 = "all" || $ 1 = "תיאור" || $ 1 = "כותרת"בודק אם הפרמטר 1 שווה ל "all" או "description" או "title".

עכשיו אם המשתמש פועלsh rssget.sh תפוחי אדמה גבינהדבר לא מוחזר ואילו לפני שהם היו מקבלים רשימה של כותרות מ LXER.

ההפך מ | | J && האופרטור & && מייצג ו.

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

#! / bin / bash

אם $ # -eq 2לאחר מכן

אם $ 2 = "aboutdotcom" || $ 2 = "lxer" לאחר מכן אם $ 1 = "all" || $ 1 = "תיאור" || $ 1 = "כותרת" לאחר מכן אם $ 2 = "aboutdotcom" לאחר מכן אם $ 1 = "הכל" לאחר מכן rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "תיאור" לאחר מכן rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi Other אם $ 1 = "הכל" לאחר מכן rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "תיאור" לאחר מכן rsstail -d -u http://lxer.com/module/newswire/headlines.rss Other rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi Fi Fi FiFi

הקטע היחיד הנוסף בתסריט זה הוא עוד משפט IF חיצוני כדלקמן:אם $ # -eq 2. אם אתה קורא את המאמר על פרמטרים קלט תוכלו לדעת כי # $ מחזירה את המספר של מספר פרמטרים קלט. -Eq עומד שווה. ההצהרה IF ולכן בודק שהמשתמש נכנס 2 פרמטרים ואם הם לא זה פשוט יוצא מבלי לעשות שום דבר. (לא ידידותי במיוחד).

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

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

#! / bin / bash

אם $ # -eq 2לאחר מכן מקרה $ 2 ב aboutdotcom) מארז $ 1 ב את כל) rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml ;; תיאור) rsstail -d -u z.about.com/6/o/m/linux_p2.xml ;; כותרת) rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml ;; esac ;; lxer) מארז $ 1 ב את כל) rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss ;; תיאור) rsstail -d -u http://lxer.com/module/newswire/headlines.rss ;; כותרת) rsstail -u http://lxer.com/module/newswire/headlines.rss ;; esac ;; esacFi

ההצהרה במקרה היא דרך יפה יותר של כתיבה אם אחרת אם אחרת אם אחרת.

לדוגמה, ההיגיון הזה

אם פירות = בננותואז זהELSE אם פירות = תפוזיםואז זהELSE אם פירות = ענביםואז זהEND IF

ניתן לכתוב מחדש כמו:

מקרה פירות ב בננות) תעשה את זה ;; תפוזים) תעשה את זה ;; ענבים) תעשה את זה ;;esac

ביסודו של דבר הפריט הראשון אחרי המקרה הוא הדבר שאתה הולך להשוות (כלומר פרי). אז כל פריט לפני סוגריים הוא הדבר שאתה משווה נגד ואם הוא תואם את השורות הקודמות ;; יהיה רץ. משפט מקרה מסתיים עם esac הפוך (וזה במקרה לאחור).

בסקריפט rssget.sh הצהרת המקרה מסירה חלק מהקינון הנורא הזה, אם כי לא ממש משפרת אותו מספיק.

כדי לשפר באמת את התסריט אני צריך להכיר לך משתנים.

עיין בקוד הבא:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"הצג = ""url = ""

אם $ # -lt 2 || $ # -gt 2לאחר מכן echo "use: rssget.sh הכל | תיאור | title aboutdotcom | lxer"; יציאה;Fi

מארז $ 1 ב את כל) הצג = "- d -l -u" ;; תיאור) הצג = "- d -u" ;; כותרת) הצג = "- u" ;;esac

מקרה $ 2 ב aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;;esacrsstail $ $ url להציג;

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

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"הצג = ""url = ""

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

משתנה התצוגה מוגדר כעת בהתאם לבחירת כל, תיאור או כותרת ומשתנה של url מוגדר לערך המשתנה aboutdotcom או לערך המשתנה lxer, תלוי אם בחרת aboutdotcom או lxer.

הפקודה rsstail עכשיו רק צריך להשתמש בערך של תצוגה וכתובת האתר לפעול כראוי.

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

להלן התסריט הסופי עבור הדרכה זו.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"dailylinuxuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"שימוש = "שימוש: rssget.sh הכל | תיאור | כותרת lxer | aboutdotcom |הצג = ""url = ""

אם $ # -lt 2 || $ # -gt 2לאחר מכן echo $ שימוש; יציאה;Fi

מארז $ 1 ב את כל) הצג = "- d -l -u" ;; תיאור) הצג = "- d -u" ;; כותרת) הצג = "- u" ;; *) echo $ שימוש; יציאה; ;;esac

מקרה $ 2 ב aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;; linuxtoday) url = $ linuxtoday; ;; everydaylinuxuser) url = $ everydaylinuxuser; ;; *) echo $ שימוש; יציאה;esac

rsstail $ $ url להציג;

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

סיכום

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

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

בדוק את הדרך כיצד (גלול למטה על פני הקטגוריות כדי לראות רשימה של מאמרים) קטע של linux.about.com כדי למצוא מדריכים שימושיים נוספים מאתחול כפול של Windows ו- Ubuntu כדי להגדיר מכונה וירטואלית באמצעות תיבות GNOME.