Я пишу следующий синтаксис (есть в моем 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
Из справочной страницы 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