bash Scripts

These were all written for Debian based systems. They may not work elsewhere as is. You are free to edit them as you wish.

Quicklinks: makesh.sh, admintools.sh, ripper.sh, xcf2pngAll.sh, Set1368x768x60.sh, DiskSpaceMonitor2.sh, colors.sh, backupDir.sh, BULocalFiles.sh, LLformat.sh

makesh.sh

Builds a bash script file with a header and opens it for editing.

#!/bin/bash
# Name: makesh.sh
# Description: Builds a Bash script file with header and opens it for editing.
# Path: ~/bin/makesh.sh
# Arguments: none
# Usage: ~/bin/makesh.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.0
##################################
# History
# Nov 17, 2019: Ver 0.10 Created - JAD
# Jan 08, 2020: Ver 1.0  Test for empty script name, test for existing script name, combine both files of version 0.10 into one. - JAD
##################################

# Start Script #

# DEBUG
# set -xv

# Test for file
read -p "Enter script name (ie. script.sh): " SCRIPT

if [ -z $SCRIPT ]; then
	echo "You must enter a name for the script."
	echo "Please try again."
	$(basename $0) && exit
fi

if test -f "$SCRIPT"; then
	echo "Filename $SCRIPT already exists."
	echo "Please try another filname."
	$(basename $0) && exit
fi

# Build the script
echo "#!/bin/bash" > $SCRIPT
echo "# Name:" $SCRIPT >> $SCRIPT
read -p "Description: " DESC
echo "# Description:" $DESC >> $SCRIPT 
read -p "Path : " PATH
echo "# Path:" $PATH >> $SCRIPT
read -p "Arguments : " ARGS
echo "# Arguments:" $ARGS >> $SCRIPT
read -p "Command string : " USAGE
echo "# Usage:" $USAGE >> $SCRIPT
read -p "Authors name : " AUTHOR
echo "# Author:" $AUTHOR >> $SCRIPT
read -p "Authors email address : " EMAIL
echo "# email:" $EMAIL >> $SCRIPT
echo "# Version: BETA" >> $SCRIPT
echo "##################################" >> $SCRIPT
echo "# History" >> $SCRIPT
read -p "Creation date (ie Jan 01, 2020) : " CREATED 
echo "#" $CREATED": Created" >> $SCRIPT
echo "##################################" >> $SCRIPT
echo "# Start Script #" >> $SCRIPT
echo "# End Script #" >> $SCRIPT
echo "# EOF #" >> $SCRIPT

# Change permissions
/bin/chmod 640 $SCRIPT

# Open new file for editing
/bin/nano $SCRIPT

# End Script #
# EOF #

admintools.sh

A menu of various helpful tools

#!/bin/bash
# Name: admintools.sh
# Description: Menu of various tools
# Path: ~/bin/
# Arguments: none
# Usage: ./admintools
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.0
##################################
# History
# Jan 09, 2020: Created - JAD
##################################
# Start Script #

WHAT="SYSADMIN MENU"
PROMPT="Select a menu item:"
OPTIONS=("System Info" "Kernel Info" "Performance" "Disk Space" "IP Address" "Open Ports" "List Installed Packages" "Directory Size" "Service Status" "uptime")

clear

echo $WHAT
PS3=$PROMPT

select CHOICE in "${OPTIONS[@]}" "Quit"; do 

    case "$REPLY" in

    1 ) clear;lshw -short | more;;
    2 ) clear;uname -srv;;
    3 ) clear;top;;
	4 ) clear;df -aH;;
	5 ) clear;ifconfig;;
	6 ) clear;netstat -plntu;;
	7 ) clear;dpkg --get-selections | grep -v deinstall | more;;
	8 ) clear;read -p "Please enter the directory path: " DIRP;du -sh $DIRP;;
	9 ) clear;read -p "Please enter the service name: " SRVNAME;systemctl status $SRVNAME;;
	10 ) clear;uptime;;

    $(( ${#OPTIONS[@]}+1 )) ) break;;
    *) echo "Invalid option. Try another one.";continue;;

    esac

done

# End Script #
# EOF #

ripper.sh

Wrapper for “abcde” to rip music CD’s to FLAC and MP3. Requires package “abcde”.

#!/bin/bash
# Name: ripper.sh
# Description: Wrapper for abcde to rip music CD's to FLAC and MP3
# Path: ~/bin/ripper.sh
# Arguments: None
# Usage: ~/bin.ripper.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 0.1
##################################
# History
# Nov 17, 2019: Created
# Dec 17, 2019: Added Select statement for exit
##################################

# Start Script #

# Clear screen
clear
# Prompt load
read -p "Please load CD into drive and press enter to continue"
# Allow time to init
echo "Loading disc..."
sleep 5

# Music Directory
cd ~/Music
# Command
/usr/local/bin/abcde -o 'flac:-8,mp3:-b 320' -G -x

#select
PS3=Enter:
echo ""
echo "Do you need to rip another disc?"
select aq in "Yes" "Quit";
do case $aq in
	Yes ) ripper.sh;;
	Quit ) exit;;
esac 
done
# End Script #
# EOF #

xcf2pngAll.sh

Converts all xcf files in directory to png. Requires package xcftools.

#!/bin/bash
# Name: xcf2pngAll.sh
# Description: Converts all xcf files in directory to png
# Path: ~/bin/xcf2pngAll.sh
# Arguments: none
# Usage: Execute from within directory to be affected. Requires xfc2png.
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.0
##################################
# History
# Dec 29, 2019: Created
##################################

# Start Script #

for i in *.xcf;
	do xcf2png -f $i -o $(cut -d'.' -f 1 <<< $i).png;
	done

# End Script #
# EOF #

Set1368x768x60.sh

Sets display resolution to 1368×768 60hz.

#!/bin/bash
# Name: Set1368x768x60.sh
# Description: Set display resolution
# Path: ~/bin/Set1368x768x60.sh
# Arguments: none
# Usage: ./Set1368x768x60.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: BETA
##################################
# History
# Jan 09, 2020: Created
##################################
# Start Script #

xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
xrandr --addmode HDMI-0 1368x768_60.00
xrandr --output HDMI-0 --mode "1368x768_60.00"

# End Script #
# EOF #

DiskSpaceMonitor2.sh

To monitor disk space and report usage over the Alert value via mailx. This is meant to be run as a cronjob. Requires mailx.

#!/bin/bash
# Name: DiskSpaceMonitor2.sh
# Description: To monitor disk space and report usage over the Alert value via mailx. This is meant to be run as a cronjob. Requires mailx.
# Path: ~/bin/
# Arguments: none
# Usage: ./DiskSpaceMonitor2.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.1
##################################
# History
# Dec 08, 2016: Created - JAD
# Dec 20, 2016: Changed alert value to a variable - JAD
# Jan 09, 2020: Cleaned up standardized - JAD
##################################
# Start Script #

# DEBUG
# set -xv

# vars
MSERVER=	#Outgoing SMTP Server
MAILFROM=	#Can be a fake address
MAILTO=		#Recipient
ALERT=80	#Threshhold percentage

# find used percentage on mount points and feed to "do"
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read OUTPUT;
do
  echo $OUTPUT
  PERCENTU=$(echo $OUTPUT | awk '{ print $1}' | cut -d'%' -f1  )
  MNTPNT=$(echo $OUTPUT | awk '{ print $2 }' )
  if [ $PERCENTU -ge $ALERT ]; then
    echo "Mount point \"$MNTPNT\" on $(hostname) is getting low on space. Usage of \"($PERCENTU%)\" reported on $(date)." |
     mailx -S smtp=$MSERVER -r $MAILFROM -s "Alert: Almost out of disk space $PERCENTU%" $MAILTO
  fi
done

# End Script #
# EOF #

colors.sh

Displays a grid of ANSI color codes

#!/bin/bash
# Name: colors.sh
# Description: Displays a grid of ANSI color codes
# Path: ~/bin/
# Arguments: none
# Usage: ./colors.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.0
##################################
# History
# Sep 28, 2019: Created - JAD
##################################
# Start Script #

for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

# End Script #
# EOF #

backupDir.sh

This script creates a tar file of a directory

#!/bin/bash
# Name: nackupDir.sh
# Description: Archives listed directory. Is meant to be ran as a cronjob.
# Path: ~/bin/
# Arguments: filenames
# Usage: ./backupDir.sh Source Destination
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.0
##################################
# History
# Jan 15, 2020: Created
##################################
# set -xv

# Start Script #

# Path to backup. 
PATHtoBU=${1%/}
# Directory only
BUDIR=${PATHtoBU##*/}

# Path to backup to.
destDir=${2%/}

# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archiveFile="$hostname-$BUDIR-$day.tgz"

# Print start status message.
echo -e "\nBacking up $PATHtoBU to $destDir/$archiveFile\n"
date

# Backup the files using tar.
tar -cvzf $destDir/$archiveFile $PATHtoBU

# Print end status message.
echo -e "\nBackup finished"
date

# End Script #
# EOF #

BULocalFiles.sh

TAR files for local users

#!/bin/bash
# Name: BULocalFiles.sh
# Description: Backup Local Files
# Path: ~/bin/
# Arguments: none
# Usage: ./BULocalFiles.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: 1.0
##################################
# History
# unknown: Created
# Jan 22, 2020: Rewritten to add checks - JAD
##################################
# Start Script #

# DEBUG
# set -xv

# What to backup. Edit as you see fit.
backup_files="/home /var/spool/mail /var/www /etc /root /boot /opt /usr/local/bin"

# Where to backup to.
dest=

# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
log_file="$hostname-$day.log"

# Check to see if file already exists
if [ -e $archive_file ]; then
	echo -e "PROGRAM HALTED: TAR file already exists" 2>&1 | tee -a $dest/$log_file
	date 2>&1 | tee -a $dest/$log_file
	exit 2>&1 | tee -a $dest/$log_file
else
	# Backup the files using tar.
	if [ -d "$dest" ]; then
		if [ -d "$backup_files" ]; then
			echo -e "+++++++++++++++++++++" 2>&1 | tee -a $dest/$log_file
			echo -e "Backing up $backup_files to $dest/$archive_file: " 2>&1 | tee -a $dest/$log_file
			date 2>&1 | tee -a $dest/$log_file
			tar czvf $dest/$archive_file $backup_files 2>&1 | tee -a $dest/$log_file
			echo -e "Backup finished: " 2>&1 | tee -a $dest/$log_file
			date 2>&1 | tee -a $dest/$log_file
			echo -e "+++++++++++++++++++++" 2>&1 | tee -a $dest/$log_file
		else
			echo -e "PROGRAM HALTED: No files to backup" 2>&1 | tee -a $dest/$log_file
			date 2>&1 | tee -a $dest/$log_file
			exit 2>&1 | tee -a $dest/$log_file
		fi
	else
		echo -e "PROGRAM HALTED: Invalid destination directory" 2>&1 | tee -a $dest/$log_file
		date 2>&1 | tee -a $dest/$log_file
		exit 2>&1 | tee -a $dest/$log_file
	fi
fi

# End Script #

# EOF #

LLformat.sh

Performs a low-level format that wipes data from the specified drive.

#!/bin/bash
# Name: LLformat.sh
# Description: Attempts a low level format on a hard drive
# Path: ~/bin/LLformat.sh
# Arguments: none
# Usage: ./LLformat.sh
# Author: James A. Deck
# email: jim@jimdeck.com
# Version: BETA
##################################
# History
# Feb 10, 2020: Created
##################################
# Start Script #

# DEBUG
# set -xv
clear

echo -e "\e[5mWARNING!\e[0m This program will perform a low level format on the device selected and fill it with zeros."
echo -e "This will \e[5mDESTROY\e[0m all partitions on the disk thereby destroying all \e[5mDATA\e[0m."
echo -e "If you are not absolutely sure you want to destroy all the data on this disk please do not continue."
echo -e ""
echo -e "This program requires root access."
echo -e ""
read -rp "Do you wish to continue?(y/n): " cont

if [[ "$cont" = "y" ]] || [[ "$cont" = "Y" ]]; then
	echo -e "Searching for devices...\n"
	sudo fdisk -l | awk '/Disk \/dev\// {print substr($2, 1, length($2)-1),$3,substr($4, 1, length($4)-1)}'
	echo -e "\n"
	read -rp "Please enter the device you wish to erase (i.e. /dev/sdc): " tdrive
	echo -e "\e[5mWARNING!\e[0m You are about to erase ALL DATA on $tdrive. It will be unrecoverable."
	echo -e "\e[5mNOTE:\e[0m This process is slow and runs at @ 40MB/sec tops on USB 2.0."
	echo -e "It can easily be as slow as 3MB/sec depending on the device."
	echo -e "If time is critical this may not be the option for you."
	echo -e ""
	read -rp "Are you sure you wish to continue?(y/n): " con1
	read -rp "Really?(y/n): " con2
	if [[ "$con1" = "y" ]] && [[ "$con2" = "y" ]]; then
		echo -e "OK, here we go!"
		sleep 3
		echo -e "Unmounting $tdrive"
		umount "$tdrive"
		echo - "Begin format"
		sudo dd if=/dev/zero of="$tdrive" status=progress
		echo -e "Format complete"
	else
		echo -e "Exiting...\n"
	fi
else
	echo -e "Exiting...\n"
fi

# End Script #

# EOF #