Anna_Repina
@Anna_Repina
Хочу все знать

Как записать вводимые данные в определенном формате?

Пишу скрипт для записи мак адреса для ipmitool в ВМС.
#!/bin/bash
read -p ' Please input MACaddress BMC in format XX:XX:XX:XX:XX:XX:XX       :" BMCMAC

ipmitool lan set 1 macaddr $BMCMAC


Но все кто пользовался данным скриптом вечно вбивают его то через "-", что без ":".
Хотелось бы упростить и сделать ввод исключительно цифрамии (например 8484620000ае) и записывать сразу в определенном формате.
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
магия awk и любой формат.

read -p ' Please input MACaddress BMC: '
MAC=$(echo "${REPLY}"|awk '{for(i=1;i<=length($0);i++){if (substr($0,i,1) !~ "[0-9a-fA-F]"){continue};if (a==2){printf ":";a=0};printf substr($0,i,1);a+=1}}')
echo "$MAC"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Ну и кто тебе мешает считывать собственно в любом из нужных тебе форматов ?
Sed тебе в помощь.
https://sed.js.org/?snippet=976nMn
Например сделаю мак адрес сразу с двумя видами ввода
#!/bin/bash
BMCMAC="XX:XX:XX:XX-XX-XX-XX"
echo "$BMCMAC" | sed  's/-/:/g'

Вывод
XX:XX:XX:XX:XX:XX:XX

2 вариант, убираем и тот и другой символ.
https://sed.js.org/?snippet=8q6npp
Вывод
XXXXXXXXXXXXXX
Ответ написан
Комментировать
xotkot
@xotkot
хорошо есть и хорошо весьма
while [[ $(wc -c <<< $MAC_IN) != 13 ]]; do
	read -p "Please input MAC address : " # XX_XX:XX  XX-XX/XX
	MAC_IN=$(echo -n "$REPLY"|sed 's/[^0-9a-fA-F]//g')
done

MAC=$(echo -n "$MAC_IN"|fold -w2 |tr '\n' ':')
echo $MAC  # XX:XX:XX:XX:XX:XX:XX
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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