Если я понимаю то, что Вы просите, Вы хотели бы одну команду строки, которая возьмет вывод от ifconfig
и возвратите следующее eth:xx устройство для использования.
Таким образом, если у нас есть eth0:0, eth0:1, и eth0:2 используемый, команда должна возвратиться 3?
Команда, такая как этот должна сделать то, что Вы хотите.
$ if (ifconfig | grep -q "^eth"); then \
echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); \
else echo 0;fi
Таким образом, если у нас есть одно устройство Ethernet:
$ ifconfig | grep eth
eth0:0 Link encap:Ethernet HWaddr F0:DE:F1:2F:7D:4E
Наша команда возвратила бы 1:
$ if (ifconfig | grep -q "^eth"); then echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
1
Если у нас не будет устройств Ethernet, то мы возвратим 0:
$ if (ifconfig | grep -q "^eth"); then echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
0
Хорошо казалось бы, что существует большое продолжение здесь, но это довольно просто.
ifconfig
и grep вывод, ища один. Если мы находим тот затем, мы продолжаем работать ifconfig
снова, и синтаксический анализ это.grep
средство PCRE (-P
) искать строки, которые запускаются с ethXX:. -o
переключатель возвратит цифру, которая происходит после ethXX:.sort
результаты численно, в случае, если у нас есть несколько ethXX:YY устройств.$(( $(ifconfig ...) + 1 ))
. Таким образом, если ethXX:YY будет 0, то мы доберемся 0 + 1
получающийся в a 1
.echo
результаты шага 5.ifconfig
вывод, затем возвратитесь 0, так как это будет первым.Если требуется использовать ip addr
вместо этого можно использовать эту форму решения, предоставленного выше, чтобы сделать так.
$ if (ip addr | grep -q "eth"); then \
echo $(($(ip addr | grep -Po "(?<=eth[0-9]:)\d+" | sort -n | tail -1) + 1)); \
else echo 0;fi
Используя Ваши демонстрационные данные:
inet xx.182.137.90/29 brd xxx.182.137.95 scope global eth0
inet xxx.182.137.91/24 brd xxx.182.137.255 scope global eth0:1
inet xxx.182.137.92/24 brd xxx.182.137.255 scope global secondary eth0:2
inet xxx.182.137.93/24 brd xxx.182.137.255 scope global secondary eth0:3
inet xxx.182.137.94/24 brd xxx.182.137.255 scope global secondary eth0:4
Эта команда возвратила бы 5:
$ if (ip addr | grep -q "eth"); then echo $(($(ip addr | grep -Po "(?<=eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
5
EaseUS Partition Master может преобразовывать первичные разделы в логические. http://www.partition-tool.com/personal.htm
Он работает под Windows, но я вижу, что у вас все равно есть раздел Windows.
EDIT: Из вашего графика видно, что вы не исчерпали количество разделов, поэтому, если у вас достаточно места, вы можете изменить размер, создать новый расширенный логический раздел и скопировать данные раздела. Если у вас максимум 4 первичных раздела или недостаточно места, сделайте резервную копию раздела, удалите его, затем создайте новый расширенный логический раздел и восстановите данные в логическом разделе.