Stringhe

La shell Bash ha avuto una lunga storia e molte aggiunte

  • Per la compatibilità con la shell di Bourne
  • Per aggiungere nuove funzionalità
  • Per interagire con comandi esterni come expr
  • Come risultato è un miscuglio di sintassi
  • Qualche volta sembra inconsistente
  • Vi sono spesso più modi per ottenere un risultato

Esempio tipico è la gestione stringhe

Lunghezza di una stringa:

str=abcdefghijklmnopqrstuvwxyz
echo ${#str}
echo $(expr length $str)

Sottostringa:

echo ${str:10}
echo ${str:10:4}
echo ${str: -4}

NB: ci vuole uno spazio prima del meno

Anche:

echo $(expr substr $str 5 6)

Indice di una sottostringa:

echo $(expr index $str 'lmn')

Rimozione sottostringhe

Data la stringa:

st=abcABC123ABCabc

Rimozione corta iniziale:

echo ${st#a*C}

Rimozione lunga iniziale:

echo ${st##a*C}

Rimozione corta finale:

echo ${st%A*c}

Rimozione lunga finale:

echo ${st%%A*c}

Sostituzione sottostringhe

Sostituzione della prima occorrenza:

echo ${st/abc/xyz}

Sostituzione di ogni occorrenza:

echo ${st//abc/xyz}

Sostituzione condizionale iniziale:

${st/#abc/XYZ}

Sostituzione condizionale finale:

${st/%abc/XYZ}

Sostituzione parametrica

Se la variabile non è settata, usa il default:

${variabile-default}

La variabile però rimane non settata

  • Usato soprattutto per gli argomenti della linea di comando

Se la variabile non è settata o è la stringa vuota, usa il default:

${variabile:-default}

Se la variabile non è settata, settala al default:

${variabile=default}

Se la variabile è settata usa l'alternativa:

${variabile+alternativa}

Se la variabile non è settata, esci col messaggio d'errore:

${variabile?"messaggio"}

Esempio.

(param1.sh)

#! /bin/bash
var1=
echo ">>${var1-pippo}<<"
echo ">>${var1:-pippo}<<"
echo ">>${var2-pippo}<<"
echo ">>${var2:-pippo}<<"
echo ">>$var1<<"
echo ">>$var2<<"

Che dà:

./param1.sh 
>><<
>>pippo<<
>>pippo<<
>>pippo<<
>><<
>><<

Altro esempio.

(param1a.sh)

#! /bin/bash
echo -n "Ciao, come ti chiami? "
read nome
echo "Benvenuto, ${nome:-ciccio}"

Esempi d'uso:

./param1a.sh
Ciao, come ti chiami? alfio
Benvenuto, alfio
./param1a.sh
Ciao, come ti chiami? 
Benvenuto, ciccio

Esempio.

(param1b.sh)

#! /bin/bash
file=${1:-/etc/passwd}
[ -e $file ] && ex="esiste" || ex="non esiste"
echo $file $ex

Uso:

./param1b.sh 
/etc/passwd esiste
./param1b.sh zot
zot non esiste

Esempio.

(param2.sh)

#! /bin/bash
var1=
echo ">>${var1=pippo}<<"
echo ">>${var1:=pluto}<<"
echo ">>${var2=paperino}<<"
echo ">>${var2:=minnie}<<"
echo ">>$var1<<"
echo ">>$var2<<"

Uso:

./param2.sh 
>><<
>>pluto<<
>>paperino<<
>>paperino<<
>>pluto<<
>>paperino<<

Esempio.

(param3.sh)

#! /bin/bash
var1=
var2=topolino
echo ">>${var1+pippo}<<"
echo ">>${var1:+pluto}<<"
echo ">>${var2+paperino}<<"
echo ">>${var2:+minnie}<<"
echo ">>$var1<<"
echo ">>$var2<<"

Uso:

./param3.sh 
>>pippo<<
>><<
>>paperino<<
>>minnie<<
>><<
>>topolino<<

Esempio.

(param4.sh)

#! /bin/bash
: ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL:="non settata"}
echo "Parametri d'ambiente principali settati"
echo "Sei l'utente $USER"
echo "Sul computer $HOSTNAME"
echo "La tua Home Directory e' $HOME"
echo "La tua casella di posta e' $MAIL"

Il comando : è il comando nullo, e qui è usato solo come 'trucco' per settare le variabili a seguire.

Uso:

./param4.sh 
Parametri d'ambiente principali settati
Sei l'utente michele
Sul computer thorin
La tua Home Directory e' /home/michele
La tua casella di posta e' non settata
echo ">>$MAIL<<"
>><<

results matching ""

    No results matching ""