dashinet
This is a single dash script to manage WiFi Connections. It can connect to new WiFi and can manage known connections such as activating, deactivating, deleting, checking password of a ever connected (known) connection.
Dash is required because the script is a single dash script and it needs nmcli command. It is blazing first.
#!/bin/dash # test if it is running as ROOT and exit. if [ $(($(id -u))) -eq 0 ]; then exit 0 fi # test if it is running in terminal or exit. case "$(ps -o stat= -p $$)" in *+*) echo "continue..." ;; *) notify-send -t 2700 "clean exit" "please run it in terminal."; exit 0 ;; esac # test if it is already running or exit. SCRIPTNAME="$(basename -- $0)" if pidof -x "$SCRIPTNAME" -o $$ > /dev/null 2>&1; then echo "the script is already running. clean exit." exit 0 fi # test if nmcli command is available or exit if ! which nmcli > /dev/null 2>&1; then echo "nmcli command is NOT available. install NetworkManager first. clean exit." exit 0 fi ##### pre testing ends here ##### # correct number and select correcnumselected_func () { echo; echo "$NUMWCLIST" | cut -d '_' -f 1,3-; echo unset CORRECNUM while true; do read -p "[e:exit|q:quit] [b:back|r:reverse] [Number]: " SELNUM case "$SELNUM" in [0-9]|[0-9][0-9]) CORRECNUM=$(printf "%03d" "$SELNUM") ;; [0-9][0-9][0-9]) CORRECNUM=$SELNUM ;; e|exit|q|quit) exit 0 ;; b|back|r|reverse) SKIPNEXT=1; GROUPLOOP=0; break ;; *) echo "Oop! invalid selection. try again."; continue ;; esac SELECLINE=$(echo "$NUMWCLIST" | grep "^$CORRECNUM" | cut -d '_' -f 1,3-) if [ -z "$SELECLINE" ]; then echo "Oop! selection is empty. try again." continue fi SELECTED=$(echo "$NUMWCLIST" | grep "^$CORRECNUM" | cut -d '_' -f 2) break done } ########## AVAILABLE WIFI ########## # list available wifi listavailablewifi_func () { local FIELDS="BSSID,SSID,BARS,SECURITY,IN-USE" local WIFIRAW=$(nmcli --fields "$FIELDS" device wifi list | tail -n +2 | tr ' ' '_') unset NUMWCLIST local NUM=1 NUMWCLIST=$(for AVWIFI in $WIFIRAW; do local ZLNUM=$(printf "%03d" "$NUM") echo ""$ZLNUM"_"$AVWIFI"" local NUM=$((NUM+1)) done) } # connect selected wifi connectwifi_func () { if [ $((SKIPNEXT)) -eq 1 ]; then SKIPNEXT=0 return fi echo; echo "$SELECLINE"; echo local FAILED=0 while true; do echo "Type WiFi Password or Leave it Blank if NOT Required." stty -echo; echo -n "Password or Blank: "; read WIFIPASS; stty echo; echo if [ -z "$WIFIPASS" ]; then nmcli device wifi connect "$SELECTED" else nmcli device wifi connect "$SELECTED" password "$WIFIPASS" fi if [ $(($?)) -eq 0 ]; then break fi read -p "[A:again] [r:reselect] [s:stop] [e:exit]: " ARSE case "$ARSE" in r|res|reselect) GROUPLOOP=1; break ;; s|stop) break ;; e|exit) exit 0 ;; *) continue ;; esac done } # list available wifi, correct number, select and connect selected wifi # wifi functions group loop wifigrouploop_func () { nmcli device wifi rescan while true; do listavailablewifi_func correcnumselected_func connectwifi_func if [ $((GROUPLOOP)) -eq 1 ]; then GROUPLOOP=0 continue fi break done } ########## KNOWN CONNECTIONS ########## # list known connections listconnections_func () { local FIELDS="UUID,NAME,TYPE,DEVICE" local CONNRAW=$(nmcli --fields "$FIELDS" connection show | tail -n +2 | tr ' ' '_') unset NUMWCLIST local NUM=1 NUMWCLIST=$(for CONN in $CONNRAW; do local ZLNUM=$(printf "%03d" "$NUM") echo ""$ZLNUM"_"$CONN"" local NUM=$((NUM+1)) done) } # connection operations connectionoperations_func () { if [ $((SKIPNEXT)) -eq 1 ]; then SKIPNEXT=0 return fi while true; do echo " a -> Activate d -> Deactivate r -> Remove/Delete c -> Check Password s -> Reselect Connection b -> Restart e -> Exit [or] q -> Quit " echo "selected:"; echo "$SELECLINE"; echo read -p "Select Character: " SELCHAR case "$SELCHAR" in a) nmcli connection up "$SELECTED" ;; d) nmcli connection down "$SELECTED" ;; r) nmcli connection delete "$SELECTED"; GROUPLOOP=1 ;; c) nmcli --show-secrets connection show "$SELECTED" | grep "security.psk:"; GROUPLOOP=1 ;; s) echo "reslect connection..."; GROUPLOOP=1 ;; b) echo "restart..." ;; e|exit|q|quit) exit 0 ;; *) echo "Oop! invalid selection. try again."; continue ;; esac break done } # list known connections, correct number, select and do operations # connection functions group loop connectiongrouploop_func () { while true; do listconnections_func correcnumselected_func connectionoperations_func if [ $((GROUPLOOP)) -eq 1 ]; then GROUPLOOP=0 continue fi break done } # main while loop while true; do echo " w -> Available WiFi c -> Known Connections k -> Check Current Password r -> Rescan WiFi e -> Exit [or] q -> Quit " read -p "Select Character: " SELCHAR case "$SELCHAR" in w) wifigrouploop_func ;; c) connectiongrouploop_func ;; k) nmcli device wifi show-password ;; r) nmcli device wifi rescan ;; e|exit|q|quit) exit 0 ;; *) echo "Oop! invalid selection. try again." ;; esac continue done
Comments
Post a Comment