איך להעביר טיעונים לסקריפט

פקודות, תחביר ודוגמאות

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

לדוגמה, ייתכן שיהיה סקריפט בשם "stats.sh" שמבצע פעולה מסוימת על קובץ, כגון ספירת המילים שלה. אם אתה רוצה להיות מסוגל להשתמש בסקריפט זה על קבצים רבים, עדיף להעביר את שם הקובץ כארגומנט, כך שתוכל להשתמש באותו תסריט עבור כל הקבצים להיות מעובד. לדוגמה, אם שם הקובץ שיש לעבד הוא "songlist", עליך להזין את שורת הפקודה הבאה:

שיר

ארגומנטים נגישים בתוך script באמצעות המשתנים $ 1, $ 2, $ 3 וכו ', כאשר $ 1 מתייחס לארגומנט הראשון, $ 2 לארגומנט השני, וכן הלאה. זה מודגם בדוגמה הבאה:

FILE1 = $ 1 wc $ FILE1

לקריאה, הקצה משתנה עם שם תיאורי לערך של הארגומנט הראשון ($ 1) ולאחר מכן התקשר אל כלי ספירת המילים ( wc ) על משתנה זה ($ FILE1).

אם יש לך מספר משתנה של ארגומנטים, תוכל להשתמש במשתנה "$ @", שהוא מערך של כל פרמטרי הקלט. זה אומר שאתה יכול להשתמש עבור לולאה כדי iteratively תהליך כל אחד, כפי שמוצג בדוגמה הבאה:

עבור FILE1 ב "$ @" לעשות wc $ FILE1 לעשות

הנה דוגמה לאופן שבו ניתן לקרוא סקריפט זה בארגומנטים משורת הפקודה:

sh stats.sh songlistlist1 השיר

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

sh shatslist '' רשימת שירים 2 '' songlistlist 3 '

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

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

makereport-jsmith -p notebooks -d 10-20-2011 -f pdf

Bash מאפשר פונקציונליות זו עם הפונקציה "getopts". בדוגמה לעיל, אתה יכול להשתמש getopts כדלקמן:

זוהי לולאה בזמן המשתמשת בפונקציה "getopts" ומה שנקרא "optstring", במקרה זה "u: d: p: f:", כדי לחזור דרך הטיעונים. הלולאה בזמן עובר דרך optstring, המכיל את הדגלים שניתן להשתמש בהם כדי להעביר טיעונים, ומקצה את ערך הארגומנט המסופק עבור אותו דגל למשתנה "אפשרות". ההצהרה המקרה מקצה את הערך של המשתנה "אופציה" למשתנה גלובלי שניתן להשתמש בו לאחר קריאת כל הארגומנטים.

את colons ב optstring אומר ערכים נדרשים עבור הדגלים המקביל. בדוגמה שלמעלה כל הדגלים מלווים במעי הגס: "u: d: p: f:". כלומר, כל הדגלים צריכים ערך. אם, למשל, דגל "ד" ו "F" לא היה צפוי להיות ערך, optstring יהיה "u: dp: f".

נקודתיים בתחילת האופטיסטרינג, למשל "u: d: p: f:", יש משמעות שונה לחלוטין. זה מאפשר לך להתמודד עם דגלים שאינם מיוצגים optstring. במקרה זה הערך של המשתנה "אופציה" מוגדר "?" ואת הערך של "OPTARG" מוגדר דגל לא צפוי. מאפשר לך להציג הודעת שגיאה מתאימה המודיעה למשתמש על הטעות.

ארגומנטים שאינם מקודמים על ידי דגל מתעלמים על ידי getopts. אם הדגלים שצוין באופטיסטרינג אינם מסופקים בעת קריאת הסקריפט, דבר לא קורה, אלא אם תטפל במיוחד במקרה זה בקוד שלך. כל הארגומנטים שלא מטופלים על ידי getops עדיין יכולים להיתפס עם המשתנים הרגילים $ 1, $ 2 וכו '.