Você está na página 1de 4

#!

/bin/bash clear MENU="========================================================================== ======\n----------------------------------Validao de IP------------------------------\n========================================================================== ======\n" echo -e $MENU while [ true ]; do echo -n "Insira o ip completo: "; read IP while [ true ]; do case $IP in s|S) clear; echo -e "$MENU\nPrograma Finalizado.\nDes envolvido por: Olival Paulino\n" exit 0;; *[[:alpha:]]) clear; echo -e "$MENU\nInsira um ip Vlido.\n\nExe mplo:\n192.254.3.33\n" echo -n "Insira o ip: "; read IP;; *) clear break;; esac done # Verificando apenas o primeiro caracter PRIMEIRO_CARACTER=${IP:0:1} if [[ $PRIMEIRO_CARACTER == "." ]]; then clear; echo -e "$MENU\nO ip no pode comear com [ . ]. Insira um ip Vlido.\n\nExemplo:\n192.254.3.33\n" else # Vai verificar a quantidade de pontos que h no ip. >> Lembrando que o ip s possui 3 pontos como separadores. PONTO=0 TAMANHO_IP=${#IP} echo -e "$MENU\nO Tamanho do ip de [ $TAMANHO_IP ] caracteres." # 0.0.0.0 >> 7 caracters e 255.255.255.255 >> 15 caracteres if [ $TAMANHO_IP -ge 7 -a $TAMANHO_IP -le 15 ]; then # O 7 e 15 que so o minimo e o # for a verificar CARACTER=${IP:$i:1} # Caso o caracter seja um ponto. O contador PONT O ir armazenar a quantidade (que dever ser apenas 3) # pois s pode existir trs pontos como separador no ip. Depois disso, ele ir armazenar a posio do ponto for vai de 0 at o tamanho do IP que deve estar entre mximo da quantidade de caracteres s contar para ver >> 0.0.0.0 e 255.255.255.255 (( i=0; i<=$TAMANHO_IP; i++ )) ; do # Recebe caracter por caracter para depois comear

# Na posio do contador i das repeties do for da linh a 38. case $CARACTER in .) PONTO=$(($PONTO+1)) POSICAO_DO_PONTO_NA_STRING[$PONT O]=$i;; esac done # Verificando se os pontos esto separados -----------------------------------------CONTADOR=0 for i in ${POSICAO_DO_PONTO_NA_STRING[@]}; do if [ $CONTADOR -eq 0 ]; then A=$i declare -i A CONTADOR=$(($CONTADOR+1)) elif [ $CONTADOR -eq 1 ]; then B=$i declare -i B CONTADOR=$(($CONTADOR+1)) elif [ $CONTADOR -eq 2 ]; then C=$i declare -i C CONTADOR=$(($CONTADOR+1)) fi done IMPAR_1=$(($A+$B)) IMPAR_2=$(($B+$C)) # ----------------------------------------------------------------------------------------if [ $(($IMPAR_1%2)) -eq 0 -a $(($IMPAR_2%2)) -eq 0 ]; then echo "As posies que os pontos esto ocupando so [ ${P OSICAO_DO_PONTO_NA_STRING[*]} ]." # Se o ip possui apenas trs pontos. ento est corret o. Podemos agora, verificar os intervalos de 0 a 255 de cada ponto if [ $PONTO -eq 3 ]; then echo "A quantidade de separadores vlida. O ip possui [ $PONTO ] pontos." # O j comea de 2 at -1 pq ir receber as pos ies dos pontos do ip de trs pra frente for (( j=2; j>=-1; j-- )); do # Pega a posio do ltimo ponto at o p rimeiro, somando a ele + 1. PEGANDO_POSICAO=${POSICAO_DO_PON TO_NA_STRING[$(($j+1))]} if [ $j -lt 0 ]; then

# Se o contador for meno r que zero, siginifica que a posio da varivel PEGANDO_POSICAO(pega a posio do ponto) # deve ser 0, para que a ssim seja possvel, pegar os primeiros caracters. J que no possui mais pontos paraCo ntinuar PEGANDO_POSICAO=0 else PEGANDO_POSICAO=$((PEGAN DO_POSICAO+1)) fi # O comando declare -i utilizado pq quando se trabalha com manipulao de strings os nmeros so concatenados para strin g. assim, no teria como subtrair o tamanho do ip com a posio do ponto + 1, pois, no possvel subtrair nmeros com string. declare -i PEGANDO_POSICAO # A varivel ATE ir receber a quant idade de caracters que ela dever pegar. # Ex.: Se o usurio digitar 192(pe gue 3 caracteres), se digitar 22(pegue dois caracteres), se digitar 4(pegue 1 ca racter) # Obs.: Para enteder melhor, aba ixo da linha 66 cole isto >> echo "resultado $TAMANHO_IP-$PEGANDO_POSICAO = $ATE " ATE=$(($TAMANHO_IP-$PEGANDO_POSI CAO)) TAMANHO_IP=$(($PEGANDO_POSICAO-1 )) INTERVALO=${IP:$PEGANDO_POSICAO: $ATE} declare -i INTERVALO if [ $INTERVALO -ge 0 -a $INTERV ALO -le 255 ]; then if [ $j -lt 0 ]; then echo -e "\nO IP digitado [ $IP ] vlido.\n" # Deseja verific ar outro endereo de IP while [ true ]; do echo -n "Deseja verificar outro IP(1=SIM; 0=NO): "; read OPCAO case $OP CAO in 1) clear; echo -e $MENU break;;

0) clear; echo -e "$MENU\nPrograma Finalizado.\nDesenvolvido por: Olival Paulino\n" exit 0;; *) clear; echo -e "$MENU\nInsira uma das opes abaixo!";; esac done fi else clear; echo -e "$MENU\nO Ip deve conter nmeros entre 0 e 255." break fi done else # Caso exista mais de trs pontos ou menos de 3 pontos no ip o ip invlido. ento, todas as posies que os pontos # ocupam no ip, sero apagadas, pois no ter iam mais serventia. unset POSICAO_DO_PONTO_NA_STRING[*] clear; echo -e "$MENU\nExemplo de ip vlid o:\n192.168.254.254\n\nDeve existir somente trs separadores(3 pontos).\n" fi else clear; echo -e "$MENU\nInsira um ip vlido(apenas um ponto a cada sequencia de nmeros).\nExemplo:\n1.2.3.4\n" fi else clear; echo -e "$MENU\nO IP deve conter no minimo 7 cara cteres.\nE estes devem estar entre 0 e 255.\n\nExemplo:\n0.0.0.0\n" fi fi done

Você também pode gostar