מעוניין לכתוב סקריפט לחיפוש ערך מקסימלי - לינוקס, Mac ומערכות הפעלה אחרות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מעוניין לכתוב סקריפט לחיפוש ערך מקסימלי


chenrp

Recommended Posts

שלום לכולם,

יש לי מספר רב של קבצים עם סיומת LOG.

בתוך הקבצים יש לי משהו שנראה כך:

ic,6,PM___,"port_rcv_crc_error : 5982 )"

אני רוצה שהסקריפט יציג לי את המספר המקסימלי שקיים בפורט 6 (כפי שאפשר לראות יש לי 5982 טעויות בפורט 6.

כיצד ניתן לכתוב זאת?

תודה. לעונים.

קישור לתוכן
שתף באתרים אחרים

תחשוב שיש לנו שפת תכנות שבה אנחנו רוצים לכתוב סקריפט כזה :תחשוב שיש לנו שפת תכנות שבה אנחנו רוצים לכתוב סקריפט כזה :

if "error > 16"
command1
command2

אנחנו יכולים לכתוב את זה אבל למה אנחנו מתכוונים ? ניתן להבין דבר כזה ב 2 צורות :

אם מספר שגיאה גדול מ 16 פקודה א ופקודה ב (אם התקבל מספר שגיאה 1 לא תתקיים אף פקודה)

אם מספר שגיאה גדול מ 16 פקודה א. בכל מקרה פקודה ב (אם התקבל מספר שגיאה 1 תתקיים פקודה ב)

לכן אנחנו רוצים דרך שבה אנחנו נאמר למחשב מה הוא חלק מה "אם" ומה מגיע בלי קשר. ב C/C++, PHP וכו משתמשים אם {} :

if "error > 16"
{
command1
}
command2

if "error > 16"
{
command1
command2
}

בגלל זה פקודות כמו if ו for הם לא סתם פקודה בודדת אלא היא מערכת של פקודות - כי אחריי if חייבים "חלקים נוספים" כדיי לקבוע איזה חלק מהפקודות הבאות שייך ל if ואיזה לא

ב bash לא משתמשים אם {} אלא פשוט "מילות מפתח" שהן כמו פקודות נלוות ל if. המילות האלה הן then בשביל ההתחלה ו fi בשביל הסוף. כלומר ב bash הדוגמאות ייראו כך :

if "error > 16"
then
command1
fi
command2

if "error > 16"
then
command1
command2
fi

באותה צורה לפקודת 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"
then
command1
command2
fi

אם אתה רוצה לכתוב את הסקריפט שלנו ידנית בשורת הפקודה יש להתאים אותו לכך :

let max=0
for 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 ; done
echo $max

עכשו מה זה #!/bin/bash

זה לא פקודה. בשורת הפקודה # זה סימן של התעלמות כלומר אם תכתוב את זה לשורת הפקודה זה לא יעשה כלום. גם בקובץ סקריפט # זה סימן להתעלמות לכן ניתן לכתוב הערות אל ידיי #. ה #!/bin/bash לא מתבצע כשאתה מריץ את קובץ הסקריפט

התפקיד שלו הוא אחר :

אתה יכול לכתוב סקריםטים לא רק ב bash אלא גם ב perl, python.... אבל את כולם אתה תריץ מתוך bash. השורה הזאת #!/bin/bash אומרת לאיזה תוכנה יש לקרוא כדיי לבצע את הסקריפט. בסקריפט perl למשל היא תיראה כך #!/usr/local/bin/perl

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...