• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

ошибки в скрипте

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
Есть вот такой вот скрипт:
Код:
#!/bin/bash
 
if [[ "$1" && -f "$1" ]]; then
    FILE="$1"
else
    echo 'Укажите .csv файл, который вы хотите проанализировать.';
    echo 'Пример запуска:';
    echo -e "\tbash wfw.sh /tmp/test-01.csv";
    exit   
fi
 
echo -e "\033[1mВсего точек доступа: \033[0;31m`grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){14}' $FILE | wc -l`\e[0m"
echo -e "\033[1mВсего клиентов: \033[0;31m`grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){5} ([A-Z0-9:]{17})|(not associated)' $FILE | wc -l`\e[0m"
echo -e "\033[1mИз них клиентов без ассоциации: \033[0;31m`grep -E '(not associated)' $FILE | wc -l`\e[0m"
 
echo -e "\033[0;36m\033[1mИнформация о сетях:\e[0m"
 
while read -r line ; do
 
    if [ "`echo "$line" | cut -d ',' -f 14`" != " " ]; then
        echo -e "\033[1m" `echo -e "$line" | cut -d ',' -f 14` "\e[0m"
    else
        echo -e " \e[3mне удалось получить имя сети\e[0m"
    fi
 
    fullMAC=`echo "$line" | cut -d ',' -f 1`
    echo -e "\tMAC-адрес: $fullMAC"
 
    MAC=`echo "$fullMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
 
    result="$(grep -i -A 1 ^$MAC ./oui.txt)";
 
    if [ "$result" ]; then
        echo -e "\tПроизводитель: `echo "$result" | cut -f 3`"
    else
        echo -e "\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
    fi
 
    is5ghz=`echo "$line" | cut -d ',' -f 4 | grep -i -E '36|40|44|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140'`
 
    if [ "$is5ghz" ]; then
        echo -e "\t\033[0;31mРаботает на 5 ГГц!\e[0m"
    fi
 
    printonce="\tИнформация о подключённых клиентах:"
 
    while read -r line2 ; do
 
        clientsMAC=`echo $line2 | grep -E "$fullMAC"`
        if [ "$clientsMAC" ]; then
 
            if [ "$printonce" ]; then
                echo -e $printonce
                printonce=''
            fi
 
            echo -e "\t\t\033[0;32m" `echo $clientsMAC | cut -d ',' -f 1` "\e[0m"
            MAC2=`echo "$clientsMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
 
            result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";
-- ВИЗУАЛЬНЫЙ РЕЖИМ --                                                                                                                                                                                            3         1,3       Наверху

при запуске получаю
Код:
wfw.sh: строка 2: $'\r': команда не найдена
wfw.sh: строка 82: синтаксическая ошибка рядом с неожиданным маркером «fi»
'fw.sh: строка 82: `            fi
 

noted

Green Team
08.12.2019
107
14
BIT
0
Не сказать, что я шарю, но мои предположения:
82 строка это связанно с табулциями и пробелами,
2 строка произошло присваивание переменной $1 неверного значения
 

f22

Codeby Academy
Gold Team
05.05.2019
1 928
226
BIT
1 697
при запуске получаю
В ключах запуска должно содержаться имя файла
То есть
script.sh file.txt

wfw.sh: строка 82: синтаксическая ошибка рядом с неожиданным маркером «fi» 'fw.sh: строка 82: ` fi
У тебя не закрывающего fi
Скорее всего должно быть так
Bash:
        if [ "$clientsMAC" ]; then

            if [ "$printonce" ]; then
                echo -e $printonce
                printonce=''
            fi

            echo -e "\t\t\033[0;32m" `echo $clientsMAC | cut -d ',' -f 1` "\e[0m"
            MAC2=`echo "$clientsMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`

            result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";
        fi

В bash конструкция if выглядит следующим образом
Bash:
if [[ условие ]]; then
    код, который выполняется, если условие верно
else
    код, который выполняется, если условие ложно
fi
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!