Temat: kilka skryptów
Pomyślałem, że podzielę się paroma z nudów naskrobanymi skryptami:
aero-pozostalo
Pokazuje ile pozostało bieżącego połączenia Aero2. Dodatkowo przyspiesza wznawianie połączenia po nominalnych 60 minutach - wcześniej wznawiało coś koło 30s, natomiast z tym skryptem ~ 7-10s.
Powinno działać na standardowych modemach (żadne HiLinki).
(część kodu funkcji conn_time_s ukradziona skądś z Gargoyle)
#!/bin/ash
conn_time_s() {
CT=$(uci -q get -P /var/state/ network.wan.connect_time)
UPTIME=$(cut -d. -f1 /proc/uptime)
if [ -z $CT ]; then
CT=$(ifstatus wan | awk -F[:,] '/uptime/ {print $2}')
fi
if [ ! -z $CT ]; then
CT=$((UPTIME-CT))
fi
if [ "$CT" ]; then
if [ "$CT" -ge 0 -a "$CT" -lt 86400 ]>/dev/null 2>&1; then
echo "$CT"
else
echo '-1'
fi
else
echo '-1'
fi
}
t=0
while true; do
conn_s=$(conn_time_s)
if [ "$conn_s" -ge 0 ]>/dev/null 2>&1; then
if [ $t -gt 0 ]; then
echo
fi
t=0
left_s="$((3600-$conn_s))"
left_min="$(($left_s/60))"
mod_s="$(($left_s-$left_min*60))"
echo -en "\r "
echo -en "\rPozostalo ${left_min}min ${mod_s}s polaczenia AERO2"
else
if [ $t -eq '0' ]; then
echo
ifup wan
fi
echo -en "\r "
echo -en "\rAERO2: Disconnected ...${t}s"
t="$(($t+1))"
fi
sleep 1
donewifi-clients
Wyświetla kilka wybranych informacji na temat podłączonych przez wifi klientów:
czas bezczynności, adres mac, adres IP, siłę sygnału, szybkość połączenia
#!/bin/ash
tarp=$(cat /proc/net/arp)
danewifi=$(iw wlan0 station dump | grep -e Station -e inactive -e signal -e bitrate)
clients=$(echo "$danewifi" | grep 'Station' | awk '{print $2;}')
echo "$danewifi" | while read -r line; do
mac=''
if mac=$(echo "$line" | grep -oE '[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}'); then
ip=$(grep "$mac" /tmp/dhcp.leases | awk '{print $3;}' | tail -n1)
hostname=$(nslookup "$ip" | sed 's/^.*:\ //g' | tail -n1 )
echo -e "\n$line $hostname"
else
echo "$line"
fi
donewifi-toggler
Skrypt do szybkiego przełączania trybów pracy radia wifi (np z n na g) oraz mocy radia (np z min. na max.)
Można zmieniać obie opcje na raz.
Napisany, ponieważ posiadany przez ze mnie ebook nie umie się połączyć do sieci wifi w trybie n, dlatego często zmieniałem tryb oraz moc.
#!/bin/ash
MODE_G='11g' #nazwy trybow radia w uci
MODE_N='11ng'
UCI_RADIO='radio0' #nazwa karty wifi w uci
UCI_MODE="wireless.${UCI_RADIO}.hwmode" #sciezka w uci do trybu radia
UCI_POWER="wireless.${UCI_RADIO}.txpower" #sciezka w uci do mocy radia
POWER_MIN='1'
POWER_MAX=$(iw list | grep dBm | grep "\[`uci show wireless.${UCI_RADIO}.channel | grep -o '=.*$' | tr -d '='`\]" | awk '{print $5;}' | tr -d '(' | sed 's/\..*$//g')
show_status() {
var=''
case "$1" in
'm') var=$(uci show "$UCI_MODE" | sed 's/.*=//g' | tr -d '"' | tr -d "'") ;;
'p') var=$(uci show "$UCI_POWER" | sed 's/^.*=//g' | tr -d '"' | tr -d "'") ;;
esac
if [ "$var" ]; then
echo "$var" | head -n1
else
echo "ERROR: show_status: void!" >&2
exit 1
fi
}
commit_changes() {
status_after="tryb=$(show_status m) moc=$(show_status p) dBm"
if [ "$status_before" != "$status_after" ]; then
echo -e "Wprowadzam zmiany...\n"
uci commit wireless
wifi
echo -e "\nPO:\t$status_after\n"
else
echo -e "Bez zmian.\n"
fi
exit 0
}
set_wifi() {
if ! echo -e "$POWER_MIN\n$POWER_MAX\n$MODE_G\n$MODE_N" | grep "$1" >/dev/null; then
echo "ERROR: set_wifi: wrong parameter! '$1'" >&2
exit 1
elif echo "$1" | grep -E '[a-zA-Z]' >/dev/null; then
echo -n "TRYB: $(show_status m) => "
uci set "$UCI_MODE"="$1"
show_status m
echo
elif ! echo "$1" | grep -E '[a-zA-Z]' >/dev/null; then
echo -n "MOC: $(show_status p)dBm => "
uci set "$UCI_POWER"="$1"
echo "$(show_status p)dBm"
echo
else
echo "ERROR: set_wifi: '$1' won't fit!" >&2
exit 1
fi
}
show_help() {
echo -e "\tWIFI ZMIENIACZ"
echo -e "\tuzycie: $(basename $0) PAR1 [PAR2]"
echo
echo -e " PARAMETRY:"
echo -e "\ttryb radia:"
echo " t - zamienia tryb pomiedzy n i g"
echo " n - uruchamia tryb n"
echo " g - uruchamia tryb g"
echo -e "\tmoc radia:"
echo " T - zamienia moc pomiedzy $POWER_MINdBm a $POWER_MAXdBm"
echo " m - ustawia moc na ${POWER_MIN} dBm"
echo " M - ustawia moc na ${POWER_MAX} dBm"
echo
echo " s status - wyswietla aktualny tryb"
echo " h help - pokazuje dostepne parametry"
echo
commit_changes
exit 0
}
var=''
status_before="tryb=$(show_status m) moc=$(show_status p) dBm"
echo -e "PRZED:\t$status_before\n"
if [ $# -eq 0 ]; then
show_help
else
for k in "$@"; do
case "$k" in
t)
if [ `show_status m` = "$MODE_N" ]; then
var="$MODE_G"
elif [ `show_status m` = "$MODE_G" ]; then
var="$MODE_N"
else
echo "Bład: Nieznany tryb WIFI"
exit 1
fi
set_wifi "$var"
;;
T)
if [ `show_status p` = "$POWER_MAX" ]; then
var="$POWER_MIN"
elif [ `show_status p` = "$POWER_MIN" ]; then
var="$POWER_MAX"
else
echo "Bład: Nieznana moc WIFI"
exit 1
fi
set_wifi "$var"
;;
n|g|m|M)
case "$k" in
n) var="$MODE_N" ;;
g) var="$MODE_G" ;;
m) var="$POWER_MIN" ;;
M) var="$POWER_MAX" ;;
esac
set_wifi "$var"
;;
s|status)
echo -e "Tryb=`show_status m`\nMoc=`show_status p`\n"
commit_changes
;;
h|help)
show_help
;;
*)
echo "Nieprawidlowy argument! Sprobuj h"
commit_changes
esac
done
commit_changes
fidownload_speed_meter
Mierzy szybkość pobierania pliku o adresie podanym w parametrze. Bez parametru pobiera http://noc.gts.pl/1mb.gts
Działa na domyślnym wget z Openwrt
#!/bin/ash
n=2 #liczba dziesietnych
uerel="http://noc.gts.pl/1mb.gts" #domyslny plik testowy do sciagniecia
time2ms() {
while IFS= read -r line ; do
if echo "$line" | grep real > /dev/null 2>&1 ; then
string=$(echo "$line" | cut -c 9- | tr " " "\n")
string_h=$(echo "$string" | grep 'h' | tr -d 'h')
string_m=$(echo "$string" | grep 'm' | tr -d 'm')
string_ss=$(echo "$string" | grep 's' | tr -d 's|.') #setne sekundy
string_ms="${string_ss}0"
time_ms=$((string_ms+60*1000*(string_m+60*string_h) ))
echo $time_ms
exit 0
else
exit 1
fi
done
}
get_size() {
#zwraca wielkosc w kB
#na wejsciu oczekuje wartosci w postaci xk xM lub xG
while IFS= read -r line ; do
linijka=$(echo "$line" | egrep -o '[0-9]+[kMG]' | tail -n 1 2>&1)
if [ "$linijka" ]; then
przedrostek=`echo "$linijka" | egrep -o '[kMG]'`
liczba=`echo "$linijka" | grep -o '[0-9]*'`
case "$przedrostek" in
"k")
wynik=$(($liczba))
;;
"M")
wynik=$(($liczba*10**3))
;;
"G")
wynik=$(($liczba*10**6))
;;
esac
echo "$wynik"
fi
done
}
speed_check() {
#PARAMETR: url pliku
if ! time_wget=`time wget "$1" -O /dev/null 2>&1 `; then
echo "Err: Nie moge pobrac $1!"
exit 1
fi
down_time=`echo "$time_wget" | grep '^real' | time2ms)`
size=`echo "$time_wget" | grep ETA | get_size`
x=$((($size*10**(3+$n))/$down_time))
d=$(($size*1000*10**$n/$down_time))
down_speed_int=$(echo -n "$x" | cut -c 0-$(expr ${#d} - $n))
down_speed_frac=$(echo -n "$x" | tail -c $n)
down_speed=$(echo "${down_speed_int}.${down_speed_frac}")
down_time=$((down_time/1000))
echo "${size}kBytes downloaded in ${down_time}s."
echo "DOWNLOAD SPEED = ${down_speed}kB/s"
}
if [ $# -gt 0 ]; then
uerel="$1"
fi
speed_check "$uerel"