Beginners Guide to BASH - պայմաններ եւ փոփոխականներ

Ներածություն

Բարի գալուստ «Begin Beginners Guide to BASH» - ի երրորդ մասը: Եթե ​​նախորդ երկու հոդվածները բաց թողնեք, ապա հավանաբար կցանկանայի իմանալ, թե ինչ է դարձնում այս ուղեցույցը տարբերվում այլ BASH scripting guides- ով:

Այս ուղեցույցը գրվում է լրիվ նորեկի կողմից BASH- ի միջոցով եւ այնպես, որ դուք կսովորեք սովորել, ինչպես ես սովորում եմ: Մինչ ես BASH- ին սկսնակ եմ, ես գալիս եմ ծրագրային ապահովման զարգացման ֆոնից, չնայած, որ ես գրել եմ այն ​​Windows- ի պլատֆորմը:

Դուք կարող եք տեսնել առաջին երկու ուղեցույցները, այցելելով `

Եթե ​​դուք նոր եք BASH scripting- ին, խորհուրդ եմ տալիս կարդալ առաջին երկու ուղեցույցները, նախքան այս մեկը շարունակելը:

Այս ուղեցույցում ես ընդգծում եմ, թե ինչպես օգտագործել պայմանական հայտարարությունները, օգտագործողի մուտքագրումը ստուգելու եւ վերահսկելու ինչպես սցենարի գործառույթները:

Տեղադրեք rsstail

Այս ուղեցույցին հետեւելու համար անհրաժեշտ է տեղադրել rsstail կոչվող հրամանի տող ծրագիր, որն օգտագործվում է RSS ընթերցման համար:

Եթե ​​օգտագործում եք Debian / Ubuntu / Mint հիմնված բաշխման տեսակը, հետեւյալը.

sudo apt-get տեղադրեք rsstail

For 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- ից վերնագրերի ցանկը:

Դա չափազանց օգտակար սցենար չէ, քանի որ այն պարզապես վերբեռնում է մեկ RSS- ից վերնագրերը, սակայն այն չի փրկում, որ հիշենք Linux.about.com RSS- ի ուղին:

Կրկին բացեք rssget.sh- ի սցենարը nano- ում եւ խմբագրեք ֆայլը հետեւյալ կերպ.

#! / bin / bash

եթե [$ 1 = "մանրամասն"]
ապա
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Սկսեք սցենարի կրկին `մուտքագրելով հետեւյալը.

sh rssget.sh մանրամասն

Այս անգամ RSS հոսքը վերադառնում է վերնագրով, հղումով եւ նկարագրությամբ:

Վերլուծենք սցենարը մի փոքր մանրամասնությամբ.

#! / Bin / bash- ը գրվում է յուրաքանչյուր գրառման մեջ: Հաջորդ գիծը հիմնականում նայում է օգտագործողի տրամադրած առաջին մուտքային պարամետրին եւ համեմատում է այն «բծերի» բառի հետ: Եթե ​​մուտքագրման պարամետրը եւ «բծավոր» բառը համապատասխանում են այն ժամանակ, ապա ֆոնն անցնում է գծերը:

Վերոհիշյալ սցենարը ակնհայտորեն թերի է: Ինչ է տեղի ունենում, եթե ընդհանրապես մուտք չեք գործի: Պատասխանն այն է, որ սխալ եք ստանում անսպասելի օպերատորի գծերով:

Մյուս խոշոր թերությունն այն է, որ եթե դուք «բծախնդիր» բառը չեք տալիս, ապա ոչինչ չի պատահում: Իդեալում, եթե դուք չեք տրամադրել բառի բովանդակությունը, սցենարը կվերադառնա վերնագրերի ցանկ:

Օգտագործեք 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 մանրամասն

Տիտղերի, նկարագրությունների եւ հղումների ցանկը կհայտնվի: Այժմ վարեք այն հետեւյալը.

sh rssget.sh վերնագրերը

Այս անգամ պարզապես վերնագրերի ցուցակը երեւում է:

Սցենարի լրացուցիչ մասը 4-րդ տողում է եւ ներկայացնում է այլ հայտարարություն: Հիմնականում սցենարը այժմ ասում է, որ եթե առաջին պարամետրը «բովանդակալից» բառը բերում է RSS- ի հղման նկարագրությունը, հղումները եւ վերնագրերը, բայց եթե առաջին պարամետրը որեւէ այլ բան է, պարզապես ստացեք ցուցակների ցուցակ:

Սցենարը փոքր-ինչ բարելավվել է, բայց դեռեւս խաթարված է: Եթե ​​չկարողանաք մուտք գործել պարամետր, դուք դեռ կստանաք սխալ: Նույնիսկ եթե դուք տալիս եք պարամետր, պարզապես ասելով, որ դուք չեք ցանկանում, որ բանաձեւը չի նշանակում, որ ցանկանում եք միայն վերնագրեր: Գուցե դուք պարզապես կարող եք ուղղակիորեն ուղղել սխալ կամ, գուցե, գրել եք աղավնիներ, որոնք, իհարկե, անիմաստ են:

Նախքան փորձենք եւ հստակեցնենք այդ խնդիրները, ես ուզում եմ ձեզ ցույց տալ մեկ այլ հրաման, որն ուղեկցվում է 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;

Այլ
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Ես որոշեցի ազատվել բառի բովանդակությունից եւ փոխարինել այն ամենի հետ: Դա կարեւոր մասն չէ: Վերոհիշյալ սցենարը ներկայացնում է էլիֆը, որը ELSE IF- ի ասածի կարճ ձեւն է:

Այժմ սցենարը հետեւյալն է. Եթե ​​դուք վարում եք rssget.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;

Այլ
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
elif [$ 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- ն:

Այն գործելու համար մուտքագրեք հետեւյալը.

sh rssget.sh բոլոր մասին

կամ

sh rssget.sh բոլորը

Դուք, իհարկե, կարող եք փոխարինել բոլոր նկարագրություններով կամ վերնագրերով, պարզապես նկարագրություններ կամ պարզապես վերնագրեր:

Հիմնականում վերը նշված կոդը ասում է, եթե երկրորդ պարամետրը մոտակա է, ապա եթե նայեք երկրորդին, եթե նույնը նախորդ սցենարից է, եթե երկրորդ պարամետրը lxer է, ապա նայեք ներքին, եթե հայտարարությունը կրկին որոշում է, թե արդյոք ցուցադրվելու թեմաներ, նկարագրություններ կամ ամեն ինչ:

Այդ սցենարը տրամադրվում է որպես զուտ IF եզրակացության օրինակ, եւ այդ սցենարի հետ կապված շատ բաներ կան, որ դրանք կբերեն մեկ այլ հոդված `բացատրելու նրանց բոլորը: Հիմնական խնդիրն այն է, որ դա ընդարձակելի չէ:

Պատկերացրեք, որ ցանկանում եք ավելացնել մեկ այլ RSS ընթերցում, ինչպիսիք են Ամենօրյա Linux օգտագործողը կամ Linux այսօր: Սցենարը հսկայական կլիներ, եւ եթե որոշեիք, որ ցանկանում եք փոխել ներքին IF- ի հայտարարությունը, ստիպված կլինեք փոխել այն բազմազան վայրերում:

Մինչդեռ ժամանակի եւ վայրի տեղադրվող ԵԹ-ի համար դրանք պետք է օգտագործվեն խնայողաբար: Կան սովորաբար ձեր կոդը վերադարձնելու եղանակը, այնպես որ ձեզ հարկավոր չէ ներածված IF- ին: Ես այս առարկա կգնա ապագա հոդվածում:

Եկեք դիտարկենք աղբի պարունակության մեջ մտնող մարդկանց խնդիրը: Օրինակ, վերը նշված սցենարի մեջ, եթե օգտագործողը «docdcom» -ից բացի այլ բան է մտնում որպես 2-րդ պարամետր, ապա հոդվածների ցուցակը հայտնվում է LXER- ի RSS- ից, անկախ նրանից, թե արդյոք օգտագործողը մտնում է, թե ոչ:

Բացի դրանից, եթե օգտագործողը «բոլոր» կամ «նկարագրությունը» չի մուտքագրում որպես 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;
elif [$ 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
elif [$ 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

Առաջինն այն է, որ սցենարը այժմ բավականին մեծ է, եւ դուք կարող եք արագ տեսնել, թե ինչպես կարելի է դառնալ IFEX- ի հայտարարությունները:

Այս սցենարի մեջ կարեւորը այն է, IF- ի հայտարարությունը || հայտարարություն THEN բաժին 2-րդ եւ 4-րդ տողերում:

The || կրում է OR- ը: Այսպիսով, գիծը, եթե [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] ստուգում է, թե արդյոք 2-րդ պարամետրը հավասար է «մոտիվ» կամ «lxer»: Եթե ​​դա այն չէ, ապա IF- ի հայտարարությունը ամբողջական է, քանի որ այլ IF- ի համար չկա այլ հայտարարություն :

Նմանապես գծի 4-ին գծի դեպքում եթե [$ 1 = "բոլորը"] || [$ 1 = "նկարագրությունը"] || [$ 1 = "title"] ստուգում է, արդյոք 1-ին պարամետրը հավասար է «բոլորին» կամ «նկարագրությանը» կամ «տիտղոսին»:

Այժմ, երբ օգտագործողը աշխատում է sh rssget.sh կարտոֆիլի պանրով, ոչինչ չի վերադարձվում, մինչ նրանք ստացան LXER- ից տիտղոսների ցանկ:

Հակառակն || եւ &&: && օպերատորը հանդես է գալիս AND- ի համար:

Ես պատրաստվում եմ գրել սցենարը ավելի շատ մղձավանջի նման, բայց այն բոլոր կարեւոր ստուգումը դարձնում է համոզվելու, որ օգտագործողը 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;
elif [$ 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
elif [$ 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] : Եթե ​​դուք կարդում եք ներդրումային պարամետրերի մասին հոդվածը, ապա կիմանաք, որ $ #- ը վերադարձնում է մուտքի պարամետրերի քանակի հաշվարկը: The -q- ը հավասար է: Հետեւաբար, IF- ի հայտարարությունը ստուգում է, որ օգտագործողը մուտք է գործել 2 պարամետր, եւ եթե նրանք չեն հասկացել `ոչինչ չեն անում: (Ոչ, հատկապես բարեկամական):

Ես տեղյակ եմ, որ այս ձեռնարկը բավականին մեծ է: Այս շաբաթ լուսաբանելու շատ բան չկա, բայց ես ուզում եմ օգնել մինչեւ սեզոնը սեղմել:

Մեկը վերջին պատվիրանը, որը դուք պետք է իմանաք պայմանական հայտարարությունների մասին, CASE- ի հայտարարությունն է:

#! / bin / bash


եթե [$ # -eq 2]
ապա
$ 2-ի դեպքում
մոտավորապես մոտավորապես)
գործը $ 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- ը http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Գործի հայտարարությունը HTML- ի ELSE IF ELSE IF IF IF- ի գրավիչ ձեւն է:

Օրինակ, այս տրամաբանությունը

ԵԹԵ պտուղ = բանան
Այնուհետեւ սա
ELSE IF պտուղ = նարինջ
Այնուհետեւ սա
ELSE IF միրգ = խաղող
Այնուհետեւ սա
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"
display = ""
url = ""

եթե [$ # -lt 2] || [$ # -gt 2]
ապա
echo "օգտագործումը: rssget.sh [բոլոր | նկարագրություն] վերնագիր [aboutdotcom | lxer]";
ելք;
fi

գործը $ 1 է
բոլորը)
display = "- d -l -u"
;;
նկարագրությունը)
display = "- d -u"
;;
կոչում)
display = "- u"
;;
esac

$ 2-ի դեպքում
մոտավորապես մոտավորապես)
url = $ fordotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Փոխակերպիչը որոշվում է այն անունով, այնուհետեւ արժեք է դնելու: Վերոնշյալ օրինակում հետեւյալն են փոփոխականների հանձնարարությունները.

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

Սցենարը միանգամից ավելի կառավարելի է, օգտագործելով փոփոխականները: Օրինակ, յուրաքանչյուր պարամետրը առանձին վարվում է, ուստի ներկառուցված IF- ի հայտարարությունները չկան:

Ցուցադրական փոփոխականն այժմ սահմանվում է `կախված նրանից, թե ընտրեցիք բոլորը, նկարագրությունը կամ անվանումը, իսկ url- ի փոփոխականը սահմանվում է մոտիվատիկ փոփոխականի արժեքի կամ lxer փոփոխականի արժեքին` կախված ընտրությունից, թե արդյոք ընտրում եք մոտակա համակարգ:

The rsstail հրամանը այժմ պարզապես պետք է օգտագործի ցուցադրման արժեքը եւ url- ը ճիշտ վարելու համար:

Մինչդեռ փոփոխականները սահմանվում են հենց նրանց անունով, իրականում դրանք օգտագործելու համար հարկավոր է տեղադրել $ նշան առջեւում: Այլ կերպ ասած `variable = value sets պարամետրը արժեք է, իսկ $ փոփոխական նշանակում է ինձ փոփոխության բովանդակությունը:

Հետեւյալ սովորում է այս ձեռնարկի համար:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
ամենօրինակնսուսերները = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
Օգտագործումը = "օգտագործումը: rssget.sh [all | նկարագրություն] վերնագիր [lxer | մոտ մասին, ամենօրյա համօգտագործող | linuxtoday]"
display = ""
url = ""

եթե [$ # -lt 2] || [$ # -gt 2]
ապա
echo $ օգտագործումը;
ելք;
fi

գործը $ 1 է
բոլորը)
display = "- d -l -u"
;;
նկարագրությունը)
display = "- d -u"
;;
կոչում)
display = "- u"
;;
*)
echo $ օգտագործումը;
ելք;
;;
esac

$ 2-ի դեպքում
մոտավորապես մոտավորապես)
url = $ fordotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
ամենօրյա
url = $ everydaylinuxuser;
;;
*)
echo $ օգտագործումը;
ելք;
esac

rsstail $ display $ url;

Վերոհիշյալ սցենարը ներկայացնում է ավելի շատ RSS հոսքեր եւ կա օգտագործման փոփոխական, որը պատմում է օգտագործողին, թե ինչպես օգտագործել սցենարը, եթե նրանք չեն մուտքագրում 2 փոփոխական կամ փոփոխականների համար սխալ ընտրանքներ են մուտքագրում:

Ամփոփում

Սա էպիկական հոդված է եւ կարող է շատ հեռու գնալ: Հաջորդ ուղեցույցում ցույց կտամ ձեզ, IF- ի հայտարարությունների համեմատական ​​տարբերակները, եւ դեռ շատ բան կա խոսելու փոփոխականների մասին:

Կա նաեւ ավելին, որ կարելի է անել վերը նշված սցենարի բարելավման համար, եւ դա կներառվի ապագա ուղեցույցներում, երբ մենք ուսումնասիրում ենք հանգույցները, grep- ը եւ կանոնավոր արտահայտությունները:

Ստուգեք, թե ինչպես (Scroll ներքեւ անցնել կատեգորիաները տեսնելու համար հոդվածների ցանկը) l inux.about.com- ի բաժինը, ավելի օգտակար ուղեցույցներ գտնել Windows- ի եւ Ubuntu- ի կրկնակի բեռնաթափման համար, օգտագործելով GNOME տուփեր օգտագործող վիրտուալ մեքենա :