Დამწყებთათვის გზამკვლევი - პირობები და ცვლადები

შესავალი

კეთილი იყოს თქვენი მობრძანება "დამწყები სახელმძღვანელოსთვის". თუ წინა გვერდს არ გამოტოვი, მაშინ ალბათ გაინტერესებთ, თუ რა ხდის ამ სახელმძღვანელოს სხვა ბასის სკრიპტინგის გიდებს.

ეს სახელმძღვანელო არის დაწერილი სრულიად ახალბედა ბაიშისთვის და ისე, როგორც მკითხველი იცით, როგორც მე ვისწავლე. მიუხედავად იმისა, რომ მე ვარ დამწყები BASH მე მოდის პროგრამული განვითარების ფონზე თუმცა ყველაზე მეტად პერსონალის, რომ მე დაწერილი უკვე Windows პლატფორმა.

თქვენ შეგიძლიათ იხილოთ პირველი ორი გიდები ვიზიტით:

თუ ახალია, რომ სურვილისამებრ გაითვალისწინოთ პირველი ორი გიდები, ამით გაგრძელებამდე.

ამ სახელმძღვანელოში ხაზს ვუსვამთ, თუ როგორ გამოიყენოთ პირობითი განცხადებები გამოსაყენებლად მომხმარებლის შეყვანისა და კონტროლის მიზნით.

დააინსტალირეთ rsstail

იმისათვის, რომ დაიცვას ეს სახელმძღვანელო, თქვენ უნდა დააინსტალიროთ ბრძანებათა სტრიქონის ინსტალაცია, რომელსაც rsstail- ი იყენებს, რომელიც გამოიყენება RSS feeds- ის წაკითხვისთვის.

თუ თქვენ იყენებთ Debian / Ubuntu / Mint- ის დისტრიბუციის ტიპს შემდეგში:

sudo apt-get install rsstail

იყიდება Fedora / CentOS და ა.შ. ტიპის:

yum დააყენოთ rsstail

OpenSUSE ტიპისთვის შემდეგი ტიპისაა:

zypper დააყენოთ rsstail

IF განაცხადი

გახსენით ტერმინალის შექმნა და შეიტანეთ ფაილი სახელად rssget.sh აკრეფით შემდეგით:

sudo nano rssget.sh

ნანოს რედაქტორში შეიყვანეთ შემდეგი ტექსტი:

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

გადავარჩინოთ ფაილი CTRL და O- ის დაჭერით და შემდეგ დააჭირეთ CTRL და X- ის დაჭერით

სკრიპტის გაშვება შემდეგით:

sh rssget.sh

სკრიპტი დააბრუნებს linux.about.com სათაურების სიას RSS feed.

ეს არ არის ზედმეტად სასარგებლო სკრიპტი, რადგან ის მხოლოდ RSS feed- ის სათაურებს იღებს, მაგრამ ის იხსენებს, რომ Linux- ის გზას გახსოვს.

გახსენით rssget.sh სკანირება ნანოში ერთხელ და შეასწოროთ ფაილი შემდეგი რედაქციით:

#! / bin / bash

თუ [$ 1 = "სიტყვიერი"]
მაშინ
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

სკრიპტის გაშვება კვლავ აკრიფეთ შემდეგით:

sh rssget.sh verbose

ამჯერად RSS Feed იბრუნებს სათაურს, ბმულსა და აღწერას.

მიმოვიხილოთ სცენარი ცოტა დეტალურად:

#! / Bin / bash გამოჩნდება ყველა სკრიპტში ჩვენ წერენ. მომდევნო ხაზი ძირითადად უყურებს მომხმარებლის მიერ შეყვანილი პირველი შეყვანის პარამეტრს და ადარებს სიტყვას "verbose". თუ შეყვანის პარამეტრი და სიტყვა "verbose" მატჩები შორის ხაზები შორის fi და გაიქცა.

ზემოთ სკრიპტი აშკარად გაყალბდა. რა მოხდება, თუ საერთოდ არ ითვალისწინებთ შეყვანის პარამეტრს? პასუხი თქვენ მიიღებთ შეცდომას მოულოდნელი ოპერატორის ხაზების გასწვრივ.

სხვა მნიშვნელოვანი ხარვეზი ისაა, რომ თუ სიტყვა "ვერბასს" არ მოგცემთ, არაფერი ხდება. იდეალურ შემთხვევაში, თუ სიტყვა ვერბას არ მოგცემთ, სკრიპტი სიის სათაურების დასაბრუნებლად დაბრუნდება.

გამოიყენეთ nano- ის რედაქტირება rssget.sh ფაილის რედაქტირებისთვის და შეიტანეთ კოდი შემდეგი რედაქციით:

#! / bin / bash

თუ [$ 1 = "სიტყვიერი"]
მაშინ
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

გადავარჩინოთ ფაილი და აწარმოეთ იგი აკრეფით შემდეგით:

sh rssget.sh verbose

გამოჩნდება სათაურები, აღწერილობები და ბმულები. ახლა ისევ გაუშვით:

sh rssget.sh სათაურები

ამჯერად მხოლოდ სათაურთა სიები გამოჩნდება.

სკრიპტის დამატებითი ნაწილი შეესაბამება 4-ს და დანერგავს სხვა განცხადებას. ძირითადად სცენარი ახლა ნათქვამია, თუ პირველი პარამეტრი არის სიტყვა "verbose" მისაღებად აღწერა, ბმულები და სათაურები RSS feed მაგრამ თუ პირველი პარამეტრი არაფერია უბრალოდ სიაში სათაურები.

სცენარი ოდნავ გაუმჯობესდა, მაგრამ ჯერ კიდევ გაყალბებულია. თუ ვერ შეიტანთ პარამეტრს, თქვენ კვლავ მიიღებთ შეცდომას. მაშინაც კი, თუ თქვენ უზრუნველყოფს პარამეტრი, მხოლოდ ამბობდა არ გსურთ სიტყვიერი არ ნიშნავს, რომ გსურთ სათაურები მხოლოდ. თქვენ შეიძლება მხოლოდ დაწერილი სიტყვიერი არასწორი მაგალითად ან შეიძლება ჩაწერილი მტრედი, რომელიც, რა თქმა უნდა, უაზრო.

სანამ ჩვენ ვცდილობთ და გაასწორონ ეს საკითხები, მე მინდა გაჩვენოთ კიდევ ერთი ბრძანება, რომელიც მიდის IF- ის განცხადებასთან.

თქვენი rssget.sh სკრიპტის რედაქტირება შემდეგნაირად გამოიყურება:

#! / bin / bash

თუ [$ 1 = "ყველა"]
მაშინ
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

მე გადავწყვიტე, რომ დაეტოვებინა სიტყვა სიტყვიერი და შეცვალა იგი. ეს არ არის მნიშვნელოვანი ნაწილი. ზემოთ მოყვანილი სკრიპტი წარმოაჩენს ელისს, რომელიც მოკლედ არის ნათქვამი 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;
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
სხვა
თუ [$ 1 = "ყველა"]
მაშინ
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

მოგერიდებათ აკრიფოთ ყველა რომ მოგწონთ თუ დააკოპირეთ და ჩასვით თქვენს rssget.sh ფაილი.

ზემოთ სკრიპტი წარმოგიდგენთ მე -2 პარამეტრს, რომელიც საშუალებას გაძლევთ აირჩიოთ "about.com" ან "lxer.com" RSS feed.

გასაშვებად ჩაწერეთ შემდეგი სიტყვები:

sh rssget.sh ყველა aboutdotcom

ან

sh rssget.sh ყველა lxer

თქვენ შეგიძლიათ, რა თქმა უნდა, შეცვალოთ ყველა აღწერილობა ან სათაურები, რათა უზრუნველყოთ მხოლოდ აღწერილობა ან მხოლოდ სათაურები.

ზემოთ მოყვანილი კოდი ამბობს, თუ მეორე სიმბოლოა დაახლოებით დდკომია, შემდეგ კი შეხედეთ მეორე განცხადებას, რომელიც წინა სკრიპტისაგან განსხვავდება, თუ მეორე პარამეტრი არის lxer, მაშინ შეხედეთ შიდა თუ განაცხადი კვლავ გადაწყვიტოს, გამოიტანოს სათაურები, აღწერილობა ან ყველაფერი.

ეს სკრიპტი მოგვაწოდა მხოლოდ როგორც წყობილი IF- ის განცხადების მაგალითზე და ამ სკრიპტის იმდენი რამ არის არასწორი, რომ სხვა სტატიას წაიკითხავდა. მთავარი საკითხი ისაა, რომ ეს არ არის სკალადი.

წარმოიდგინეთ, რომ გსურთ დაამატოთ კიდევ ერთი RSS feed, როგორიცაა ყოველდღე Linux მომხმარებელი ან Linux დღეს? სკრიპტი გახდება უზარმაზარი და თუ გადაწყვიტეთ, რომ სურდა შიდა IF- ის განცხადების შეცვლა, თქვენ უნდა შეცვალოთ იგი მრავალ ადგილას.

მიუხედავად იმისა, რომ არსებობს დრო და ადგილი წყობილი თუ ისინი უნდა იყოს გამოყენებული sparingly. ჩვეულებრივად არის თქვენი კოდის რეფაქტორის გზა ისე, რომ საერთოდ არ გვჭირდება წყობილი. მომავალ სტატიაში მოვედი ამ თემას.

მოდით ახლა შევხედოთ პრობლემის გადასაჭრელად ადამიანების საკითხს. მაგალითად, თუ ზემოთ მოყვანილი სკრიპტი მომხმარებელია, ვიდრე "aboutdotcom" - ის მე -2 პარამეტრიდან, მაშინ სტატიების ჩამონათვალი გამოჩნდება RSS feed- დან LXER- სგან, მიუხედავად იმისა, თუ მომხმარებელი შევა lxer თუ არა.

გარდა იმ შემთხვევისა, როდესაც მომხმარებელი არ შედის "ყველა" ან "აღწერა", როგორც 1 პარამეტრი, მაშინ ნაგულისხმევი არის სიის სათაურები, რომლებიც შეიძლება იყოს მომხმარებლისთვის განკუთვნილი.

შეხედეთ შემდეგ სკრიპტს (ან დააკოპირეთ თქვენს rssget.sh ფაილში.

#! / bin / bash

თუ [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
მაშინ
თუ [$ 1 = "ყველა"] || [$ 1 = "აღწერა"] || [$ 1 = "სათაური"]
მაშინ
თუ [$ 2 = "aboutdotcom"]
მაშინ

თუ [$ 1 = "ყველა"]
მაშინ
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
სხვა
თუ [$ 1 = "ყველა"]
მაშინ
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

პირველ რიგში, უნდა აღინიშნოს, რომ სკრიპტი ახლა საკმაოდ დიდია და შეგიძლიათ სწრაფად იხილოთ, თუ როგორ ამოიწურება კონტროლირებადი IF განცხადებები.

ცოტათი, რაც მნიშვნელოვანია ამ სკრიპტში, არის IF განაცხადი || განაცხადი ცხრილი 2 და ხაზი 4.

The || დგას OR. ასე რომ ხაზი [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] ამოწმებს თუ არა მე -2 პარამეტრი "aboutdotcom" ან "lxer". თუ ეს ასე არ არის, IF- ის განცხადება დასრულებულია, რადგან არ არსებობს სხვა გარე რეკლამის შესახებ განცხადება .

ანალოგიურად ხაზის 4 ხაზი, თუ [$ 1 = "ყველა"] || [$ 1 = "აღწერა"] || [$ 1 = "სათაური"] ამოწმებს თუ არა 1 პარამეტრი ტოლია "ყველა" ან "აღწერა" ან "სათაური".

ახლა თუ მომხმარებელი მართავს sh rssget.sh კარტოფილი ყველის არაფერი დაბრუნდა, სანამ მათ მიიღეს სიაში ტიტული საწყისი LXER.

საპირისპირო || არის &&. && ოპერატორი დგას და.

მე ვაპირებ, რომ სცენარი გამოიყურებოდეს კიდევ უფრო კოშმარი, მაგრამ ეს ქმნის ყველა მნიშვნელოვან შემოწმებას იმისათვის, რომ დარწმუნდეთ, რომ მომხმარებელს აქვს 2 პარამეტრი.

#! / bin / bash

თუ [$ # -eq 2]
მაშინ

თუ [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
მაშინ
თუ [$ 1 = "ყველა"] || [$ 1 = "აღწერა"] || [$ 1 = "სათაური"]
მაშინ
თუ [$ 2 = "aboutdotcom"]
მაშინ

თუ [$ 1 = "ყველა"]
მაშინ
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
სხვა
თუ [$ 1 = "ყველა"]
მაშინ
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
ელფი [$ 1 = "აღწერა"]
მაშინ
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
სხვა
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

ერთადერთი ბიტი, რომელიც დამატებით არის ამ სკრიპტში, სხვა გარე IF განაცხადი შემდეგია: თუ [$ # -eq 2] . თუ შეყვანის პარამეტრების შესახებ სტატიას წაგიკითხავთ, თქვენ იცით, რომ $ # შედის შეყვანის პარამეტრების რაოდენობა. -eq უტოლდება. IF- ის განაცხადი ამიტომ ამოწმებს, რომ მომხმარებლის შევიდა 2 პარამეტრი და თუ ისინი არ უბრალოდ გასასვლელად გარეშე არაფერი. (არ არის განსაკუთრებით მეგობრული).

მე ვიცი, რომ ეს გაკვეთილი საკმაოდ დიდია. არ არის გაცილებით მეტი დასაფარად ამ კვირაში, მაგრამ მე მინდა დაეხმაროს tidy up Script სანამ ჩვენ დასრულდება.

ერთი ბოლო ბრძანება, რომელსაც უნდა გაეცნოთ პირობითი განცხადებები, არის 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
;
esac
fi

საქმის განცხადება არის ძალიან კარგი წერის წერა IF ELSE IF ELSE IF ELSE IF.

მაგალითად, ეს ლოგიკა

I ხილი = ბანანი
ამის შემდეგ
ნაყოფი IF ხილის = ფორთოხალი
ამის შემდეგ
ყველი = ყურძენი
ამის შემდეგ
დაასრულე თუ

შეიძლება გადაწერილი იყოს:

საქმე ხილი
ბანანები)
ამის გაკეთება
;
ფორთოხალი)
ამის გაკეთება
;
ყურძენი)
ამის გაკეთება
;
esac

ძირითადად, პირველი პუნქტის შემთხვევაში, საქმე ისაა, რომ თქვენ აპირებთ შედარებას (ანუ ხილის). შემდეგ თითოეული პუნქტი ფრჩხილების წინაშე არის ის, რასაც შეადარა წინააღმდეგობა და თუ იგი წინა ხაზზე შეესაბამება; გაიქცევა. საქმის განცხადება შეწყდება საპირისპირო esac (რაც უკანასკნელ შემთხვევაში).

In rssget.sh სცენარი შემთხვევაში განცხადების ხსნის ზოგიერთი რომ საშინელი nesting თუმცა ნამდვილად არ გაუმჯობესების საკმარისი.

სინამდვილეში გაუმჯობესება სცენარი მე უნდა გააცნოს თქვენ ცვლადები.

შეხედეთ შემდეგ კოდს:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
ჩვენება = ""
url = ""

თუ [$ # -lt 2] || [$ # -გ 2]
მაშინ
echo "გამოყენება: rssget.sh [ყველა | აღწერა | სათაური] [aboutdotcom | lxer]";
გასასვლელი;
fi

საქმე $ 1-ში
ყველა)
ჩვენება = "- d -l -u"
;
აღწერა)
ჩვენება = "- d -u"
;
სათაური)
ჩვენება = "-"
;
esac

საქმე $ 2-ში
aboutdotcom)
url = $ aboutdotcom;
;
lxer)
url = $ lxer;
;
esac
rsstail $ $ url;

ცვლადი განისაზღვრება მას ასახავს სახელი და შემდეგ მისთვის ღირებულებას. ზემოთ მოყვანილ მაგალითში შემდეგია ცვლადების დავალებები:

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
ჩვენება = ""
url = ""

სკრიპტი მყისიერად უფრო მართვადია ცვლადების გამოყენებით. მაგალითად, თითოეული პარამეტრი ცალკე გადაჰყავს და არ არსებობს წყობილი IF განცხადებები.

დისპლეის ცვლადი არის დადგენილი იმის მიხედვით, თუ აირჩევთ ყველა, აღწერა ან სათაური და url ცვლადი არის მითითებული შესახებ შესახებ dotcom ცვლადი ან ღირებულება lxer ცვლადი დამოკიდებულია თუ არა აირჩია aboutdotcom ან lxer.

Rsstail ბრძანება ახლა უნდა გამოვიყენოთ ეკრანის ღირებულება და url სწორად გაუშვით.

მიუხედავად იმისა, რომ ცვლადები იქმნება მხოლოდ მათ მიერ სახელწოდების მიცემაზე, რეალურად იყენებენ მათ, თქვენ უნდა მოაწესრიგონ $ ნიშანი მათ წინ. სხვა სიტყვებით, ცვლადი = ღირებულების მნიშვნელობები ცვლადი იქნება, ხოლო $ ცვლადი საშუალებები მომეცი ცვლადის შინაარსი.

შემდეგი არის საბოლოო სცენარი ამ tutorial.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
გამოყენება = "გამოყენება: rssget.sh [ყველა | description | title] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
ჩვენება = ""
url = ""

თუ [$ # -lt 2] || [$ # -გ 2]
მაშინ
echo $ გამოყენება;
გასასვლელი;
fi

საქმე $ 1-ში
ყველა)
ჩვენება = "- d -l -u"
;
აღწერა)
ჩვენება = "- d -u"
;
სათაური)
ჩვენება = "-"
;
*)
echo $ გამოყენება;
გასასვლელი;
;
esac

საქმე $ 2-ში
aboutdotcom)
url = $ aboutdotcom;
;
lxer)
url = $ lxer;
;
linuxtoday)
url = $ linuxtoday;
;
everydaylinuxuser)
url = $ everydaylinuxuser;
;
*)
echo $ გამოყენება;
გასასვლელი;
esac

rsstail $ $ url;

ზემოთ მოყვანილი სკრიპტი უფრო მეტ RSS Feed- ს წარმოშობს და არსებობს გამოყენების ცვლადი, რომელიც მოგვითხრობს თუ როგორ გამოიყენოთ სკრიპტი, თუ ისინი არ შეიყვანენ 2 ცვლადს ან შედიან ცვლადების არასწორი ვარიანტები.

შემაჯამებელი

ეს იყო ეპიკური სტატია და შესაძლოა ძალიან მალე წავიდა. მომდევნო სახელმძღვანელოში მე გაჩვენებთ ყველა შედარებითი ვარიანტის IF განცხადებებს და კიდევ უფრო მეტია საუბარი ცვლადების მიმართ.

უფრო მეტიც, რაც შეიძლება გაკეთდეს ზემოთ სკრიპტის გასაუმჯობესებლად და ეს მომავალი გიდების სახით იქნება დაფარული, რადგან ჩვენ შეისწავლის მარყუჟების, grep- ის და რეგულარული გამოთქმები.

შეამოწმეთ თუ როგორ (სკრიპტის ქვემოთ წასაკითხად იხილეთ სტატიების სია) განყოფილების l inux.about.com- ის სექციაში, რათა იპოვოთ სასარგებლო გიდები ორმაგი ჩატვირთვის Windows და Ubuntu- ისგან, რათა შექმნან ვირტუალური მანქანა GNOME ყუთების გამოყენებით .