Last modification: 08/14/20 12:47 PM (EDT)
No syntax errors detected in multiserver-ban.sh

#!/bin/bash

#-----------------------------------------------------------
# ban / unban ip from all servers
# Galaxip aka LoveBug 2020-08-14
#
# checks ladder log for ban_ip and unban_ip admin commands
# then sends the command to command.txt file in all servers
#-----------------------------------------------------------

# base location of servers change as needed
serverRoot="/home/pi/armagetronad/servers/"

# list of server directories change as needed
serverDirectories="server00 server01 server02 server03 server04 server05 server06 server07 server08 server09 server10 server11 server12 server13"

# array to store ladderlog data
serverData=()

# main loop read ladderlog data if available and process
while	read -a serverData
	do

		# first entry 0 commands we need to check
		command=${serverData[0]}

		# check command and run function
		case $command in

			#----------------
			# admin commands
			#----------------

			ADMIN_COMMAND)

				# get the admin command
				adminCommand=${serverData[4]}

				# get ip address for ban/unban
				ipAddress=${serverData[5]}

				# get time for ban
				banTime=${serverData[6]}

				# get ban message
				banMessage=${serverData[7]}

				# now check for ban_ip and unban_ip
				case $adminCommand in

					# ban_ip or BAN_IP ipaddress time message .. ban ip from all servers
					ban_ip|BAN_IP)

						for i in $serverDirectories
						do
							serverCommandTxt="$serverRoot$i/command.txt"
							printf "ban_ip %s %s %s\n" "$ipAddress" "$banTime" "$banMessage" >> "$serverCommandTxt"
						done

						# debug
						printf "say %s banned from all servers for %s minutes\n" "$ipAddress" "$banTime"

					;;

					# /unban_ip or UNBAN_IP ipaddress .. unban ip from all servers
					unban_ip|UNBAN_IP)

						for i in $serverDirectories
						do
							serverCommandTxt="$serverRoot$i/command.txt"
							printf "unban_ip %s\n" "$ipAddress" >> "$serverCommandTxt"
						done

						# debug
						printf "say %s unbanned from all servers\n" "$ipAddress"

					;;

				esac

			;;

		esac

	done

exit 0