LeoBenelli
Personal WebPage


BASH/SCRIPT

 

 

PARAMETRI

 

Variabili

Descrizione contenuto

$0

Nome dello script

$1,$2,...

Primo, Secondo parametro,

$*

Tutti i parametri in un'unica stringa divisi dal primo carattere di IFS.

$@

Tutti i parametri divisi invece in diverse stringe ognuna divisa da doppie virgolette e separate da spazi.

 

 

 

COMANDI

Comando

Descrizione

for...done

for nome [in lista]
do
comandi che possono puntare a <nome>
done

for xfile in *
do
cat $xfile
done

[Lista] non necessariamente deve essere riferito a files, ma puo' essere anche una lista di valori divisi da un carattere, per identificare tale carattere si usa la variabile di ambiente IFS.
IFS=:
for dir in $PATH
do
....
done

Se [in lista] non e' specificato prende di default $@ che corrisponde alla lista di parametri passati allo script.

if.[elif]..fi

if [condizione] ; then
comandi
fi

if [ -f $xfile ]; then
cat $xfile
fi

case

Case [Espressione] in
[Pattern1] )
comandi ;;
[Pattern1] )
comandi ;;
...
esac

for xfile in *
do
case $xfile in
*.c )
vi $xfile ;;
*.bak | *.tmp )
cp $xfile /tmp
rm $xfile ;;
esac
done

while...done
until...done

while [condizione]
do
comandi
done

until [condizione]
do
comandi
done

Con While si rimane nel ciclo fino a quando la condizione e' vera..

Con Until fino a quando e' falsa

select do...done

Permette di visualizzare un menu di selezione :

select nome [in lista]
do
comandi che possono puntare a <nome>
done

select xfile in *
do
cat $xfile
done

Se [in lista] non e' specificato prende di default $@ che corrisponde alla lista di parametri passati allo script.

Con select propone un opzione con un codice progressivo per ogni elemento della lista passata e permette a l'utente di selezionare il codice desiderato una volta scelto, [nome] avra' il contenuto dell'opzione mentre la variabile di ambiente REPLY il codice assegnato.

Per uscire dal loop e' possibile usare il comando break.

test

int1 -eq int2

=

Confronto tra Interi

int1 -ge int2

>=

int1 -gt int2

>

int1 -le int2

<=

int1 -lt int2

<

int1 -ne int2

<>

str1 = str2

True se =

Confronto tra stringhe

str1 != str2

True se <>

str

True se non nullo

-n str

True se length > 0

-z str

True se length = 0

-d <nome>

Se <nome> e' una Directory

Verifica condizioni filesystem

-f <nome>

Se <nome> e' un normale file

-r <nome>

Se <nome> puo' essere letto dal processo

-s <nome>

Se lunghezza di <nome> e' <> 0

-u <nome>

Se <nome> esiste e se ha il setuid impostato.

-w <nome>

Se <nome> puo' essere scritto dal processo

-x <nome>

Se <nome> e' un eseguibile

! <Espr>

Operatore Not

Operatori logici

<Espr1> -a <Espr2>

Operatore And

<Espr1> -o <Espr2>

Operatore Or

 

 

FUNZIONI

Funzioni

Descrizione Contenuto

#!/bin/bash
visualizza ()
{
echo $0
echo $1
}

if [ 12 -gt 2 -a 12 -eq 2 ]; then
visualizza ["VERO"]
else
visualizza ["Falso"]
fi

Per usare le funzioni va indicato il nome con () e le istruzioni della funzione vanno indicate tra una coppia di parentesi graffe.

Per usare la funzione indicare il nome seguito da [] per indicare i parametri [par1,par2 ...].

ATTENZIONE AGLI SPAZI.

 

COSTRUZIONE FLOPPY BOOT/ROOT (non terminato)

Comando

Descrizione

mkdir /root/distribuzione

Crea directory di appoggio

dd if=/dev/zero of=/root/distribuzione/initrd bs=1k count=3000

Crea file vuoto "initrd" che conterra' ò'immagine del filesystem.

mke2fs -m 0 -i 2000 initrd

implementa il file system ext2 su initrd con 0 byte riservati per superuser e 2000 per inode

mkdir /root/distribuzione/mount
cd /root/distribuzione
mount -t ext2 -o loop initrd /root/distribuzione/mount

Crea una directory e la usa come mount point per il file di immagine

mkdir /root/distribuzione/mount/dev
cp -dpR /dev/console /root/distribuzione/mount/dev
cp -dpR /dev/cua? /root/distribuzione/mount/dev
cp -dpR /dev/hda? /root/distribuzione/mount/dev
cp -dpR /dev/hdb? /root/distribuzione/mount/dev
cp -dpR /dev/hdc? /root/distribuzione/mount/dev
cp -dpR /dev/hdd? /root/distribuzione/mount/dev
cp -dpR /dev/null /root/distribuzione/mount/dev
cp -dpR /dev/ram? /root/distribuzione/mount/dev
cp -dpR /dev/sda? /root/distribuzione/mount/dev
cp -dpR /dev/systty /root/distribuzione/mount/dev
cp -dpR /dev/tty? /root/distribuzione/mount/dev
cp -dpR /dev/ttyp? /root/distribuzione/mount/dev
cp -dpR /dev/zero /root/distribuzione/mount/dev

Crea e imposta la directory DEV.

I parametri di cp -dpR stanno per :
-d Copia di link come symbol link
-p mantiene i permessi
-R Copia ricursivamente

mkdir /root/distribuzione/mount/lib
cp -dpR /lib/libc.so.* /root/distribuzione/mount/lib
cp -dpR /lib/ld-linux.so.* /root/distribuzione/mount/lib
cp -dpR /lib/libext2fs.so.* /root/distribuzione/mount/lib
cp -dpR /lib/libcom_err.so.* /root/distribuzione/mount/lib
cp -dpR /lib/libuuid.so.* /root/distribuzione/mount/lib
cp -dpR /lib/libtermcap.so.* /root/distribuzione/mount/lib

cp -dpR /lib/libtermcap.so.* /root/distribuzione/mount/lib (solo se si ha la necessita' di usare programmi tipo "more")

Crea e imposta la directory LIB.

mkdir /root/distribuzione/mount/etc
vi /root/distribuzione/mount/etc/passwd :
root::0:0:root:/root:/bin/bash
vi /root/distribuzione/mount/etc/group :
root::0:root
vi /root/distribuzione/mount/etc/profile :
#!/bin/sh
PATH="/bin:/sbin/usr/bin/:."
HOSTNAME="minilinux"
PS1="\\u@minilinux:\\w\\$ "
TERM=linux
ignoreeof=10
export PATH HOSTNAME PS1 TERM ignoreeof
alias ls="ls \s --color"
alias rm="rm -i"
vi /root/distribuzione/mount/etc/fstab :
/dev/ramdisk / ext2 defaults 1 1
none /proc proc defaults 0 0
cp -dpR /etc/termcap /root/distribuzione/mount/etc
cp -dpR /etc/shells /root/distribuzione/mount/etc
ldconfig -r /root/distribuzione/mount

Crea e imposta la directory ETC.

Le scritte in rosso indicano cio' che andra' scritto nel file aperto con l'editor "vi" o qualcunque altro editor.

ldconfig provvede a creare il file ld.so.cache nella directory etc in base alle librerie contenute nella produzione. Quindi dopo aver lanciato il comando controllare se esiste il file in etc. ( potrebbe dare dei warning )

mkdir /root/distribuzione/mount/bin
mkdir /root/distribuzione/mount/usr
mkdir /root/distribuzione/mount/usr/bin
cp -dpR /bin/bash /root/distribuzione/mount/bin
ln -s /bin/bash /root/distribuzione/mount/bin/sh
cp -dpR /usr/bin/bzip2 /root/distribuzione/mount/usr/bin
ln -s /usr/bin/bzip2 /root/distribuzione/mount/usr/bin/bunzip2
cp -dpR /bin/cat /root/distribuzione/mount/bin
cp -dpR /bin/chmod /root/distribuzione/mount/bin
cp -dpR /bin/chown /root/distribuzione/mount/bin
cp -dpR /bin/cp /root/distribuzione/mount/bin
cp -dpR /bin/dd /root/distribuzione/mount/bin
cp -dpR /bin/df /root/distribuzione/mount/bin
cp -dpR /bin/gzip /root/distribuzione/mount/bin
ln -s /bin/gzip /root/distribuzione/mount/bin/gunzip
cp -dpR /bin/loadkeys /root/distribuzione/mount/bin
cp -dpR /bin/it.map /root/distribuzione/mount/bin
cp -dpR /bin/ls /root/distribuzione/mount/bin
cp -dpR /bin/mkdir /root/distribuzione/mount/bin
cp -dpR /bin/ps /root/distribuzione/mount/bin
cp -dpR /bin/rm /root/distribuzione/mount/bin
cp -dpR /bin/sync /root/distribuzione/mount/bin
cp -dpR /bin/tar /root/distribuzione/mount/bin
cp -dpR /usr/bin/pico /root/distribuzione/mount/usr/bin
ln -s /usr/bin/pico /root/distribuzione/mount/usr/bin/more
cp -dpR /bin/mount /root/distribuzione/mount/bin
cp -dpR /bin/umount /root/distribuzione/mount/bin
cp -dpR /bin/mknod /root/distribuzione/mount/bin
vi /root/distribuzione/mount/bin/halt :
#!/bin/sh
sync
umount -a -v -n
echo "System is Halted"
kill -1

 

Crea e imposta la directory BIN e /USR/BIN.

l'editor copiato e' "pico", "vi" ha il doppio di dimensione.

mkdir /root/distribuzione/mount/sbin
cp -dpR /sbin/update /root/distribuzione/mount/sbin
cp -dpR /sbin/e2fsck /root/distribuzione/mount/sbin
cp -dpR /sbin/fdisk /root/distribuzione/mount/sbin
cp -dpR /sbin/fsck /root/distribuzione/mount/sbin
cp -dpR /sbin/mkdosfs /root/distribuzione/mount/sbin
cp -dpR /sbin/mkfs.msdos /root/distribuzione/mount/sbin
cp -dpR /sbin/mke2fs /root/distribuzione/mount/sbin

mkdir /root/distribuzione/mount/proc
mkdir /root/distribuzione/mount/mnt
mkdir /root/distribuzione/mount/tmp
mkdir /root/distribuzione/mount/root

Crea e imposta la directory SBIN e crea le directory mancanti

vi /root/distribuzione/mount/etc/rc :
#!/bin/sh
/bin/mount /proc/ /proc -v -t proc
/sbin/update
cd /
exec bash -rcfile /etc/profile

Crea script di partenza.

mkdir /root/distribuzione/mount/boot
cp /boot/<nome del kernel copiato> /root/distribuzione/mount/boot
vi /root/distribuzione/mount/etc/lilo.conf
boot=/dev/fd0

timeout=100

message=/boot/message

prompt
default linux

image=/boot/<nome del kernel copiato>
label=linux

root=/dev/fd0

 

umount initrd
gzip -9 initrd

 

 

...................................................