Portál AbcLinuxu, 2. května 2025 15:36
Bashible je jednoduchý framework pro psaní bashových skriptů. Vznikl jako reakce na Ansible, kdy cílem bylo vyvrátit argument některých DevOps, že shellové skripty jsou nutně nečitelné a mají nepředvídatelné chování (pročež je třeba zavádět speciální nástroje, například v Pythonu). Skripty v bashible jsou tedy stále jen bashové skripty, avšak s jasnější strukturou a pár užitečnými vlastnostmi navíc. Patří mezi ně: znovuspuštění a snadné přeskočení již vykonaných příkazů, ošetření havarujících příkazů, ošetření prázdných proměnných, jednoduché závislosti a další.
Tiskni
Sdílej:
S programováním v Perlu nemám moc zkušeností, ale jako skriptovací jazyk ho hodnotím velmi kladně.
#!/usr/bin/python import os os.system("ls -1 | tee xxx | wc -l; du xxx; rm xxx")nebo lépe:
#!/usr/bin/python import os os.system("perl -ne 'if (/^([^\s#]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+(\d+)\s+(\d+)\s*$/) { print \"$1\\n\" }' < /etc/fstab"):-P
.ble
@ Zalohuji cron.d for i in /etc/cron.d/*; do - echo "zalohuji $i" - cp $i /mnt/backup donety funkce "-" jsou tam kvůli tomu, že když např. cp selže, proces ihned skončí. Samozřejmě byste mohli použít "set -x", ale ta funkce "-" má ještě jednu vlastnost, že nedělá nic, je-li nastaven režim skip. Například pokud neexistuje /etc/cron.d, nastaví se režim skip a ani echo ani cp se nevykoná (pouze ten for cyklus proběhne, což ale není takový problém). Až další blok (tedy funkce "@") zruší ten skip režim.
@ Zalohuji cron.d - skip_if ! test -d /etc/cron.d for i in /etc/cron.d/*; do - echo "zalohuji $i" - cp $i /mnt/backup done @ Dalsi blok ...
mystatus=`srvice nginx status`jeden by očekával, že v té proměnné něco bude, jenže si nevšiml toho překlepu. Obvykle takového věci ani neošetřuje, protože kdo by očekával, že na Ubuntu nebude k dispozici příkaz "service"? Ani když bash spustíte se "set -e", tak to projde dál, protože to je příkaz v subshellu. Výsledkem je proměnná status, která je prázdná.
set_var mystatus not empty srvice nginx statustak to: a) funkce empty upozorní, že "srvice" neexistuje a skript ukončí
mystatus=`cmd` test -z $mystatus && echo "${LINENO}: uninit value!" ; exit 127${i:-if_empty_value} a nastavení set pro další možné případy už bylo uvedeno. -- Nevím, ale mně osobně nic nechybí. Dovedu si ale představit, že ve firmě máte požadavky jiné.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.