Portál AbcLinuxu, 29. prosince 2025 15:44
#!/bin/sh
function testip() {
n=`echo $1|grep '^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'|wc -l`
if [ $n -ge 1 ]; then
return 0
else
return 1
fi
}
if testip $1; then
echo OK
else
echo Not an IP
fi
[[ "$1" =~ "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ]] && echo ano
[[ "$1" =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] && echo anopředtím by totiž prošly i věci jako 10.10.10.10.10.10
[[ "$1" =~ "^1[0-9]{1,2}\.[0-5]{1,3}\.[0-5]{1,3}\.[0-5]{1,3}$" ]] && echo ano
[[ "$1" =~ "^1[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] && echo anosamozřejmě tento vzor vyhoví i nesmyslným adresám jako: 192.168.999.999
#!/bin/bash
echo $1 | awk -F '.' '
{
if($1>0 && $1 <=255 && $2>0 && $2 <=255 && $3>0 && $3 <=255 && $4>0 && $4 <=255)
{
print $0;
}
}'
>
deb http://ftp.cz.debian.org/debian jessie main contrib non-freepokud je IP adresa, vytiskne ji; pokud neni, nevytiskne nic
#!/bin/bash
echo $1 | awk -F '.' '
{
if($1>0 && $1 <=255 && $2>0 && $2 <=255 && $3>0 && $3 <=255 && $4>0 && $4 <=255)
{
print $0;
}
}'
>
A je funkční, takže je vítězem ;)
Ale ještě jednou díky všem.
Problém vyřešen.
Mějte se, smějte se
#!/bin/bash
echo $1 | awk -F '.' '
{
if( NF==4 )
if($1>0 && $1 <=255 && $2>0 && $2 <=255 && $3>0 && $3 <=255 && $4>0 && $4 <=255)
{
print $0;
}
}'výše uvedenému totiž vyhoví řetězce jako 192.168.10.10.10.10.10.10
$x>0 by mela byt $x>=0
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
#!/usr/bin/awk -f
BEGIN {
FS=".";
} {
if(NF==4 && $1>=0 && $1 <=255 && $2>=0 && $2 <=255 && $3>=0 && $3 <=255 && $4>=0 && $4 <=255)
print;
}
deb http://ftp.cz.debian.org/debian jessie main contrib non-free#!/bin/bash
[[ "${1//[0-9]/}" == "..." ]] ||
exit 1
for i in ${1//./ }; do
let count++
[[ $i -ge 0 && $i -le 255 ]] ||
exit 1
done
[[ $count -eq 4 ]] ||
exit 1
exit 0
Pripadne sa da IFS=. Kto ako chce
Dobry den.
Sice uz je to vyresene, ale ciste v bash bez dalsich binarek to tady jeste nebylo:
if [[ "$ADRESA" =~ "^ *([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+) *$" ]] \
&& [ "${BASH_REMATCH[1]}" -lt 256 ] \
&& [ "${BASH_REMATCH[2]}" -lt 256 ] \
&& [ "${BASH_REMATCH[3]}" -lt 256 ] \
&& [ "${BASH_REMATCH[4]}" -lt 256 ]
then
$ADRESA="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${BASH_REMATCH[3]}.${BASH_REMATCH[4]}"
else
echo "error: \"$ADRESA\" je neplatna" 1>&2
exit 3;
fi
Omlouvam se uz bylo..
marek
[[ který tam nakonec už je jednou použit.
$ type echo [ [[ test echo is a shell builtin [ is a shell builtin [[ is a shell keyword test is a shell builtin[[ je v bashi rychlejší než [
root@duron:/bin# ls -l /bin | grep '\[' -rwxr-xr-x 1 root root 25256 2007-06-09 03:12 [U mě je to binárka na disku. Leda, že se [ v bashi použije přednostně.
type.
bash$ type [ [ is a shell builtin bash$ type /usr/bin/[ /usr/bin/[ is /usr/bin/[Takže je rozdíl jestli napíšete
[ 0 -eq 1 ] nebo /usr/bin/[ 0 -eq 1 ]
IP=[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
ip="123.123.123.123"
if [[ "$ip" =~ ^$IP$ ]]; then
echo "OK"
else
echo "ERR"
fi
echo "$ip" | grep -q "^$IP$" -
if [ $? -eq 0 ] ; then
echo "OK"
else
echo "ERR"
fi
#!/bin/bash
#oket 1 - 4
o1=1
o2=255
o3=0
o4=999
[ $(( $o1/256 )) == 0 ] &&
[ $(( $o2/256 )) == 0 ] &&
[ $(( $o3/256 )) == 0 ] &&
[ $(( $o4/256 )) == 0 ] && echo "je to IP adresa"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.