Visita Encydia-Wikilingue.amb

Shell script

shell script - Wikilingue - Encydia

Bash executando comandaments

Shell script és un Llenguatge de programació interpretada usada en diversos sistemes operatius, amb diferents dialetos depenent de l'interpretador de comandaments utilitzat. Un exemple d'interpretador de comandaments és el bash, usat en la gran majoria de les distribucions GNU/Linux.

La major part dels usuaris classificam shell script com un llenguatge de fàcil aprendizado. El primer pas és, saber el que es desitja fer, llavors veure com el codi que executa aquest comandament en shell i aquí crear, basta escriure el codi en algun editor de text i salvar. Després de salvo vostè té que executar l'arxiu, d'aquesta forma:

./"Nom de l'arxiu, sense aspas"

En el Linux el script té que tenir permís d'execució, això pot ser fet amb el comandament chmod +x "arxiu", per a exhibir un manual del bash o encara del comandament 'chmod', teclegi en la línia de comandament 'man bash' o 'man chmod' (sense aspas).

ÉS possible executar l'arxiu mateix sense modificar el permís d'execució, per exemple, si fos un arxiu escrit per a ser executado pel bash, usar:

sh ./"Nom de l'arxiu, sense aspas"

Taula de contingut

Shell

Abans de saber el que és un script en shell, és important sàpiga el que és un Shell.

En la línia de comandaments d'un shell, podem utilitzar diversos comandaments un após l'altre, o mateix combinar-los en una mateixa línia. Si col·loquéssim diverses línies de comandaments en un arxiu text simple, tindrem en mà un Shell Script, o un script en shell, ja que Script és una descripció general de qualsevol programa escrit en llenguatge interpretat, o sigui, no compilada. Altres exemples de llenguatges per a scripts són el php, perl, python, javascript i molts altres. Podem llavors tenir un script en php, un script perl i així en davant.

Una vegada creat, un ShellScript pot ser reutilizado quantes vegades sigui necessari. El seu ús, per tant, és indicat en l'automação de tasques que seran realitzades més d'una vegada. Tot sistema Unix i similars són repletos de scripts en shell per a la realització de les més diverses activitats administratives i de manteniment del sistema.

Els arxius de lote (batch - arxius *.bat) del windows són també exemples de ShellScripts, ja que són escrits en llenguatge interpretat i executados per un Shell del Windows, en general el command.amb o avui en dia el cmd.exe. Els Shells de l'Unix, no obstant això, són inumeras vegades més poderosos que l'interpretador de comandaments del windows, podent executar tasques molt més complexes i elaborades.

Els scripts shell poden ser agendados per a execució a través de la taula crontab, entre altres coses. ÉS una eina indispensable als administradors de sistemes Unix.

El Shell més comú i probablement el que posseeix més scripts escrits per a ell és també u dels més antics i simples, el sh. Aquest shell està present en tot el sistema tipus Unix, inclòs el Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Per ser el shell nativo més comú és natural que es prefereixi escriure scripts per a ell, fent el script més fàcilment portável per a un altre sistema.

Els Shells no estan directament associados a u o un altre tipus d'Unix , encara que diverses empreses comercials tinguin les seves pròpies versions de Shell. En el software lliure el Shell utilitzat en un sistema en general és exactament el mateix utilitzat en un altre. Per exemple, el bash trobat en el Linux és el mateix shell bash trobat en el FreeBSD i pot també fàcilment ser instal·lat en el Solaris o altres sistemes Unix comercials per a passar a ser utilitzat com interface directa de comandaments o com interpretador de scripts. El mateix esdevé amb el tcsh i diversos altres shells desenvolupats en el model de Software Lliure.

Característiques

Els scripts shell poden contenir estructures de programació tais com:

Exemples d'ús

Esborrar arxius vells

Esborrar periòdicament arxius més vells que 30 dies del diretório /tmp:

#!/bin/bash

cd /tmp
find . -type f -mtime +30 -delete

Aquest seria el contingut d'un shell script que sempre que fos executado esborraria arxius amb data de modificació major que 30 dies a partir del diretório /tmp del sistema d'arxius.

Notin que ell és res més del que una associació de 2 comandaments (cd i find) en un arxiu per a facilitar la repetició de la tasca. Aquest podria ser, per exemple, el contingut de l'arxiu /bin/limpatmp.sh i podríem cridar aquest script per la línia de comandaments sempre que desitgéssim repetir aquesta acció:

$ limpatmp.sh

On el símbol "$" representa el prompt de comandaments. Del punt de vista de l'usuari aquest seria més un comandament disponible per a ús.

Els scripts en shell són també molt emprats junt a la inicialização del sistema (per a acte-iniciar tasques) o com mini-aplicativos, que faciliten tasques dels usuaris, tais com muntatge de dispositius, menus d'ajuda, etc.

La seva primera línia obligatòriament comença amb u "#!" (que no es deu confondre amb un comentari qualsevol, doncs realment és una excepció; aquest parell es crida, en anglès, de shebang), informant directament al nucli com interpretador ell deurà usar, juntament amb el seu camí, d'acord amb la necessitat de cada cas.

Exemple:

#!/bin/bash

De seguida, són adicionados els comandaments desitjats, un per línia, o separats per punt i vírgula.

EXEMPLE:

$ mount -t reiserfs /dev/hda1 /mnt/hda1
$ ls /mnt/hda1
$ cp -r /mnt/hda1/* /home/user/backup
$ umount /dev/hda1

Per fi, es dóna el permís d'execució a aquest arxiu de text simple ("chmod +x arxiu").

Data Anterior

# Funció en Shell Script per a retornar a data anterior, duent en compte el mes i any.
fn_data_anterior()
{
        DIA=$D
        MES=$M
        ANY=$A
  
        # Dada DIA, MES i ANY numericos, obtem a data del dia anterior
        DIA=`expr $DIA - 1`
        if [ $DIA -eq 0 ]; then
                MES=`expr $MES - 1`
                if [ $MES -eq 0 ]; then
                        MES=12
                        ANY=`expr $ANY - 1`
                fi
                DIA=`cal $MES $ANY`
                DIA=`echo $DIA | awk '{ print $NF }'`
        fi
}

any=`dati +%Y`; 
mes=`dati +%m`;
let dia=10\#`dati +%d`;

if (( $dia<10 ));
  then
    j=0$dia;
else    
    j=$dia;
fi
dia=$j; 
j="";

D=$dia
M=$mes
A=$any

fn_data_anterior

echo $DIA $MES

Veure també

Altres projectes Wikimedia també contenen material sobre aquest tema:
Wikilivros Llibres i manuais en el Wikilivros

Connexions externes