68 lines
1.8 KiB
Bash
68 lines
1.8 KiB
Bash
|
#!/bin/sh
|
||
|
# This script is to announce a message on a server automatically
|
||
|
# and repeatedly. It is intended for server admin use.
|
||
|
# Here is an example:
|
||
|
#
|
||
|
# announce.sh localhost account password 30 "Attention: Here is an
|
||
|
# announcement\nAnd here is another announcement"
|
||
|
#
|
||
|
# The bnchat program can be obtained from the bnetd package.
|
||
|
|
||
|
BNCHAT=bnchat
|
||
|
PIPE="/tmp/pipe-bnannounce-$$"
|
||
|
|
||
|
|
||
|
cleanup () {
|
||
|
kill -9 "${pid}" 2> /dev/null
|
||
|
rm -f "${PIPE}" 2> /dev/null
|
||
|
exit 0
|
||
|
}
|
||
|
|
||
|
|
||
|
if [ -z "$4" ]; then
|
||
|
echo -e "Usage: $0 server account password interval [msgs] ..."
|
||
|
echo -e " server server ip or hostname"
|
||
|
echo -e " account your server account"
|
||
|
echo -e " password password for your account"
|
||
|
echo -e " interval time intervals between announce in seconds"
|
||
|
echo -e " [msgs] messages you want to announce"
|
||
|
echo
|
||
|
echo -e "Notes: Your account should have announce or admin permissions"
|
||
|
echo -e " If interval is zero then bnannounce will only print"
|
||
|
echo -e " one copy of the announcement."
|
||
|
echo
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
rm -f "${PIPE}"
|
||
|
mknod "${PIPE}" p > /dev/null
|
||
|
if [ $? -ne 0 ] ; then
|
||
|
echo "$0: failed to make pipe file ${PIPE}, check your permissions." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
server="$1"
|
||
|
user="$2"
|
||
|
pass="$3"
|
||
|
interval="$4"
|
||
|
shift 4
|
||
|
msg="`echo -e "$*" | sed -e 's/^/\/announce /g'`"
|
||
|
|
||
|
"${BNCHAT}" < "${PIPE}" > /dev/null 2>&1 &
|
||
|
pid="$!"
|
||
|
trap "eval cleanup" SIGINT SIGQUIT SIGTERM EXIT
|
||
|
|
||
|
echo -e "${user}" > "${PIPE}"
|
||
|
echo -e "${pass}" > "${PIPE}"
|
||
|
echo "/join Support" > "${PIPE}"
|
||
|
|
||
|
while kill -0 "${pid}" 2> /dev/null; do
|
||
|
echo "/announce ${msg}" > "${PIPE}"
|
||
|
if [ "${interval}" -lt "1" ]; then
|
||
|
exit
|
||
|
fi
|
||
|
sleep "${interval}"
|
||
|
done
|
||
|
|
||
|
exit
|