linux + подсчет количества цифр в IP-адресе [закрыто]

Я пишу следующий синтаксис (есть в моем ksh скрипте), чтобы найти сколько цифр в IP адресе

IP_address=127.1.1.1
echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}'
4

.

IP_address=127.1.1
echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}'
3

Пожалуйста, посоветуйте, как улучшить мой синтаксис, чтобы он был проще, короче и быстрее? (желательно без команды echo), мы можем использовать также perl или awk или sed и т.д.

Пример того, что я определил в своем коде

 if [[ ` echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}' ` -eq 3 ]]
        then

             three_octat=true


             elif  [[ ` echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}' ` -eq 4 ]]

    then

          three_octat=false

         fi
-3
задан 27 December 2012 в 10:33
1 ответ

Из справочной страницы wc

-w, --words напечатайте количество слов

Таким образом, вы можете избавиться от awk в конце канала.

echo  $IP_address | sed s'/\./ /g' | wc -w
4

Вы можете присвоить вывод канала переменной

num_octets=$(echo  $IP_address | sed s'/\./ /g' | wc -w)
echo $num_octets
4

Теперь у вас есть переменная, содержащая количество октетов, которое вы можете делать все, что захотите, просто запросив его, например

#!/bin/ksh
IP_address=127
num_octets=$(echo  $IP_address | sed s'/\./ /g' | wc -w)
case $num_octets in
  "1" )
        echo "1 Octet" ;;
  "2" )
        echo "2 Otets" ;;
  "3" )
        echo "3 Octets" ;;
  "4" )
        echo "4 Octets" ;;
   *)
        echo "Invalid IPv4 Address"
esac
1
ответ дан 5 December 2019 в 22:01

Теги

Похожие вопросы