Попробуйте это с терминала:
ifconfig
Ваш MAC-адрес является адресом после HWaddr. Если это 00: 00: 00: 00: 00: 00 Я думаю, что что-то не так с аппаратным или драйвером.
Если вы каким-то образом удалили свой MAC-адрес из сетевых настроек, вы можете получить его назад, записав это в терминале:
sudo lshw > lshw.txt напишите пароль, когда будет предложено ввести его, это занимает приблизительно 20 секунд. gedit lshw.txtТеперь вы просматриваете список всего своего оборудования. Но нам нужны только сетевые спецификации. Сделайте поиск по «сети». Пара строк под этой строкой должна быть такой:
serial: 01:21:ee:de:01:11
Только ваши номера будут разными. Это MAC-адрес. Скопируйте этот адрес и вставьте его в сетевые настройки. Затем вы должны восстановить исходный MAC-адрес.
Просто используйте grep с флагом -c для подсчета или еще лучше grep -o '<PATTERN>' | wc -l (см. примечание об этом позже в тексте). В зависимости от того, как вы хотите, чтобы ваш результат выглядел и в зависимости от того, что вы хотите достичь, существует множество способов его настройки.
Конечно, существуют разные типы расширения параметров, поэтому нам нужно будет написать для них разные шаблоны. Здесь я просто написал замену шаблонов, удаление префикса и арифметическое расширение, но вы можете адаптировать их к любому другому.
На самом базовом уровне мы можем назвать отдельные команды следующим образом:
$ cat ./myscript.sh
#!/bin/bash
var="string"
echo "${var/string/thread}"
echo $((2+2))
echo $((3*2))
echo ${var#*i}
echo ${var##*i}
echo ${var%i*}
echo ${var%%i*}
$ grep -c '${.*}' myscript.sh
1
$ grep -c '$((.*))' myscript.sh
2
И это только основная идея. Вы могли бы поместить несколько шаблонов grep в сценарий с хорошим лидирующим сообщением. Что-то вроде:
#!/usr/bin/env bash
printf "\nNumber of arithmetic expansions:"
grep -c '$((.*))' "$1"
printf "\nNumber of substitutions:"
grep -c '${.*\/.*\/.*}' "$1"
printf "\nNumber of prefix removals:"
grep -c '${.*[#]\{1,2\}.*}' "$1"
И затем назовите этот скрипт как:
./count_bash_stuff.sh myscript.sh
В качестве альтернативы просто поместите все шаблоны в файл и вызовите grep с -f. Конечно, он выведет только общее количество всех совпадений, а не отдельных:
$ cat ./patterns
$((.*))
${.*\/.*\/.*}
${.*[#]\{1,2\}.*}
$ grep -c -f ./patterns ./myscript.sh
5
Примечание: как указано в комментарии ниже этого ответа, [t14] - инструмент для сопоставления строк, это означает, что если в строке больше одного шаблона, оно добавит 1 для подсчета только для этой строки. Лучшим подходом было бы использовать флаг -o с grep и передать вывод на wc -l. Таким образом, вместо этого мы могли бы сделать что-то подобное для арифметического расширения:
grep -o '$((.*))' | wc -l
Да, это возможное. Это сложно, но возможно с case заявлениями. Здесь я просто напишу инструкцию case для арифметического расширения и удаления самого длинного префикса. Остальное до читателя адаптируется и расширяется.
Опять же, имейте в виду, что это доказательство концепции. Обратите внимание, что это использует /bin/sh - на Ubuntu это совместимая с POSIX оболочка /bin/dash, а не bash.
#!/usr/bin/env sh
while IFS="" read -r line || [ -n "$line" ];
do
case "$line" in
# arithmetic expansion, appearing anywhere in line
*'$(('*'))'*) arithmetic_count=$(($arithmetic_count+1));;
*'${'*##*'}'* ) prefix_count=$((prefix_count+1));;
esac
done < "$1"
echo "$arithmetic_count"
echo "$prefix_count"
И она работает так:
$ ./count_shell_stuff.sh myscript.sh
2
1
Почему это не так практично, вы можете спросить? Поскольку писать рисунки в case могут быть несколько сложными, и немного сложнее, чем в grep или Perl. Кроме того, вам потребуется написать case для каждой структуры синтаксиса оболочки. С помощью grep или perl вы можете объединить несколько шаблонов в один. Но опять же, это только мое личное мнение. Сравнение шаблонов строк по-прежнему очень возможно, как я показал в этом небольшом доказательстве концепции, но я бы не рекомендовал это как способ.
Просто используйте grep с флагом -c для подсчета или еще лучше grep -o '<PATTERN>' | wc -l (см. примечание об этом позже в тексте). В зависимости от того, как вы хотите, чтобы ваш результат выглядел и в зависимости от того, что вы хотите достичь, существует множество способов его настройки.
Конечно, существуют разные типы расширения параметров, поэтому нам нужно будет написать для них разные шаблоны. Здесь я просто написал замену шаблонов, удаление префикса и арифметическое расширение, но вы можете адаптировать их к любому другому.
На самом базовом уровне мы можем назвать отдельные команды следующим образом:
$ cat ./myscript.sh
#!/bin/bash
var="string"
echo "${var/string/thread}"
echo $((2+2))
echo $((3*2))
echo ${var#*i}
echo ${var##*i}
echo ${var%i*}
echo ${var%%i*}
$ grep -c '${.*}' myscript.sh
1
$ grep -c '$((.*))' myscript.sh
2
И это только основная идея. Вы могли бы поместить несколько шаблонов grep в сценарий с хорошим лидирующим сообщением. Что-то вроде:
#!/usr/bin/env bash
printf "\nNumber of arithmetic expansions:"
grep -c '$((.*))' "$1"
printf "\nNumber of substitutions:"
grep -c '${.*\/.*\/.*}' "$1"
printf "\nNumber of prefix removals:"
grep -c '${.*[#]\{1,2\}.*}' "$1"
И затем назовите этот скрипт как:
./count_bash_stuff.sh myscript.sh
В качестве альтернативы просто поместите все шаблоны в файл и вызовите grep с -f. Конечно, он выведет только общее количество всех совпадений, а не отдельных:
$ cat ./patterns
$((.*))
${.*\/.*\/.*}
${.*[#]\{1,2\}.*}
$ grep -c -f ./patterns ./myscript.sh
5
Примечание: как указано в комментарии ниже этого ответа, [t14] - инструмент для сопоставления строк, это означает, что если в строке больше одного шаблона, оно добавит 1 для подсчета только для этой строки. Лучшим подходом было бы использовать флаг -o с grep и передать вывод на wc -l. Таким образом, вместо этого мы могли бы сделать что-то подобное для арифметического расширения:
grep -o '$((.*))' | wc -l
Да, это возможное. Это сложно, но возможно с case заявлениями. Здесь я просто напишу инструкцию case для арифметического расширения и удаления самого длинного префикса. Остальное до читателя адаптируется и расширяется.
Опять же, имейте в виду, что это доказательство концепции. Обратите внимание, что это использует /bin/sh - на Ubuntu это совместимая с POSIX оболочка /bin/dash, а не bash.
#!/usr/bin/env sh
while IFS="" read -r line || [ -n "$line" ];
do
case "$line" in
# arithmetic expansion, appearing anywhere in line
*'$(('*'))'*) arithmetic_count=$(($arithmetic_count+1));;
*'${'*##*'}'* ) prefix_count=$((prefix_count+1));;
esac
done < "$1"
echo "$arithmetic_count"
echo "$prefix_count"
И она работает так:
$ ./count_shell_stuff.sh myscript.sh
2
1
Почему это не так практично, вы можете спросить? Поскольку писать рисунки в case могут быть несколько сложными, и немного сложнее, чем в grep или Perl. Кроме того, вам потребуется написать case для каждой структуры синтаксиса оболочки. С помощью grep или perl вы можете объединить несколько шаблонов в один. Но опять же, это только мое личное мнение. Сравнение шаблонов строк по-прежнему очень возможно, как я показал в этом небольшом доказательстве концепции, но я бы не рекомендовал это как способ.