Linux uchun eng keng tarqalgan skript tilidir?

Biz Linux tizimlari uchun skriptlarni yozmoqdamiz, bu erda eng keng tarqalgan Linuxni mavjud scripting tilidan foydalanishga doir ba'zi bahslar bo'lib o'tdi. Bash, SH, Posix? Nima?

25
Men sh ni taxmin qilardim.
qo'shib qo'ydi muallif Scott W, manba

8 javoblar

Turing-tugallanadigan va boshqa dasturlarni chaqirishga qodir bo'lgan har bir unix-kabi operatsion tizimda mavjud bo'lgan ikkita dasturiy vosita mavjud: awk va sh , Bourne/POSIX shell oilasi. AWK matnlarni qayta ishlashga qaratilgan (u qo'shimcha ixtisoslashtirilgan dasturlarni to'ldiradi), sh esa dasturlarni bir joyga qo'yish uchun yopishtiruvchi til bo'lishga yo'naltirilgan. Sh Linuxda va UNIX dunyosida the universal skript tilidir.

POSIX standarti sh va uning bilan bog'liq bo'lgan xizmatlarning majburiy xususiyatlarini belgilaydi. Unix-o'xshash tizimlarning ko'pchiligi POSIX 1003.1-2004 ga javob beradi (aka Single Unix v3, aka Open Group Base Specification issue 6 ); Ushbu standartning eng so'nggi versiyasi POSIX 1003.1-2008 (aka Single Unix v4, aka Open Group Baza spesifikatsiyasi 7-son ).

Har bir Linux va UNIX yoki Unix kabi tizimda /bin/sh yo'lida Bourne tarzi qobig'i mavjud va antik bo'lmagan tizimda POSIX-mos keluvchi qobiq (vaqti-vaqti bilan bugni taqiqlash) mavjud. Har bir zamonaviy unix-o'xshash tizim (Linuxni o'z ichiga oladi) shebangs ni qo'llab-quvvatlaydi, shuning uchun avtomatik ravishda /bin/sh , agar birinchi qator #!/bin/sh bo'lsa. sh boshqa joyga joylashtirilgan POSIX tizimlari mavjud (odatda Unix-ga o'xshash deb o'ylamagan operatsion tizimlarda emulyatsiya qatlamlari).

Ichki Linux tizimlarida mavjud bo'lgan barcha POSIX funktsiyalarini amalga oshirmayotgan BusyBox »tizimi yo'qolgan bo'lishi mumkin. BusyBox kichik o'lchamli tizimlarni joylashtirish uchun ko'plab kompilyatsiya variantlari mavjud, shuning uchun oldindan nima kutish kerakligini bilish qiyin, siz skriptlarni ma'lum bir qurilmaga moslashtirishingiz kerak. BusyBox sh va turli xil kommunal xizmatlarning eng keng tarqalgan kichik izlari hisoblanadi; duch kelishi mumkin bo'lgan yana bir narsa Androidda juda kam bo'lgan qobiq muhiti (keyingi versiyalar kamroq anemiya).

Katod bo'lmagan Linux tizimlari deyarli doimo

dash yoki bash /bin/sh deb yozing. Dash - bu POSIX funktsiyalaridan kamroq foydalanadigan kichik va tezkor qobiq. Bash ko'proq xususiyatga ega bo'lgan katta qobiqdir.

Qo'shilmaydigan Linux tizimlari deyarli har doim /bin/bash sifatida o'rnatiladi. Shuning uchun, o'rnatilgan bo'lmagan Linux tizimlarida portativlik uchun siz bash mavjudligini taxmin qilishingiz mumkin. Bash-ning foydali qo'shimcha xususiyatlari orasida dizaynerlar, nuqtali fayllarni moslashtira olish qobiliyati, quvvatlardagi barcha buyruqlar qaytariladigan holatini, fayl vaqtlari uchun qo'shimcha taqqoslash operatorlarini olish uchun pipestatus o'zgaruvchisi va (oxirgi versiyalarda) muntazam ifodani moslashtirish.

Qobiq dasturiy ta'minotining xususiyatlaridan biri shundaki, siz faqatgina sh dasturidan foydalanmayapsiz, shuningdek,

vazifalar . Linuxdagi fayllarni manipulyatsiya va matnni qayta ishlash yordam dasturlarining ko'pchiligi GNU coreutils (ko'milgan tizimlarda , odatda BusyBox-dan).

Agar siz Linuxdan tashqariga ko'chmaslik kerak bo'lsa, sizning eng yaxshi pul tikishingiz POSIX-ga o'tadi. Boshqa unix variantlari bash o'rnatilgan bo'lishi mumkin emas (bash OSX standart o'rnatish qismidir, lekin * BSD va ixtiyoriy paketlardagi ixtiyoriy paket). Linux va OSX (masalan, * BSD va savdo unices) tashqari, deyarli barcha unix variantlari Korn shell ning ba'zi versiyasiga ega. kam pdksh . Bash-ning qulay kengaytmalari ko'pchiligidan ksh-dir, shuning uchun har ikkalasida ham ishlashi mumkin bo'lgan skriptlar yozish foydali bo'lishi mumkin, ammo bosh yoki ksh ning noma'lum tizimda joylashgan joylarini aniqlash bir oz og'riq bo'lishi mumkin.

Qobiq hamma narsani qilolmaydi. Agar siz murakkabroq tilga muhtoj bo'lsangiz, ikkita keng tarqalgan variant - Perl va Python (har qanday narsa unix scripting tili sifatida ortda qoladi). Perl an'anaviy skript tilidir va bir nechta embossed Linux tizimlari unga ega emas, lekin Python (asosan Ubuntu uchun tavsiya etilgan skript tiliga aylantirildi) yer qozonmoqda. Linuxdan tashqari dunyoda Perl OSX va OpenBSD-da asosiy o'rnatishning bir qismidir; u ixtiyoriy, lekin juda keng tarqalgan bo'lib FreeBSD-ga o'rnatiladi va ixtiyoriy, lekin tez-tez NetBSD-da o'rnatiladi.

39
qo'shib qo'ydi
Ajoyib bir ogohlantirish, ammo - FreeBSD bir necha bor avval standartni o'rnatganidan Perlni tashladi. Bundan tashqari, Perlni bazasida o'rnatmagan boshqa distrolarni ham bilmayman.
qo'shib qo'ydi muallif Mitchell, manba
@dubiousjim To'g'ri, agar siz unicionlarni turli xil variantlar bo'yicha hisoblasangiz, aslida aslida o'rnatishning ikkita qismi bor (lekin ular ikkita eng keng tarqalgan variant: Linux va OSX). NetBSD-ning va Debian/Ubuntu dashlari kabi FreeBSD-lar, Almquist qobig'ida ash deb atalgan bir nechta dasturlardan biri).
qo'shib qo'ydi muallif Valters Vingolds, manba
@dubiousjim Faqat Linux (o'rnatilgan bo'lmagan yoki amalda yaxshi muvofiqlashtirilgan) va OSX standart sozlamalari uchun bash bor; * BSDda pdksh yoki mksh mavjud, va savdo belgilar ATT kshga ega.
qo'shib qo'ydi muallif Valters Vingolds, manba
@ TC1 Perl har doim NetBSD-da ixtiyoriy edi. OpenBSD-ning bazaviy tizimida.
qo'shib qo'ydi muallif Valters Vingolds, manba
Ko'pincha bunga qo'shilaman. Faqat bir nechta farqlar: * Ba'zi distrolar BusyBox-ga asoslangan, lekin mutlaqo ko'milmaydi (men foydalanaman, Alpin). (Aytaylik, ishlamaydi deyarli "deyarli har doim" deb javob beradi.) * BSDs Unix kabi tizimlarning katta sinfidir. * Dash deyarli har bir narsani bajarishi mumkin, faqat ba'zan ko'proq g'amxo'rlik talab qiladi. * Agar sizga ko'proq murakkab til kerak bo'lsa, ha Perl va Python - eng keng tarqalgan tanlovdir, ammo awk yanada keng tarqalgan va ko'p maqsadlar uchun etarli. Bundan tashqari, odatda kam. Biroq, bu Perl va Pythonga nisbatan engilroq.
qo'shib qo'ydi muallif dubiousjim, manba
@Gilles, men aytgan gaplarim, siz BSDda boshni qabul qila olmaysiz. FreeBSD-ning sh (hozir foydalanadigan men) shunchaki ashga o'xshaydi. Yoki sizning fikringiz BSD-larning farqli o'laroq emasligi, ya'ni OSX Linux-dan tashqari yagona tizim bo'lib, unda bash asl qiymati emas.
qo'shib qo'ydi muallif dubiousjim, manba
"qisman kuchaygan ..." Bu Fedora va RHEL tizimlarida hamma narsa talab etiladi.
qo'shib qo'ydi muallif Bluenotescitric, manba

Mavjudligi bo'yicha:

  1. , lekin POSIX-da ko'rsatilgan ob'ektlarga yopishib oling.
  2. bash, lekin shabandada uni aniq belgilashni unutmang, yoki uning o'rniga chizish mumkin.
  3. Python. Bu deyarli hamma uni ishlatadi.
  4. Perl. Lekin siz uni yozmoqchisiz.

Shundan so'ng, hech kim haqiqatdan g'amxo'rlik qilmaydi, chunki sizlar bilan faqat qila olmaysiz.

11
qo'shib qo'ydi
Perl - # 3. Va siz uni yozib oling, bonus! :)
qo'shib qo'ydi muallif Warren Young, manba
Ruby va PHP Perldan ilhomlangan. Python - bu fizikani sinovdan o'tkazish natijasidir, unda ular anti-Perllarni superkolliderda yaratadilar. (Pythonga qarshi hech narsa yo'q, plyus va minus, plusses va minuslar.)
qo'shib qo'ydi muallif Warren Young, manba
Wot! Hechqisi yo'qmi? Sharmandalarcha :-)
qo'shib qo'ydi muallif RaajTram, manba
Perl bilan "yozing" degan so'zlar nimani anglatadi?
qo'shib qo'ydi muallif Burki, manba
Men hali ham tushunmayman, lekin hech qachon o'ylamayman.
qo'shib qo'ydi muallif Burki, manba
@ashwin: Yo'q, python Perlning evolyutsiyasi yoki hatto o'xshash emas. Perl, sysadmins uchun sysadmins tomonidan tildir. python, programcılar uchun programcılar tomonidan tayyorlangan bir tildir. Bu farq juda muhim. Ularning ikkalasi ham foydalanishadi va foydalanish holatlarida bir-biriga o'xshash narsalar bo'lishi mumkin, biroq ayrim vazifalar uchun yaxshiroq tanlovdir va boshqalar uchun python ravshan.
qo'shib qo'ydi muallif Carlo Borja, manba
@Ignacio perl ning # 4 va python # 3 ga rozi ekanligimga roziman. Buning sababi aniq. Python Perlning evolyutsiyasi deb o'ylayman.
qo'shib qo'ydi muallif blackcat721, manba
Men pythondan oldin PERLni qo'ygan bo'lardim, u ko'pincha linux tizimlarida o'rnatilgan.
qo'shib qo'ydi muallif Jamal, manba
@ user7000: Men uni yozmayman.
qo'shib qo'ydi muallif Bluenotescitric, manba

Odatda, sh deyman, lekin siz Linuxni ko'rsatganingiz uchun bash deyman - bu har bir Linux tizimida (yaxshi, minimalizmni fath qilgan qorong'i pedantik jihatdan kichiklar :).

Agar siz linux bo'lmagan ko'chmaslik haqida g'amxo'rlik qilmasangiz (va siz kichik taqsimotlarda yoki plastmassa routerlari kabi ko'milgan Linux qurilmalarida ishlashingizga hojat yo'q bo'lsa), siz, shuningdek, kodi sh orqali taqdim etadi. Aks holda sh dan foydalaning.

bash (va sh ) dan keyin, Linux uchun eng "universal" skript tilining keyingi kodi awk mawk yoki gawk . Agar siz ochiq-oydin awk bilan yopishib olsangiz va javkizmlardan saqlansangiz, skriptingiz deyarli barcha Linux tizimlarida yaxshi ishlashi kerak (u kichik dağıtıcılarda yoki katıştırılmış qurilmalarda kam bo'lishi mumkin). Ko'pchilik Linux tizimlarida mavjud bo'lgan mawk va gawk mavjud, ammo ba'zi bir distrolarda (masalan, debian) mawk Agar siz istasangiz gawk ni o'rnatishingiz mumkin.

Keyingi perl bo'lishi mumkin. AFAIK, bazaviy perl tili barcha tarqalgan Linux distroslariga sukut bo'yicha o'rnatilgan bo'lib, bu yaxshi tanlovdir. Yaxshiyamki, Perl5 versiyasi bilan juda kam versiya uyumsuzluğu bor (Perl 5.12 bo'lsa-da, yoki 5.14 bo'lishi mumkin, albatta, taxminan 15 yil davomida bekor qilingan ba'zi qorong'u xususiyatlarini yo'q qilish uchun atrofida bor edi ... ulardan foydalanish uchun ko'p ogohlantirish) sizning kodlash uslubingiz chindan ham g'aroyib bo'lsa va o'n yil mobaynida "buni qilmang" ogohlantirishlarini e'tiborsiz qoldirishni yoqtirmasangiz, sizning perl skriptlar deyarli hamma joyda yaxshi ishlaydi. Til kuchli va qudratli bo'lib, awk va sed mumkin va ko'p narsalarni qila oladi. sh da odatiy jihatdan juda yaxshi (masalan, tashqi buyruqlarni ishlatish va chiqishni ishlatish/quvvati) yaxshi ishlarni amalga oshirishi mumkin. Standart perl kutubxonalari ham juda keng qamrovli - faqat asosiy asoslardan ko'proq narsani o'z ichiga oladi.

Perl bilan yagona yondoshish - bu sizning fikringizni bilishingiz mumkin bo'lgan (va undan ko'p narsa yuz berishi mumkin emas) ko'p narsalarni bajarish uchun CPAN modullarining katta kutubxonasi ham bor va ularning barchasi ham perl . Ular odatda juda yuqori sifatga ega, shuning uchun ularni ishlatish odatiy holga tushib qolish oson - agar ularni ishlatsangiz, ularni o'rnatganligiga ishonch hosil qiling. Ko'pgina CPAN modullari Linux uchun oldindan paketlangan, qolgan qismi esa CPAN modulini .deb to'plamiga aylantirish uchun cpan vositasi (yoki dh-make-perl ) bilan osonlik bilan o'rnatiladi. )

Keyingi menda python deyishni xohlayman, lekin, albatta, qila olmayman. Python haqida ko'p narsa bor, lekin u ko'pincha Linux tizimlarida sukutga qo'shilmaydi, va, albatta, versiyaning uyg'unligi (python uchun ham, uning "standart" liblar uchun ham) to'liq shambles hisoblanadi. Ba'zi distroslar chalkashlikni ajratish uchun juda yaxshi harakat qilishadi, ba'zilari esa yo'q. Python dasturchilar tomonidan dasturchilar tomonidan tuzilgan (sysadminsdan farqli o'laroq) tilga aylanganligi va ularning kodi o'rnatilishning umuman mavjud emasligi haqida o'ylamayapti. muhimdir .... ularning kodi, albatta, super maxsus dir, shuning uchun mavjud tizimlarga integratsiya kabi zerikarli narsalarga e'tibor berishga hojat yo'q.

(Bu erda mening sargasmimdan noto'g'ri fikrni olmang - men piton tilini chindan ham yoqtiraman, versiya va qaramlikni boshqarish PITA ekanligidan nafratlanaman, 20+ yildan beri qorong'i uchun qo'lda ovchilik davriga o'xshaydi bit kodlar va tuzatilgan narsalarni olish uchun sizning mulkingiz * nix)

4
qo'shib qo'ydi
Men bu eski post ekanligini bilaman, lekin buni engishning eng yaxshi usuli shabandagi qaysi versiyani (masalan, /usr/bin/python2 , /usr/bin/python3 ).
qo'shib qo'ydi muallif Jesus, manba

Men ksh93 yoki hatto POSIX ta'mini kuzatishni tavsiya qilaman va har doim bash/zsh dan foydalanishingiz mumkin.

Va Debian-based distro ishlatish mawk default wok kabi gawk emas. Shunday qilib, mawk tezroq bo'lgani sababli, gawk qo'shimchalaridan qochinglar.

1
qo'shib qo'ydi

Perl FreeBSD, NetBSD yoki DragonflyBSD bazasida emas, balki uzr. OpenBSD bazani o'rnatish uchun Perl-ga ega. OS X bugungi kunda sertifikatlangan UNIX va ba'zi bir darajadagi UX versiyasi deb o'ylashlari mumkin va Perl, Python va ruby bazalarida mavjud.

Ko'pgina xususiy UNIXsning bazasida Perl yo'q, masalan Solaris, AFAIK na HP-UX yoki IBM AIX ham ...

1
qo'shib qo'ydi
Solaris missing Perl haqida sizning fikringiz noto'g'ri. Perl, Solarisning majburiy yadro tarkibiy qismidir, hech bo'lmasa 2005 yildan beri (Solaris 10).
qo'shib qo'ydi muallif Eric Scrivner, manba

Men bu erda mutaxassislar sizni hal qilishga yordam beradigan ajoyib takliflarni taqdim etganiga ishonaman. Turli shelllarning mavjudligi va mavjudligi boshqa lavozimlarda yaxshi tasvirlangan.

Boshqa bir qaydda, men siz edim, men ham skriptlar bilan erishmoqchi bo'lgan maqsadni ko'rib chiqardim. Har bir vositaning o'ziga xosligi va kamchiliklari bor. Shunday qilib, men asosan Python'dan foydalansam ham, har holda bu usuldan foydalanmayman.

Men bir nechta stsenariylarni o'ylab, ular uchun foydali vositalar haqida gapirishim mumkin.

FTP fayllari uchun-va-fro; ularni qayta ishlash; elektron pochta xabarnomalarini yuborish; va hokazo

Bu holda qobiq (Masalan, Bash) bilan yopish va har xil xizmat dasturlarini (masalan, ftp , cron va pochta </​​code >). Ko'pgina yirik kompaniyalarda odatiy holatlar mavjud.

Tez matnli ishlov berish

Yana bir marta, qobiq. grep , awk , sed , paste va boshqalar kabi yordamchi dasturlar juda qulaydir.

Qurmoq

C/C ++ domenida bu uchun universal vosita make . Java dunyosi Apache ANT ni afzal ko'radi.

Deployment va masofadan boshqarish

Yoki qobiq yoki Python. Masalan, scp va rsync , fayllarni nusxalash yoki fayllarni sinxronlashtirishda juda foydali bo'ladi.

Boshqa tomondan Python, mato nomli juda foydali modulga ega. Masalan, fayllarni nusxalash, ba'zi bir jarayonlarni to'xtatish, serverni va shunga o'xshash usullarni yaratish uchun yanada murakkab operatsiyalar uchun foydalidir. Bundan tashqari, Python shuningdek, tegishli paketlarni yuklab olish va o'rnatish orqali muayyan bog'liqliklarni bartaraf eta oladigan pip modulini taqdim etadi.

(Yuqoridagi takliflar juda ko'p funktsiyalarga qaraganda juda ko'p, ammo xususiyatlari ga e'tibor bermasligini e'tiborga oling.)

0
qo'shib qo'ydi

Mavjudligi ushbu tartibda bir joyda bo'ladi degan bo'lardim:

  1. sh
  2. awk
  3. Perl (men hali biror * nixni, shu jumladan, BSDsni ko'rmoqchiman)

Python yaxshi tilga o'xshash bo'lsa-da, Ubuntu, ehtimol shunday bo'lsa-da, asosiy o'rnatish bilan birga kelgan biron-bir operatsion tizimni ishlatmadim?

0
qo'shib qo'ydi

Bash emas. POSIX sh-ga o'xshash chiziq yoki kulga yozing. Bu ko'p jihatdan universal bo'ladi. O'ylaymanki, boshqa hech narsa yo'q, bu hatto yaqin raqib. (Va bu menimcha, sharhlovchilarning biri sifatida "fikr" emas, balki haqiqiy bir savol.)

Agar sh-ga qaraganda biroz kuchliroq narsaga muhtoj bo'lsangiz (masalan, agar siz haqiqiy assotsiativ majmualarni istasangiz) awk foydalaning. (Gogg kengaytmalaridan qochish, awk ning ko'plab versiyalari mavjud, ammo u erda asosan umumiylik mavjud).

0
qo'shib qo'ydi
@WilliamPursell Bash to'plami Essential Debian-da (ya'ni siz tizimni shlangasiz, deb ogohlantirishlar bilan olib tashlash uchun hooplardan o'tishingiz kerak) etiketlanadi. Bash Linuxga integratsiyalangan bo'lmagan tizimlar haqida umumiy ma'lumot.
qo'shib qo'ydi muallif Valters Vingolds, manba
Linuxning qaysi variantlari bash ni qo'llab-quvvatlamaydi?
qo'shib qo'ydi muallif John Smith, manba
Albatta, bash har qanday Linux qutisiga o'rnatilishi va ishga tushirilishi mumkin, ammo juda ko'p debian foydalanuvchilari faqat dash ni o'rnatadi va bash .
qo'shib qo'ydi muallif Tom, manba
Mening kichik distroim (Alpin) BusyBox-ga asoslangan; ularning birortasini o'rnatmaguncha, gawk yoki bash yo'q. Bundan tashqari, Linuxni cheklashning hojati yo'q. Agar Bash/gawk-ni sukut bo'yicha qabul qilmasa BSDs-ga ham kirish mumkin.
qo'shib qo'ydi muallif dubiousjim, manba
@JonathanLeffler: O'rnatilganlar aksincha faqat Busyboxga ega bo'lishi mumkin.
qo'shib qo'ydi muallif Matthieu Riegler, manba
Linux-da awk-universal-gawk; Sukut bo'yicha boshqa variantga ega bo'lgan har qanday taqsimot haqida o'ylay olmayman.
qo'shib qo'ydi muallif Bluenotescitric, manba