BASH-ийн эхлэл гарын авлага - Нөхцөл ба хувьсагч

Оршил

"BASH-г эхлэн хөтөч" гэсэн 3-р хэсэгт тавтай морилно уу. Хэрэв та өмнөх хоёр өгүүллийг алгассан бол энэ гарын авлагыг бусад BASH скрипт хөтөчтэй хэрхэн өөрчилснийг мэдэхийг хүсэх байх.

Энэ гарын авлага нь BASH-д бүрэн шинийг бичиж байгаа бөгөөд би уншиж сурч байхдаа уншигчдаа сурах болно. Би BASH-д шинэхэн хүн бол програм хангамжийн хөгжүүлэлтийн талбараас гардаг ч Windows-ийн платформын хувьд миний бичсэн зүйлс ихэнхдээ байсан.

Эхлээд хоёр хөтөчийг үзэж болно:

Хэрэв та BASH скриптэд шинээр орсон бол үүнийг үргэлжлүүлэхээсээ өмнө эхний хоёр удирдамжийг уншихыг зөвлөж байна.

Энэ гарын авлагад хэрэглэгчийн оролтыг турших нөхцөлт мэдэгдлийг хэрхэн ашиглах, скрипт хэрхэн ажиллахыг хянах талаар тайлбарлах болно.

Rsstail суулгах

Энэ гарын авлагыг дагахын тулд та RSS feed- ийг уншихад хэрэглэгддэг rsstail нэртэй тушаалын мөрний програмыг суулгах хэрэгтэй болно.

Хэрэв та Debian / Ubuntu / Mint дээр тулгуурласан түгээлтийн төрлийг ашиглаж байгаа бол дараах:

sudo apt-get install rsstail

Fedora / CentOS гэх мэтийг дараах байдлаар бичнэ:

yum install rsstail

OpenSUSE -г дараах байдлаар бичнэ:

zypper суулгах rsstail

IF мэдэгдэл

Термыг нээгээд доор дурдсаныг бичин rssget.sh гэж нэрлэгдсэн файл үүсгэ:

sudo нано rssget.sh

Нано редактор дотор дараах текстийг оруулна уу:

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

CTRL ба X товчийг дараад файлыг хадгалаад дараа нь CTRL болон X дарна.

Скриптийг дараах байдлаар бичнэ үү:

sh rssget.sh

Скрипт linux.about.com RSS тэжээлээс нэрсийн жагсаалтыг буцаах болно.

Энэ нь хэтэрхий их ач холбогдолтой скрипт биш юм. Учир нь энэ нь нэг RSS тэжээлээс гарч байгаа нэрийг авах боловч энэ нь Линукс.about.com RSS тэжээлийн замыг санах хэрэгтэй.

Нэкан дахь rssget.sh скриптийг нээгээд файлыг дараах байдлаар харуулаарай:

#! / bin / bash

[$ 1 = "verbose"]
Дараа нь
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Доор дурдсаныг бичээд скриптийг дахин ажиллуулаарай:

sh rssget.sh дэлгэрэнгүй

Энэ удаад RSS feed нь гарчиг, холбоос болон тайлбартай хамт буцаж ирдэг.

Скриптийг бага зэрэг нарийвчлан шинжлэе:

#! / Bin / bash бидний бичдэг скрипт дээр гарч ирнэ. Дараагийн мөр нь хэрэглэгчээс өгсөн эхний оролтын параметрийг үндсэндээ хардаг бөгөөд "verbose" гэсэн үгтэй харьцуулдаг. Хэрэв оролтын параметр ба "verbose" гэсэн үгтэй таарвал мөр хоорондын зайтай байна.

Дээрх скрипт нь мэдээж алдаатай юм. Хэрэв та оролтын параметрийг бүрэн хангаж чадахгүй бол яах вэ? Хариулт нь гэнэтийн операторуудын шугамын дагуу алдаа болно.

Бусад томоохон алдаа бол "verbose" гэсэн үгийг өгөхгүй бол огт юу ч тохиолддоггүй. Хэрэв та verbose үгийг өгөхгүй бол скрипт нь гарчгийн жагсаалтыг буцаах болно.

Rssget.sh файлыг засварлахын тулд нано хэрэглээрэй бөгөөд кодыг дараах байдлаар өөрчилнө:

#! / bin / bash

[$ 1 = "verbose"]
Дараа нь
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-р мөрөнд байгаа бөгөөд бусад мэдэгдэлийг танилцуулах болно. Үндсэндээ эхний скрипт нь "verbose" гэсэн үг нь 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

Би үгнээс салахаар шийдсэн бөгөөд бүгдийг нь сольсон. Энэ бол чухал хэсэг биш юм. Дээрх скрипт ELIF нь 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;
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 файл руу буулгах.

Дээрх скрипт нь RSS feed-т "about.com" эсвэл "lxer.com" аль нэгийг сонгох боломжийг олгодог 2 параметрийг танилцуулав.

Үүнийг ажиллуулахын тулд та дараах зүйлсийг бичнэ үү:

sh rssget.sh тухай бүгд aboutdotcom

эсвэл

sh rssget.sh бүх lxer

Та мэдээж бүх тайлбар эсвэл тайлбарыг зөвхөн тайлбар эсвэл зүгээр л нэрээр орлуулж болно.

Дээрх код нь дээр дурдсан хоёр дахь параметр нь aboutdotcom гэж байгаа бол дараа нь өмнөх скриптээс нэг адил байгаа statement -г үзнэ үү хэрэв хоёр дахь параметр нь lxer дараа нь дотоод гарчгийг харвал хэрэв дахин гарчиг гарчиг, тайлбар эсвэл бүх зүйл.

Энэ скрипт нь зөвхөн IF мэдэгдлийн жишээ хэлбэрээр өгөгдсөн бөгөөд энэ скрипттэй маш олон алдаа байдаг бөгөөд тэдгээрийг бүгдийг нь тайлбарлах өөр нэг зүйл авах болно. Хамгийн гол асуудал бол өргөтгөх боломжгүй зүйл биш юм.

Та өдөр тутмын Линуксийн Хэрэглэгч эсвэл Линукс Өнөөдөр өөр RSS тэжээл нэмэхийг хүсэж байна гэж төсөөлөөд үз дээ? Уг скрипт нь асар том болж, хэрэв та дотоод өөрчлөлт хийхийг хүссэн бол олон газраар солих хэрэгтэй болно.

Хэдийгээр үүрлэсэн ч гэсэн цаг хугацаа, газар байх ёстой ч гэсэн тэдгээрийг бага зэрэг ашигладаг байх ёстой. Кодыг таниулахын тулд ихэвчлэн өөрийн кодыг ашиглах шаардлагагүй байдаг. Би энэ сэдвийг ирээдүйн өгүүллээр ярих болно.

Одоо хүмүүс duff параметрийн параметрүүдийг оруулах асуудлыг засаж үзье. Жишээ нь хэрэглэгч дээрх "aboutdotcom" -ээс өөр ямар нэг зүйлийг оруулахад 2-р параметрийн хувьд LXER-ийн RSS feed-ээс оруулах зүйл нь 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;
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

Анхаарах хамгийн эхний зүйл бол скрипт нь одоо маш их хэмжээгээр нэмэгдэж байгаа бөгөөд танд хяналтын мэдэгдэл гарч ирснээр хэрхэн хурдан шалгаж болохыг харж болно.

Энэ скриптэд чухал хэсэг нь IF statement || Тайлбар 2-р мөр 4 дэх мөрөнд.

| | OR гэж нэрлэдэг. Тэгэхээр [$ 2 = "aboutdotcom"] || гэсэн мөрөнд [$ 2 = "lxer"] 2-р параметр нь "aboutdotcom" эсвэл "lxer" -тэй тэнцүү эсэхийг шалгана. Хэрэв тийм биш бол ОУСБ-ын мэдэгдэл бүрэн дууссан бол хамгийн их IF-ийн хувьд өөр ямар нэгэн тодорхойлолт байхгүй болно.

Үүнтэй адил шугамын 4 дээр [$ 1 = "all"] | мөрөнд [$ 1 = "тайлбар"] || [$ 1 = "гарчиг"] 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] . Хэрэв та оролтын параметрийн тухай өгүүллийг уншиж байвал $ $ оролтын параметрийн тоог тоолохыг мэднэ. -eq нь тэнцүү байна. Тиймээс ОУХДНС-ын мэдэгдэл нь хэрэглэгч 2 параметрийг оруулсан бөгөөд хэрэв тэд зүгээр л гаралгүйгээр гаргаагүй бол шалгадаг. (Ялангуяа нөхөрсөг биш).

Энэ гарын авлага их хэмжээгээр нэмэгдэж байгааг би мэднэ. Энэ долоо хоногт хамаагүй илүү их зүйл хийх шаардлагагүй боловч бид дуусгахаасаа өмнө скриптийг цэвэрлэхэд туслахыг хүсч байна.

Нөхцөл байдлын мэдэгдлийн талаар мэдэх хэрэгтэй хамгийн сүүлчийн тушаал бол Казисийн тухай мэдэгдэл юм.

#! / 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

Кэйс жишээ нь ELF ба ELSE IF ELSE IF-ийг бичихэд илүү тохиромжтой арга юм.

Жишээ нь энэ логик

Жимс = банана
Үүний дараа
ELSE IF fruit = жүрж
Үүний дараа
ELSE IF fruit = усан үзэм
Үүний дараа
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"
дэлгэц = ""
url = ""

хэрэв [$ # -lt 2] || [$ # -gt 2]
Дараа нь
echo "хэрэглээ: rssget.sh [all | description | title] [aboutdotcom | lxer]";
гарах;
fi

$ 1 дахь тохиолдолд
бүх)
дэлгэц = "- d -l -u"
;;
тайлбар)
дэлгэц = "- d -u"
;;
гарчиг)
дэлгэц = "- 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 хувьсагч нь aboutdotcom хувьсагчийн утга эсвэл lxer хувьсагчийн утгыг tentang aboutdotcom эсвэл lxer-ийг сонгосон эсэхээс хамаарна.

Rsstail тушаал нь одоо зөв дэлгэц болон urlын утгыг ашиглах ёстой.

Хувьсагчуудыг зөвхөн нэр өгч тохируулснаар тохируулагдсан боловч үнэндээ тэдгээрийг ашиглахын тулд та $ тэмдгийг өмнө нь байрлуулах хэрэгтэй. Өөрөөр хэлбэл хувьсагч = хувьсагч утга хувьсагчид утгатай бол хувьсах утга нь хувьсагчийн агуулгыг өгдөг.

Дараах нь энэ гарын авлагын сүүлчийн скрипт юм.

#! / 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"
usage = "хэрэглээ: rssget.sh [all | description | title] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
дэлгэц = ""
url = ""

хэрэв [$ # -lt 2] || [$ # -gt 2]
Дараа нь
$ цэсийг ашиглах;
гарах;
fi

$ 1 дахь тохиолдолд
бүх)
дэлгэц = "- d -l -u"
;;
тайлбар)
дэлгэц = "- d -u"
;;
гарчиг)
дэлгэц = "- u"
;;
*)
$ цэсийг ашиглах;
гарах;
;;
esac

$ 2 дахь тохиолдолд
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
$ цэсийг ашиглах;
гарах;
esac

rsstail $ харуулах $ url;

Дээрх скрипт нь илүү олон RSS тэжээлийг танилцуулж байгаа бөгөөд хувьсагчийн буруу тохиргоонуудыг оруулаад хоёр хувьсагчийг оруулахгүй бол хэрэглэгчид хэрхэн скриптийг хэрхэн ашиглахыг хэлж өгдөг.

Хураангуй

Энэ бол эпик нийтлэл байсан бөгөөд хэтэрхий удсан байж магадгүй юм. Дараагийн гарын авлагад IF мэдэгдлийн хувьд харьцуулах бүх хувилбаруудыг харуулъя. Хувьсагчийн талаар ярих нь илүү их байна.

Дээрх скриптийг сайжруулахын тулд илүү их зүйл хийж болох бөгөөд энэ нь гогцоо, grep болон тогтмол илэрхийлэлийг хайхад ирээдүйн удирдамжид тусгагдах болно.

Хэрхэн яаж (inux.about.com) хэсгүүдийг хэрхэн яаж хийхийг үзэхийн тулд inux.about.com-ийн хэсэг хэсгүүдийг шалгахын тулд Windows болон Ubuntu-г илүү ашигтай гарын авлагаас олж авахын тулд GNOME хайрцаг ашиглан виртуал машин үүсгэх .