Portál AbcLinuxu, 12. května 2025 10:29
#!/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-free
pokud je IP adresa, vytiskne ji; pokud neni, nevytiskne nicA 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($1>0 && $1 <=255 && $2>0 && $2 <=255 && $3>0 && $3 <=255 && $4>0 && $4 <=255) { print $0; } }' >
#!/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 0Pripadne 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.