Нармафзор

Дастур барои шурӯъкунандагон ба BASH - Шартҳо ва тағирёбандаҳо

Муаллиф: John Stephens
Санаи Таъсис: 21 Январ 2021
Навсозӣ: 13 Май 2024
Anonim
Дастур барои шурӯъкунандагон ба BASH - Шартҳо ва тағирёбандаҳо - Нармафзор
Дастур барои шурӯъкунандагон ба BASH - Шартҳо ва тағирёбандаҳо - Нармафзор

Мундариҷа

Омӯхтани тарзи кор бо иттилоот ва қабули қарорҳо дар BASH

Ба бахши сеюми "Дастурамали шурӯъкунандагон ба BASH" хуш омадед. Агар шумо ду мақолаи қаблиро аз даст дода бошед, пас шумо хоҳед донистед, ки ин дастурро аз дигар дастурҳои скрипти BASH чӣ фарқ мекунад.

Шумо метавонед ду роҳнамои аввалро бо роҳи боздид дидан кунед:

  • Дастур барои шурӯъкунандагон ба BASH - Салом Ҷаҳон
  • Дастур барои шурӯъкунандагон ба BASH - Parameter Input

Агар шумо бо скрипти BASH нав бошед, тавсия дода мешавад, ки ба қафо баргардед ва ду дастури аввалро пеш аз идома додани он хонед.

Дар дастур равшан хоҳад шуд, ки чӣ гуна истифода бурдани изҳороти шартӣ барои озмоиши вуруди корбар ва назорати иҷрои скрипт истифода мешавад.


Rsstail насб кунед

Барои риоя кардани ин дастур, шумо бояд як барномаи сатри фармоне бо номи rsstail насб кунед, ки барои хондани каналҳои RSS истифода мешавад.

Агар шумо тақсимоти Debian / Ubuntu / Mint -ро истифода баред, чунин нависед:

sudo apt насб rsstail

Барои Fedora / CentOS ва ғайраҳо нависед:

dnf насб rsstail

Барои openSUSE нависед:

rystail насб кунед

Изҳороти IF

Терминалро кушоед ва файли rssget.sh-ро бо навиштани чунин файл эҷод кунед:

судо нано rssget.sh

Дар муҳаррири нано матни зеринро дохил кунед:

#! / bin / bash
rsstail -u https://www.espn.com/espn/rss/news;

Файлро бо пахш кардан захира кунед CTRL ва О. ва пас аз он пахш кунед CTRL ва X.

Боварӣ ҳосил кунед, ки скрипт иҷрошаванда аст.


chmod + x rssget.sh

Скриптро бо навиштани он иҷро кунед:

sh rssget.sh

Скрипт рӯйхати унвонҳоро аз канали ESPN RSS бармегардонад.

Он як скрипти аз ҳад зиёд муфид нест, зеро он танҳо унвонҳоро аз як канали RSS мегирад, аммо сарфаи ёд кардани роҳро ба канали RSS ESPN сарф намекунад.

Скрипти rssget.sh-ро боз дар нано боз кунед ва файлро таҳрир кунед, ба тариқи зайл:

#! / bin / bash
агар [$ 1 = "verbose"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/news;
fi

Навиштани скриптро дубора иҷро кунед:

sh rssget.sh verbose

Ин дафъа, навори RSS бо унвон, пайванд ва тавсиф бармегардад.

Биёед скриптро ба таври муфассал таҳлил кунем:

Дар #! / бин / Баш дар ҳар скрипте, ки мо менависем, пайдо мешавад. Дар сатри оянда асосан параметрҳои якуми вурудро, ки корбар пешкаш кардааст, дида мебарояд ва онро бо калимаи "verbose" муқоиса мекунад. Агар параметрҳои вуруд ва калимаи "verbose" мувофиқат кунанд, пас хатҳои байни баъд ваfiran мезананд.


Ин скрипти дар боло номувофиқ аст. Агар шумо параметри вурудро умуман пешниҳод накунед, чӣ мешавад? Ҷавоб ин аст, ки шумо хато дар қатори оператори ногаҳонӣ ба даст меоред.

Камбуди дигари асосӣ дар он аст, ки агар шумо калимаи "verbose" -ро пешниҳод накунед, пас ҳеҷ чиз рӯй намедиҳад. Идеалӣ, агар шумо калимаи возеҳро пешниҳод накунед, скрипт рӯйхати унвонҳоро бармегардонад.

Барои таҳрир кардани файли rssget.sh бори дигар наноро истифода баред ва ба коди зерин тағир диҳед:

#! / bin / bash
агар [$ 1 = "verbose"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/news;
дигар
rsstail -u https://www.espn.com/espn/rss/news;
fi

Файлро захира кунед ва бо навиштани он кор кунед:

sh rssget.sh verbose

Рӯйхати унвонҳо, тавсифҳо ва истинодҳо пайдо мешавад. Акнун, онро боз ба тариқи зайл иҷро кунед:

sh rssget.sh унвонҳо

Ин дафъа танҳо рӯйхати унвонҳо пайдо мешавад.

Қисми иловагии скрипт дар хати 4 аст ва онро муаррифӣ мекунад дигар изҳороти. Асосан, скрипт ҳоло мегӯяд, ки агар параметри аввал калимаи "verbose" тавсиф, истинодҳо ва сарлавҳаҳоро барои хўроки RSS гирад, аммо агар параметри якум чизи дигар бошад, танҳо рӯйхати унвонҳоро гиред.

Скрипт каме беҳтар шуд, аммо то ҳол камбудиҳо ҳастанд. Агар шумо параметрро дохил карда натавонед ҳам, шумо хато мекунед. Ҳатто агар шумо параметр пешниҳод кунед ҳам, танҳо мегӯед, ки verbose намехоҳад, маънои онро надорад, ки шумо унвонҳоро мехоҳед. Шояд шумо айнан навиштаҳои даҳони хато навиштаед ё шояд кабӯтаре навишта дошта бошед, ки ин албатта ҳеҷ маъно надорад.

Пеш аз он ки мо ин масъаларо санҷем ва тоза кунем, шумо бояд боз як фармони дигарро бинед, ки бо изҳороти IF алоқаманд аст.

Скрипти rssget.sh-и худро таҳрир кунед, то ба тариқи зайл бубинед:

#! / bin / bash
агар [$ 1 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/news;
elif [$ 1 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/news;
дигар
rsstail -u https://www.espn.com/espn/rss/news;
fi

Дар ин мисол, verbose бо ҳама иваз карда шуд. Ин содда аст, ва ин ҷузъи муҳим нест. Скрипти дар боло овардашуда муаррифӣ мекунад элиф ки ин як роҳи кӯтоҳи гуфтугӯ ELSE IF мебошад.

Ҳоло скрипт чунин кор мекунад. Агар шумо давида sh rssget.sh ҳама пас шумо тавсифҳо, истинодҳо ва унвонҳоро пайдо мекунед. Агар ба ҷои ин, шумо танҳо медавед ш тавсифи rssget.sh, шумо танҳо унвонҳо ва тавсифҳоро хоҳед гирифт. Агар шумо ягон калимаи дигареро пешниҳод кунед, шумо рӯйхати унвонҳоро мегиред.

Ин тарзи зуд таҳия кардани рӯйхати изҳороти шартиро муаррифӣ мекунад. Усули алтернативии кор элиф ба кор бурдани он чизе, ки ҳамчун лона ном бурда мешавад агар изҳорот.

Дар зер намунае нишон дода шудааст, ки чӣ тавр лона сохта шудааст агар эъломияҳо кор мекунанд:

#! / bin / bash
агар [$ 1 = "бейсбол"]
баъд
агар [$ 2 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/mlb/news;
elif [$ 2 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/mlb/news;
дигар
rsstail -u https://www.espn.com/espn/rss/mlb/news;
fi
дигар
агар [$ 2 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/news;
elif [$ 2 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/news;
дигар
rsstail -u https://www.espn.com/espn/rss/news;
fi
fi

Ҳангоми навиштани ҳама он, агар шумо мехоҳед, ё худ онро ба файли rssget.sh нусхабардорӣ кунед.

Ин скрипти болоӣ параметри 2-ро пешниҳод мекунад, ки ба шумо интихоби сарлавҳаҳои бейсбол ё ҳама сарлавҳаҳоро дар каналҳои RSS интихоб мекунад.

Барои идора кардани он шумо матнро дохил кунед:

sh rssget.sh ҳама бейсбол

ё

sh rssget.sh ҳама чиз

Шумо метавонед ҳамаашро бо тавсиф ё унвон иваз намоед, то тавзеҳоти оддӣ ё унвонҳоро пешниҳод кунед.

Дар кодекси боло гуфта мешавад, ки агар параметри аввал "баселбол" бошад, пас ба дуввум нигаред, агар ибора бо скрипти қаблӣ якхел бошад. Аммо, агар параметрҳои аввал чизи дигар бошанд, пас сарлавҳаҳои умумиро аз ESPN нишон диҳед. Аз он ҷо, дар ҳар ду ҳолат, он гоҳ ба изҳороти дохилӣ нигоҳ карда мешавад, агар боз тасмим гирад, ки унвонҳо, тавсифҳо ва ҳама чизҳоро нишон диҳад.

Ин скрипт ба таври комил ҳамчун намунае, ки ба баёнияи IF ворид шудааст, оварда шудааст ва дар он скрипт хатогиҳои зиёд мавҷуданд, ки барои онҳо шарҳ додани як мақолаи дигар лозим аст. Масъалаи асосӣ дар он аст, ки миқёспазир нест.

Тасаввур кунед, ки шумо мехоҳед як RSS наворро аз як сайти дигар ё ҳатто як намуди дигари варзиш дар ҳамон сайт илова кунед? Скрипт бениҳоят калон мешавад ва агар шумо қарор дода бошед, ки изҳороти дохилии IF -ро тағир додан хоҳед, шумо бояд онро дар якчанд ҷой иваз мекардед.

Гарчанде ки вақт ва ҷой барои ҷои лона мавҷуд аст, агар онҳо ба таври исрофкорона истифода шаванд. Одатан, як роҳи рефактораткунии код мавҷуд аст, то ба шумо лексияи IF ворид карда нашавад. Ман дар ин мавзӯъ дар мақолаи оянда хоҳам рафт.

Биёед ҳоло ба ҳалли масъалаи одамоне, ки ба параметрҳои duff ворид мешаванд, назар мекунем. Масалан, дар скрипти дар боло зикршуда, агар корбар ба ҷуз параметри 1 чизи дигаре аз "бейсбол" ворид кунад, рӯйхати мақолаҳо аз сарлавҳаҳои умумӣ, новобаста аз он, ки ворид карда шудааст, пайдо мешавад.

Ғайр аз он, агар корбар ҳамчун параметри 2 "ҳама" ё "тавсиф" -ро ворид накунад, дар онгоҳ пешфарз рӯйхати унвонҳое мешавад, ки корбар ният дорад ё не.

Ба скрипти зерин нигаред (ё онро ба файли rssget.sh нусхабардорӣ кунед ва гузоред).

#! / bin / bash
агар [$ 1 = "сарлавҳа"] || [$ 1 = "бейсбол"]
баъд
агар [$ 2 = "ҳама"] || [$ 2 = "тавсиф"] || [$ 2 = "унвон"]
баъд
агар [$ 1 = "сарлавҳа"]
баъд
агар [$ 2 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/news;
elif [$ 2 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/news;
дигар
rsstail -u https://www.espn.com/espn/rss/news;
fi
дигар
агар [$ 2 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/mlb/news;
elif [$ 2 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/mlb/news;
дигар
rsstail -u https://www.espn.com/espn/rss/mlb/news;
fi
fi
fi
fi

Аввалин чизе, ки бояд қайд кард, ин аст, ки скрипт ҳоло хеле калон шуда истодааст ва шумо метавонед зуд бифаҳмед, ки чӣ гуна изҳороти IF воридшуда аз назорат баромада метавонанд.

Ба каме, ки дар ин скрипт муҳим аст, изҳороти IF || аст изҳороти THEN дар сатри 2 ва хати 4.

|| барои OR ишора мекунад. Ҳамин тавр сатрагар [$ 1 = "сарлавҳа"] || [$ 1 = "бейсбол"]санҷиш мекунад, ки оё параметри 2 ба «сарлавҳа» ё «бейсбол» баробар аст. Агар ин тавр набошад, пас баёнияи IF пур аст, зеро вуҷуд надорад дигар изҳорот барои берунӣ АГАР.

Ҳамин тавр дар хати 4 хатиагар [$ 2 = "ҳама"] || [$ 2 = "тавсиф"] || [$ 2 = "унвон"]месанҷад, ки оё параметри 1 ба "ҳама" ё "тавсиф" ё "унвон" баробар аст.

Ҳоло, агар корбар кор кунадsh rssget.sh панир картошкачизе баргардонида намешавад, дар сурате ки пеш аз онҳо рӯйхати сарлавҳаҳо мегирифтанд.

Баръакси || аст &&. && оператор ба маънои AND.

Мисоли дигар ин аст, ки скриптро ба мисли даҳшати шабеҳтар хоҳад сохт, аммо чеки муҳимтаринро барои ҳосил кардани он, ки корбар 2 параметрро таъмин кардааст, нишон медиҳад.

#! / bin / bash
агар [$ # -eq 2]
баъд
агар [$ 1 = "сарлавҳа"] || [$ 1 = "бейсбол"]
баъд
агар [$ 2 = "ҳама"] || [$ 2 = "тавсиф"] || [$ 2 = "унвон"]
баъд
агар [$ 1 = "сарлавҳа"]
баъд
агар [$ 2 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/news;
elif [$ 3 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/news;
дигар
rsstail -u https://www.espn.com/espn/rss/news;
fi
дигар
агар [$ 2 = "ҳама"]
баъд
rsstail -d -l -u https://www.espn.com/espn/rss/mlb/news;
elif [$ 2 = "тавсиф"]
баъд
rsstail -d -u https://www.espn.com/espn/rss/mlb/news;
дигар
rsstail -u https://www.espn.com/espn/rss/mlb/news;
fi
fi
fi
fi
fi

Ягона каме, ки дар ин скрипт иловагӣ аст, боз як изҳороти берунаи IF аст:агар [$ # -eq 2]. Агар шумо мақоларо дар бораи параметрҳои вуруд хонед, хоҳед донед, ки $ # миқдори миқдори параметрҳоро ворид мекунад. Дар -ег баробар аст. Аз ин рӯ, изҳороти IF месанҷад, ки корбар ду параметрро ворид кардааст ва агар онҳо ин корро накарда бошанд, бе ягон кор баромада намешавад. (На махсусан дӯстона).

Равшан аст, ки ин дастур хеле калон шуда истодааст. Дар пӯшонидани он чизи бештаре нест, аммо шумо пеш аз ба итмом расонидани итмоми скрипт кӯмак карда метавонед.

Фармони охирин, ки шумо бояд дар бораи изҳороти шартӣ омӯзед, ин изҳороти CASE аст.

#! / bin / bash

агар [$ # -eq 2]
баъд
парванда $ 2 дар
сарлавҳаҳо)
парванда $ 1 дар
ҳама)
rsstail -d -l -u https://www.espn.com/espn/rss/news
;;
тавсиф)
rsstail -d -u https://www.espn.com/espn/rss/news
;;
унвон)
rsstail -u https://www.espn.com/espn/rss/news
;;
esac
;;
бейсбол)
парванда $ 1 дар
ҳама)
rsstail -d -l -u https://www.espn.com/espn/rss/mlb/news
;;
тавсиф)
rsstail -d -u https://www.espn.com/espn/rss/mlb/news
;;
унвон)
rsstail -u https://www.espn.com/espn/rss/mlb/news
;;
esac
;;
esac
fi

Баёни парванда роҳи боз ҳам хубтари навиштани IF ELSE IF ELSE IF ELSE IF бошад.

Масалан, ин мантиқ

АГАР мева = банан
ОН ин
ELSE IF мева = афлесун
ОН ин
ELSE IF мева = ангур
ОН ин
Хотима АГАР

метавонад ҳамчун нав навишта шавад:

сурати мева аст
банан)
ин корро кунед
;;
афлесун)
ин корро кунед
;;
ангур)
ин корро кунед
;;
esac

Аслан, банди аввал пас аз парванда он чизе аст, ки шумо муқоиса кардан мехоҳед (масалан мева).Он гоҳ ҳар як ҷузъ пеш аз қавс чизест, ки шумо муқоиса мекунед ва агар он ба хатҳои пешина мувофиқат кунад ;; ran мезанад. Изҳороти парванда бо esac баръакс хотима меёбад (дар ин ҳолат парванда баръакс аст).

Дар скрипти rssget.sh изҳороти парванда баъзе аз лонаҳои даҳшатнокро нест мекунад, гарчанде ки он дар ҳақиқат онро такмил намедиҳад.

Барои воқеан беҳтар кардани скрипт ман бояд шуморо бо тағирёбандаҳо шинос кунам.

Рамзи зеринро бубинед:

#! / bin / bash
бейсбол = "https://www.espn.com/espn/rss/mlb/news"
сарлавҳаҳо = "https://www.espn.com/espn/rss/news"
намоиши = ""
url = ""
агар [$ # -lt 2] || [$ # -gt 2]
баъд
echo "use: rssget.sh [ҳама | тавсиф | унвон] [сарлавҳаҳо | бейсбол]";
Баромадгоҳ;
fi
парванда $ 1 дар
ҳама)
намоиши = "- d -l -u"
;;
тавсиф)
намоиши = "- d -u"
;;
унвон)
намоиши = "- u"
;;
esac
парванда $ 2 дар
сарлавҳаҳо)
url = $ сарлавҳаҳо;
;;
бейсбол)
url = $ бассбол;
;;
esac
rsstail $ намоиши $ url;

Тағирёбанда бо гузоштани ном ва сипас гузоштани он муайян карда мешавад. Дар мисоли дар боло овардашуда, таъйиноти тағирёбанда:

бейсбол = "https://www.espn.com/espn/rss/mlb/news"
сарлавҳаҳо = "https://www.espn.com/espn/rss/news"
намоиши = ""
url = ""

Бо истифодаи тағирёбанда скрипт фавран идорашаванда аст. Масалан, ҳар як параметр алоҳида баррасӣ карда мешавад ва аз ин рӯ изҳороти литсензияи IF мавҷуд нестанд.

Тағири тағирёбандаи намоиш акнун вобаста аст, ки оё ҳама интихоб кардаед, тавсиф ё унвон ва тағирёбандаи URL ба қиммати сарлавҳаҳо тағирёбанда ё арзиши бейсбол тағйирёбанда вобаста ба он, ки шумо интихоб кардед сарлавҳаҳо ё бейсбол.

Ҳоло фармони rsstail танҳо зарур аст, ки арзиши намоиш ва URL-ро барои дуруст иҷро кардан истифода барад.

Дар ҳоле, ки тағирёбандаҳо танҳо бо гузоштани ном гузошта шудаанд, дар асл онҳо бояд онҳоро истифода баранд $ дар пеши онҳо имзо гузоред. Ба ибораи дигар, тағирёбанда = арзиши арзиши тағирёбандаро ба қимор мегузорад, дар ҳоле ки $ тағирёбанда маънои, "Ба ман мундариҷаи тағирёбандаро диҳед."

Дар зер скрипти ниҳоӣ барои ин дарс оварда шудааст.

#! / bin / bash
бейсбол = "https://www.espn.com/espn/rss/mlb/news"
сарлавҳаҳо = "https://www.espn.com/espn/rss/news"
futbol = "https://www.espn.com/espn/rss/nfl/news"
баскетбол = "https://www.espn.com/espn/rss/nba/news"
use = "use: rssget.sh [ҳама | тавсиф | унвон] [бейсбол | сарлавҳаҳо | футбол | баскетбол]"
намоиши = ""
url = ""
агар [$ # -lt 2] || [$ # -gt 2]
баъд
echo $ истифодаи;
Баромадгоҳ;
fi
парванда $ 1 дар
ҳама)
намоиши = "- d -l -u"
;;
тавсиф)
намоиши = "- d -u"
;;
унвон)
намоиши = "- u"
;;
*)
echo $ истифодаи;
Баромадгоҳ;
;;
esac
парванда $ 2 дар
сарлавҳаҳо)
url = $ сарлавҳаҳо;
;;
бейсбол)
url = $ бейсбол;
;;
футбол)
url = $ футбол;
;;
баскетбол)
url = $ баскетбол;
;;
*)
echo $ истифодаи;
Баромадгоҳ;
esac
rsstail $ намоиши $ url;

Скрипти дар боло наворҳои RSS-ро муаррифӣ мекунад ва тағирёбандаи истифода мавҷуд аст, ки ба корбар мегӯяд, ки чӣ гуна скриптро истифода барад, агар онҳо ё 2 тағирёбанда дохил нашаванд ё вариантҳои нодурустро барои тағирёбандаҳо ворид кунанд.

Хулоса

Ин як мақолаи эпикӣ буд ва шояд хеле ба зудӣ рафтааст. Дар дастури навбатӣ, ман ба шумо ҳама роҳҳои муқоисаи изҳороти IF -ро нишон медиҳам ва дар бораи тағйирёбандаҳо боз бисёр чизҳоро бояд гуфт.

Инчунин корҳое ҳастанд, ки барои такмил додани скрипти дар боло овардашуда кор карда мешаванд ва ин дар дастурҳои оянда баррасӣ карда мешавад, вақте ки мо ҳалқаҳо, grep ва ифодаи муқаррариро меомӯзем.

Имрӯз Ҷолиб

Машҳур

Роҳнамо барои дастрасӣ ба Outlook.com тавассути POP дар барномаи почтаи электронӣ
Нармафзор

Роҳнамо барои дастрасӣ ба Outlook.com тавассути POP дар барномаи почтаи электронӣ

Интихоб кунед Почта дар панели чапи экрани Танзимотҳо ва -ро интихоб кунед Синхронизатсияи почтаи электронӣ. Ба поён ҳаракат кунед POP ва IMAP ҷудокунӣ. Интихоб кунед Бале зери Имконоти POP ба рухсат...
Чӣ тавр тасвири рангҳои дурустро дар Photoshop CC 2014 бо истифода аз камера ранг кунед
Нармафзор

Чӣ тавр тасвири рангҳои дурустро дар Photoshop CC 2014 бо истифода аз камера ранг кунед

Филтри бадахшони Photohop нисбат ба қабатҳои танзимотӣ барои ранг кардани тасвирҳои пешкашнашуда назар ба қаблӣ муассиртар аст. Дар ин ҷо, шумо чӣ тавр истифода бурдани онро дар якҷоягӣ бо филтри инт...