#!/bin/sh NC='netcat' NCOPTS='-u -n -b -w 1' NCPORT='9' RC='/etc/wolshrc' METHOD="hex" HOST='' HMAC='' OMAC='' BCAST='' display_help() { cat << EOF SYNOPIS small wake-on-lan-sript USAGE wolsh [-h] [-c conf] host1 [host2 host3 host4 ...] OPTIONS -h help -c conf configfile -H use hex-mac (default) -O use octal-mac -hm mac macaddress (hex) -oc mac macaddress (oct) -b broadcast broadcast -n ncbinary path to netcat binary -o opts netcat options -p port port EOF } wake_on_lan() { [ -f "$RC" ] && l=$(grep "$1 " $RC) [ -n "$l" ] && set $l [ -z "$HOST" ] && HOST="$1" [ -z "$BCAST" ]&& BCAST="$2" [ -z "$HMAC" ] && HMAC="$3" [ -z "$OMAC" ] && OMAC="$4" if [ -n "$HMAC" -o -n "$OMAC" -a -n "$BCAST" ]; then echo "try to wakup $HOST at $BCAST with $HMAC|$OMAC" case "$METHOD" in hex | h ) echo -en $( ( echo -en ":ff:ff:ff:ff:ff:ff" echo -en ":$HMAC:$HMAC:$HMAC:$HMAC:$HMAC:$HMAC:$HMAC:$HMAC" echo -en ":$HMAC:$HMAC:$HMAC:$HMAC:$HMAC:$HMAC:$HMAC:$HMAC" ) | sed 's/:/\x/g' );; oct | o ) echo -en $( ( echo -en ":377:377:377:377:377:377" echo -en ":$OMAC:$OMAC:$OMAC:$OMAC:$OMAC:$OMAC:$OMAC:$OMAC" echo -en ":$OMAC:$OMAC:$OMAC:$OMAC:$OMAC:$OMAC:$OMAC:$OMAC" ) | sed 's/:/\\/g' );; esac | $NC $NCOPTS $BCAST $NCPORT else echo "missing config for $1" fi HOST='' HMAC='' OMAC='' BCAST='' } [ -f "$HOME/.wolshrc" ] && RC="$HOME/.wolshrc" [ -z "$1" ] && { display_help; exit 0; } while [ $# -gt 0 ] do case $# in 1) case "$1" in -h) display_help; exit 0;; -c) echo "missing rcfile"; exit 1;; -hm) echo "missing hexmac"; exit 1;; -om) echo "missing octmac"; exit 1;; -b) echo "missing broadcastmask"; exit 1;; -n) echo "missing netcat binary"; exit 1;; -o) echo "missing opts"; exit 1;; -p) echo "missing port"; exit 1;; * ) wake_on_lan "$1"; shift 1 ;; esac;; *) case "$1" in -c) if [ -f "$2" ]; then RC="$2"; else echo "couldnt read config"; exit 1; fi;shift 1;; -O) METHOD="oct";; -H) METHOD="hex";; -hm) HMAC="$2";shift 1;; -om) OMAC="$2";shift 1;; -b) BCAST="$2";shift 1;; -n) [ -f "$2" -a -x "$2" ] && NC="$2"; shift 1;; -o) NCOPTS="$2"; shift 1;; -p) NCPORT="$2"; shift 1;; * ) wake_on_lan "$1";; esac shift 1 ;; esac done