The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Не могу разобратся с Bash скриптом, !*! crestfallen, 20-Дек-08, 13:32  [смотреть все]
Всем добрый день.
Есть скрипт, назовем его check.sh. Скрипт писан на Bash 3.2.25
В скрипте есть перемененная, куда заносится IP адресс($1)
Как можно организовать проверку правильности ввода? Т.е. правильность ввода IPV4 адреса?
Крайний вариант - проверка каждого символа циклом =) Но это долго, и я уверен, есть варианты проще.
                   Буду благодарен за любой совет.
  • Не могу разобратся с Bash скриптом, !*! NuINu, 14:57 , 20-Дек-08 (1)
    >Всем добрый день.
    >Есть скрипт, назовем его check.sh. Скрипт писан на Bash 3.2.25
    >В скрипте есть перемененная, куда заносится IP адресс($1)
    >Как можно организовать проверку правильности ввода? Т.е. правильность ввода IPV4 адреса?
    >Крайний вариант - проверка каждого символа циклом =) Но это долго, и
    >я уверен, есть варианты проще.
    >            
    >       Буду благодарен за любой
    >совет.

    любитель баша? ну скорми тогда его grep
    #!/bin/sh

    #проверяет аргуемент является ли он ip адресом. ./check_ip "аргумент возможно ip адрес"
    #на самом деле проверяется только формат(значения не проверяются) можно прверить конечно и #значения :)
    #check ip : 'aww10.4.0.101w'
    #Valid IP 10.4.0.101
    ip=$1
    echo "check ip : '$ip'"
    ip=`echo $ip | grep -o -e "[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}"`

    if ! [ ${ip}_ == _ ] ; then
        echo "Valid IP $ip"
    else
        echo "Bad IP $ip"
    fi

    • Не могу разобратся с Bash скриптом, !*! crestfallen, 15:29 , 20-Дек-08 (2)
      >[оверквотинг удален]
      >#Valid IP 10.4.0.101
      >ip=$1
      >echo "check ip : '$ip'"
      >ip=`echo $ip | grep -o -e "[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}"`
      >
      >if ! [ ${ip}_ == _ ] ; then
      >    echo "Valid IP $ip"
      >else
      >    echo "Bad IP $ip"
      >fi

      Огромное спасибо ) Как делать - уловил, в остальном будут разбиратся )

    • Не могу разобратся с Bash скриптом, !*! Bober, 04:00 , 22-Дек-08 (3)
      >echo "check ip : '$ip'"
      >ip=`echo $ip | grep -o -e "[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}"`

      Ню-ню :) По вашему 444.555.666.777 - валидный адрес?

    • продолжим бесполезные $) упражнения..., !*! Andrey Mitrofanov, 11:05 , 22-Дек-08 (9)
      >>Как можно организовать проверку правильности ввода?

      :) В "постановке" не было задачи "выковыривать"...

      >#значения :)
      >#check ip : 'aww10.4.0.101w'

      #Bad IP aww10.4.0.101w
      #check ip : '10.4.0.101'
      #Valid IP 10.4.0.101

      >ip=$1
      >echo "check ip : '$ip'"

      #"Учись, студент!"(с)
      oct="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

      >ip=`echo $ip | grep -o -e "[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}"`

      # ..."космические корабли бороздят просторы Большого театра"...
      ip2="`echo "$ip"|egrep -o "^$oct\.$oct\.$oct\.$oct$"`"

      >if ! [ ${ip}_ == _ ] ; then
      >    echo "Valid IP $ip"
      >else
      >    echo "Bad IP $ip"
      >fi

      [ "$ip" = "$ip2" ] && echo "Valid IP $ip" || echo "Bad IP $ip"


      ...
      или даже
      echo "$ip"|egrep -qs "^$oct\.$oct\.$oct\.$oct$" >/dev/null \
        && echo Da! || echo Net...

  • Не могу разобратся с Bash скриптом, !*! sas, 02:09 , 23-Дек-08 (11)
    >Всем добрый день.
    >Есть скрипт, назовем его check.sh. Скрипт писан на Bash 3.2.25
    >В скрипте есть перемененная, куда заносится IP адресс($1)
    >Как можно организовать проверку правильности ввода? Т.е. правильность ввода IPV4 адреса?
    >Крайний вариант - проверка каждого символа циклом =) Но это долго, и
    >я уверен, есть варианты проще.
    >            
    >       Буду благодарен за любой
    >совет.

    Chisto bash :)

    check_ip4() {
      IFS="."
      arr=($1)
      if [ ${#arr[@]} -ne 4 ]; then
        return 0
      else
        for octet in ${arr[@]}; do
          if [ $octet -lt 0 -o $octet -gt 255 ]; then
            return 0
          fi
        done
      fi
      return 1
    }

    Usage:


    ip=12.23.34.45
    if check_ip4 $ip; then
       echo "ip=$ip is NOT valid"
    else
       echo "ip=$ip is VALID"
    fi

    --- Sas

    • Не могу разобратся с Bash скриптом, !*! sas, 02:27 , 23-Дек-08 (12)
      >[оверквотинг удален]
      >
       
      >ip=12.23.34.45
      >if check_ip4 $ip; then
      >   echo "ip=$ip is NOT valid"
      >else
      >   echo "ip=$ip is VALID"
      >fi
      >

      >
      >--- Sas

      Small improvement to check only for numeric octets

      check_ip4() {
        IFS="."
        arr=($1)
        if [ ${#arr[@]} -ne 4 ]; then
          return 0
        else
          for octet in ${arr[@]}; do
            if ! $(($octet-$octet)) >/dev/null 2>&1; then
              return 0
            fi
            if [ $octet -lt 0 -o $octet -gt 255 ]; then
              return 0
            fi
          done
        fi
        return 1
      }

      --- Sas

      • Не могу разобратся с Bash скриптом, !*! sas, 03:06 , 23-Дек-08 (13)
        >[оверквотинг удален]
        >        return 0
        >      fi
        >    done
        >  fi
        >  return 1
        >}
        >
        >

        >
        >--- Sas

        I was pointed out that check for number was not good...



        check_ip4() {
          IFS="."
          arr=($1)
          if [ ${#arr[@]} -ne 4 ]; then
            return 0
          else
            for octet in ${arr[@]}; do
              if ! [[ $octet =~ "^[0-9]*$" ]]; then
                return 0
              fi
              let octet+=0
              if [[ $octet -lt 0 ]] || [[ $octet -gt 255 ]]; then
                  return 0
              fi
            done
          fi
          return 1
        }

        --- Sas

        • Bash скриптом - когда ж он кончится-то :-D, !*! Andrey Mitrofanov, 10:42 , 23-Дек-08 (14)
          >>if ! $(($octet-$octet)) >/dev/null 2>&1; then
          >>[оверквотинг удален]
          >I was pointed out that check for number was not good...

          Ага :) , "крайние" значения нужно учитывать. Долго думал, чего не так |-) , наконец сообразил - нуль "не пролезает".

          >      if ! [[ $octet =~ "^[0-9]*$"

          Баши-и-изм. $))) Проверка на числовое значение ~~
          if [ "$((octet+0)) != "$octet" ]

          И кстати, да, тогда уж сразу --

          # студент бороздит просторы Большого театра
          oct="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
          check_ip4() { [ "$1" =~ "^$oct\.$oct\.$oct\.$oct$" ]; }

          Гм, неужели мы родили "Истину"? :-))))
          С пополнением!..

          • гы, какая интересная теема - никак не кончится, !*! Andrey Mitrofanov, 11:11 , 23-Дек-08 (15)
            >>      if ! [[ $octet =~ "^[0-9]*$"
            >Баши-и-изм. $))) Проверка на числовое значение ~~
            >if [ "$((octet+0)) != "$octet" ]

            Вот из ABS-а ещё... _не_ одна %)) ... реализация:

            isdigit ()    # Tests whether *entire string* is numerical.
            {             # In other words, tests for integer variable.
              [ $# -eq 1 ] || return $FAILURE
              case $1 in
                *[!0-9]*|"") return $FAILURE;;
                          *) return $SUCCESS;;
              esac
            }

            # This function described in is_number.bash.
            # is_number <input>
            is_number() {
                [ "$#" -eq 1 ]    || return 1 # is blank?
                [ x"$1" == 'x0' ] && return 0 # is zero?
                local -i tst
                let tst=$1 2>/dev/null         # else is numeric!
                return $?
            }

            Ужос! Взлрослые дядьки... Нет, чтоб програмированием заниматься - выкабениваются перед студентом. $*)

            • ip - как много в этом звуке, !*! Zenith, 23:45 , 07-Июн-12 (16)
              Взяв из вышенаписанного самое необходимое, для себя определил вот такую ф-цию:

              #!/bin/bash

              checkip(){
              IFS="."
              arr=($1)
              echo "Кол-во элементов в массиве ${#arr[@]}"
              i=0
                      if [ ${#arr[@]} -ne 4 ]; then
                         return 0
                      else

                          for octet in ${arr[@]}; do

                              case $octet in
                              *[!0-9]*|"")  return 0;;
                              esac

                              if [ $i == 0 ]; then
                                  case $octet in
                                  "255"|"")        return 0;;
                                  "0"|"")          return 0;;
                                  esac
                              fi

                              if [ $i == 3 ]; then
                                  case $octet in
                                  "255"|"")   return 0;;
                                  "0"|"")     return 0;;
                                  esac
                              fi

                              if [ $i == 1 ]; then
                                  case $octet in
                                  "255"|"")     return 0;;
                                  esac
                              fi

                              if [ $i == 2 ]; then
                                  case $octet in
                                  "255"|"")     return 0;;
                                  esac
                              fi

                              if [ $octet -lt 0 -o $octet -gt 255 ]; then
                                   return 0
                              fi

                          let i=i+1
                          done
                      fi

              return 1

              }


              IFS1=" "
              while [ $? != 1 ]; do
              IFS=$IFS1
              echo "Введиете IP адрес: "
              read cip
              checkip $cip
              done




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру