פורסם 2012 באוקטובר 2313 שנים שלום לכולם,יש לי מספר רב של קבצים עם סיומת LOG.בתוך הקבצים יש לי משהו שנראה כך:ic,6,PM___,"port_rcv_crc_error : 5982 )"אני רוצה שהסקריפט יציג לי את המספר המקסימלי שקיים בפורט 6 (כפי שאפשר לראות יש לי 5982 טעויות בפורט 6.כיצד ניתן לכתוב זאת?תודה. לעונים.
פורסם 2012 באוקטובר 2313 שנים #!/bin/bashlet max=0for filename in `ls *LOG`do let temp=$((`sed -e 's/error : /\nINTKEY/g;s/ )/\n/g' $filename |grep INTKEY |sed -e 's/INTKEY//g'`)) if [ $temp -gt $max ] then let max=$temp fidoneecho $max
פורסם 2012 באוקטובר 2413 שנים מחבר תודה רבה,אבל:syntax error near unexpected token `doנראה שיש בעיה בפסיק שלפני ה FOR?ומה הטעם ב BIN/BASH? גם זה מדווח כERROR
פורסם 2012 באוקטובר 2413 שנים תחשוב שיש לנו שפת תכנות שבה אנחנו רוצים לכתוב סקריפט כזה :תחשוב שיש לנו שפת תכנות שבה אנחנו רוצים לכתוב סקריפט כזה :if "error > 16"command1command2אנחנו יכולים לכתוב את זה אבל למה אנחנו מתכוונים ? ניתן להבין דבר כזה ב 2 צורות :אם מספר שגיאה גדול מ 16 פקודה א ופקודה ב (אם התקבל מספר שגיאה 1 לא תתקיים אף פקודה)אם מספר שגיאה גדול מ 16 פקודה א. בכל מקרה פקודה ב (אם התקבל מספר שגיאה 1 תתקיים פקודה ב)לכן אנחנו רוצים דרך שבה אנחנו נאמר למחשב מה הוא חלק מה "אם" ומה מגיע בלי קשר. ב C/C++, PHP וכו משתמשים אם {} :if "error > 16"{command1}command2if "error > 16"{command1command2}בגלל זה פקודות כמו if ו for הם לא סתם פקודה בודדת אלא היא מערכת של פקודות - כי אחריי if חייבים "חלקים נוספים" כדיי לקבוע איזה חלק מהפקודות הבאות שייך ל if ואיזה לאב bash לא משתמשים אם {} אלא פשוט "מילות מפתח" שהן כמו פקודות נלוות ל if. המילות האלה הן then בשביל ההתחלה ו fi בשביל הסוף. כלומר ב bash הדוגמאות ייראו כך :if "error > 16"thencommand1ficommand2if "error > 16"thencommand1command2fiבאותה צורה לפקודת if יש גם אפשרות של else (שלא נמצאת בסקריפט הזה, אתה מנחש מה היא עושה). ול for יש את ה "פקודות הנלוות" do ו doneכל פקודה כזאת היא לא חוקית בלי הפקודות הנלוות. למשל אם תכתוב do סתם כך בלי for (כמו מה שקרה כאן כנראה) הפקודה do לא תתקבלב bash ניתן לכתוב (או העתק הדבק) את הפקודות לתוך שורת הפקודה, או לכתוב אותן מראש בקובץ סקריפט. הפקודות עצמן אותו דבר אבל ההתייחסות אליהן היא שונה :כשאתה כותב פקודות לשורת הפקודה, המחשב מתייחס לכל פקודה בנפרד - אין לו שמץ מה היתה הפקודה שכתבת והקשת Enter בפעם הקודמת. אם אתה כותב פקודת for אתה חייב שה for והפקודות הנלוות המתחייבות מכך - do ו done - יינתנו כחלק מאותה פקודה ארוכה כדיי שהמחשב יראה את ה "תמונה השלמה"כשאתה כותב קובץ סקריפט המחשב פותח את הקובץ ויש לו את כל הפקודות שם, לכן כותבים את ה for do done בשורות נפרדות (מותר לכתוב בשורה אחת כמו מקודם אבל לא עושים את זה)כלומר אותן פקודות בדיוק ייראו כך בשורת הפקודה בכתיבה ידנית :if "error > 16" ; then command1 ; command2 ; fiוכך אם הן כתובות בקובץ :if "error > 16"thencommand1command2fiאם אתה רוצה לכתוב את הסקריפט שלנו ידנית בשורת הפקודה יש להתאים אותו לכך :let max=0for filename in `ls *LOG` ; do let temp=$((`sed -e 's/error : /\nINTKEY/g;s/ )/\n/g' $filename |grep INTKEY |sed -e 's/INTKEY//g'`)) ; if [ $temp -gt $max ] ; then let max=$temp ; fi ; doneecho $maxעכשו מה זה #!/bin/bashזה לא פקודה. בשורת הפקודה # זה סימן של התעלמות כלומר אם תכתוב את זה לשורת הפקודה זה לא יעשה כלום. גם בקובץ סקריפט # זה סימן להתעלמות לכן ניתן לכתוב הערות אל ידיי #. ה #!/bin/bash לא מתבצע כשאתה מריץ את קובץ הסקריפטהתפקיד שלו הוא אחר :אתה יכול לכתוב סקריםטים לא רק ב bash אלא גם ב perl, python.... אבל את כולם אתה תריץ מתוך bash. השורה הזאת #!/bin/bash אומרת לאיזה תוכנה יש לקרוא כדיי לבצע את הסקריפט. בסקריפט perl למשל היא תיראה כך #!/usr/local/bin/perl
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.