LINUX.ORG.RU

bash скрипт на подключение к wifi

 , , , ,


1

1
#!/bin/bash
linksys1="linksys1" 
linksys2="linksys2"
pass="anypass1"
echo "Enter essid, if you don't know, push Enter"
read essid
if [$essid -z] # $essid == ""
then
            `airmon-ng stop wlan0`
            `airmon-ng start wlan0`
            `airodump-ng mon0`
elif [$essid -eq $linksys1 || $essid -eq $linksys2]  
then
             wpa_passphrase $essid $pass
            wpa_passphrase $essid $pass > wpa_supplicant.conf
else
            echo "Enter pass"
            read pass
            wpa_passphrase $essid $pass
            wpa_passphrase $essid $pass > wpa_supplicant.conf
fi
wpa_supplicant -iwlan0 -c wpa_supplicant.conf -Dwext -B
dhcpcd wlan0
ping -c 1 google.com

Я знаю, что есть всякие wicd'ы, но так не интересно. Скрипт должен дать ввести в себя значение - имя сети. Если это имя linksys1 или linksys2, он должен подключится применив стандартный пароль anypass1. Если введеное значение - пустое, то должен запустить сканер сети ( airodump-ng ), а если имя левое, то должен попросить пароль. Все нужные данные полученные в разных вариантах записать в wpa_supplicant.conf и подключится по ним. Выдает такую ошибку при вводе 1 из стандартных значений:

[viis@viis ~]$ sudo ./link
Enter essid, if you don't know, push Enter
linksys1
./link: line 7: [linksys1: команда не найдена
./link: line 12: [linksys1: команда не найдена
./link: line 12: linksys1: команда не найдена
Enter pass
То есть гад, все равно заставляет набирать пароль, но конектится.

P.S. Как можно узнать PID процессов wpa_supplicant и dhcpcd и применив их в bash скрипте в связке с kill. И как здесь нормально оформить код? Простите ламера.



Последнее исправление: Viis (всего исправлений: 2)

код оформляется с помощью теге [code]
зачем команды в обратных кавычках? вызывайте как есть
PID можно узнать через pidof commandname или pgrep commandname

zolden ★★★★★
()

Аргументы-переменные следует заключать в кавычки. В пароле, к примеру, могут быть пробелы. И, да - пароль лучше передавать ч/з переменную окружения.

vahtu
()
./link: line 7: [linksys1: команда не найдена
./link: line 12: [linksys1: команда не найдена
./link: line 12: linksys1: команда не найдена

И, естественно, аргументы отделяются от команды пробелом.

vahtu
()
Ответ на: комментарий от zolden
if [ "$essid" == "" ] # 7 строчка
...
if [ "$essid" == "$linksys1" || "$essid" == "$linksys2" ] # 12 строчка

Вот так вот не выходит, я наверно не правильно вас понял. Выходит:

[viis@viis ~]$ sudo ./link
Enter essid, if you don't know, push Enter
linksys1
./link: line 7: [linksys1: команда не найдена
./link: line 12: [: пропущен `]'
./link: line 12: linksys1: команда не найдена
Enter pass
За code, спасибо. Удивлен, что bb коды тут используются. pidof вообще отлично! Очень удобно.

Viis
() автор топика

И еще вроде бы точку с запятой нужно ставить после команды в if, т.е

if [ -z $essid ]; # $essid == ""
then
А еще комманду можно запустить в бэкграунде, добавив через пробел к ней амперсанд, и узнать ее PID используя специальную переменную окружения «$!», например:
echo "Hello world" &
echo $!

ImJustABot
()
Ответ на: комментарий от gnunixon

Вот! Точно спасибо. Проблема в 7 строчке исчезла. Но теперь в 12 хз что, пробелы точно стоят!

        elif [ "$essid" == "$linksys1" || "$essid" == "$linksys2" ] 

Viis
() автор топика
Ответ на: комментарий от Viis
elif [ "$essid" == "$linksys1" ] || [ "$essid" == "$linksys2" ] 

(две разные комманды) или

elif [[ "$essid" == "$linksys1" || "$essid" == "$linksys2" ]]
(двойные квадратные скобки)

ImJustABot
()
Ответ на: комментарий от Viis
Enter essid, if you don't know, push Enter
linksys1
./link: line 12: [: пропущен `]'
./link: line 12: linksys1: команда не найдена
Enter pass

Viis
() автор топика
Ответ на: комментарий от ImJustABot

Отлично! Все работает! Спасибо Вам большое. И главное я понял в чем фокус =) За $! тоже спасибо! Всем большое спасибо, кто помог.

Viis
() автор топика
Ответ на: комментарий от zolden

Почитал man для pkill, команда хорошая. Только я не нашел там возможности убивать только 1 из процессов. Например

[viis@viis ~]$ pkill wpa_supplicant
pkill: killing pid 1277 failed: Операция не позволяется
pkill: killing pid 9212 failed: Операция не позволяется
[viis@viis ~]$ 
Видно, что он пытается послать kill всем процессам с названием wpa_supplicant. А хотелось бы, чтобы он закрывал только 1277 например. Для этого нужно использовать pkill в связке с pgrep получается?

Viis
() автор топика

hint: скобки - это такие же команды (попробуйте ввести help [), и они принимают такие же аргументы, отделяемые пробелом.

Поэтому:

if [$essid -z]

Синтаксическая и логическая ошибка. Хотите проверить $essid на пустоту - используйте [ -z «$essid» ]

elif [$essid -eq $linksys1 || $essid -eq $linksys2]

Внутри скобок (аргументов одной команды «[») || не действует. И Вы опять забыли разделитель аргументов.
[ «$essid» -eq «$linksys1» -o «$essid» -eq «$linksys2» ]

Кроме того, выкиньте кавычки:

`airmon-ng stop wlan0`
`airmon-ng start wlan0`
`airodump-ng mon0`

Вы же не хотите сказать, что эти программы печатают на stdout правильные shell-скрипты?

wpa_passphrase $essid $pass
wpa_passphrase $essid $pass > wpa_supplicant.conf

wpa_passphrase $essid $pass | tee wpa_supplicant.conf

echo «Enter essid, if you don't know, push Enter»
read essid

read -p «Enter essid, if you don't know, push Enter» essid

И прочитайте Advanced Bash Scripting Guide. Помогает не делать таких ошибок.

AITap ★★★★★
()

А если WEP шифрование?

anonymous
()
Ответ на: комментарий от Lighting

Была уйма жалоб на отрубание ntfs-3g после отрубания nm.

Еще вот что: nm — происки жидомасонов поцтеринговское поделие и ему в линуксе не место!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

и ему в линуксе не место!

Этот тред - тому подтверждение.

Lighting ★★★★★
()
Ответ на: комментарий от AITap

Спасибо большое. Оптимизировал.

Viis
() автор топика

pass=«anypass1»

wpa_passphrase $essid $pass

убери пароль из аргументов командной строки, оно ВСЕМ виден.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.