Programowanie w Shellu (index)
Stworzyć plik valid_alnum.sh postaci:
#!/bin/bash
#
# valid_alnum.sh
#
# Sprawdza, czy dane wejsciowe zawieraly tylko
# znaki alfabetyczne i numeryczne.
# Stosuje petle nieskonczona while.
# Stosuje pomocnicza funkcje message(), ktora moze zawierac
# dodatkowe polecenia formatowania tekstu, np. fold,
# jezeli sa dostepne w systemie.
message()
{
#echo "$*" | fold -s -w ${COLUMNS:-80} >& 2
echo "$*" >& 2
}
valid_alnum()
{
# Zwraca 0, jesli wszysko jest OK. Jezeli nie, zwraca 1.
if [ -z "$1" ] ; then
message "Error: nie podano znakow"
return 1
fi
# Usuwa wszystkie niedozwolone znaki.
local COMPRESSED="$(echo $1 | sed -e 's/[^[:alnum:]]//g')"
if [ "${COMPRESSED}" != "$1" ] ; then
message "Error: dozwolone sa litery i cyfry"
return 1
else
return 0
fi
}
# Przyklad zastosowania funkcji w skrypcie.
while [ t ]
do
echo -n "Podaj napis (alnum): "
read INPUT
if valid_alnum "${INPUT}" ; then
echo "Napis jest poprawny"
break
fi
done
exit 0
Uruchomić skrypt poleceniem: ./valid_alnum.sh
Podaną funkcję można wykorzystać do sprawdzania poprawności np. klucza bazy danych czy nazwy pliku.
Stworzyć plik valid_int.sh postaci:
#!/bin/bash
#
# valid_int.sh
#
# Sprawdza wprowadzane liczby calkowite (dodatnie i ujemne).
# Stosuje pomocnicza funkcje message().
message()
{
#echo "$*" | fold -s -w ${COLUMNS:-80} >& 2
echo "$*" >& 2
}
valid_int()
{
# Sprawdza pierwsze pole. Opcjonalnie testuje minimalna wartosc $2
# i/lub maksymalna wartosc $3. Jesli nie sa podane, pomija te testy.
local NUMBER="$1"
local MIN="$2"
local MAX="$3"
if [ -z "${NUMBER}" ] ; then
message "Error: nie podano liczby"
return 1
fi
local TESTVALUE
if [ "$(echo ${NUMBER} | cut -c1)" = "-" ] ; then # czy pierwszy znak to minus?
# Wszystkie znaki bez pierwszego
TESTVALUE="$(echo ${NUMBER} | cut -c2-)"
else
TESTVALUE="${NUMBER}"
fi
local NODIGITS="$(echo ${TESTVALUE} | sed 's/[[:digit:]]//g')"
if [ ! -z "${NODIGITS}" ] ; then
message "Error: dozwolone tylko cyfry"
return 1
fi
if [ ! -z "${MIN}" ] ; then
if [ "${NUMBER}" -lt "${MIN}" ] ; then
message "Error: liczba mniejsza niz ${MIN}"
return 1
fi
fi
if [ ! -z "${MAX}" ] ; then
if [ "${NUMBER}" -gt "${MAX}" ] ; then
message "Error: liczba wieksza niz ${MAX}"
return 1
fi
fi
return 0
}
while [ t ]
do
echo -n "Podaj liczby [N (MIN MAX)]: "
read A1 A2 A3
if valid_int "${A1}" "${A2}" "${A3}" ; then
echo "Liczba wejsciowa jest poprawna w zadanych granicach"
break
fi
done
exit 0
Uruchomić skrypt poleceniem: ./valid_int.sh
Podaną funkcję można wykorzystać przy sprawdzaniu poprawności podawanej liczby całkowitej.
Języki programowania w środowisku Uniksowym, szczególnie C i Perl, mają ogromne biblioteki z pożytecznymi funkcjami i modułami, pozwalającymi na weryfikowanie formatów liczb, obliczanie przesunięcia dat i wykonywanie jeszcze bardziej przydatnych zadań. Pracując z powłoką, jesteśmy zdani na samych siebie, dlatego warto stworzyć pewne funkcje narzędziowe, dzięki którym praca ze skryptami stanie się znacznie łatwiejsza. Warto szukać inspiracji w literaturze i w samym systemie Linux, który zawiera wiele skryptów powłoki, np. w katalogu /etc/init.d/.