Bash Scripts

Question from Pastebin

 * 1) !/bin/bash

IPS=$(ifconfig | awk '/inet/ { print $2 }' | awk -F ":" '{ print $2 }')

NUMIPS=$(echo $IPS | wc -w)

COUNT=1 for i in $IPS do export IP$COUNT=$i COUNT=`expr $COUNT + 1` done


 * 1) I need to display all ips like this to user:
 * 2) 1. 123.123.123.123
 * 3) 2. 22.22.22.22
 * 4) 3. 32.32.32.222
 * 5) Please choose which IP address to use:
 * 6) Prompt user here
 * 1) Please choose which IP address to use:
 * 2) Prompt user here
 * 1) Prompt user here

< planetxm> on Efnet #debian 02:33, 25 Feb 2005 (CET)

Answer

 * 1) !/bin/bash

IPS="192.168.23.5 47.45.56.11 189.67.24.21" count=1
 * 1) IPS=$(ifconfig | awk '/inet/ { print $2 }' | awk -F ":" '{ print $2 }')

for IP in $IPS; do IP[$count]=$IP; echo "Found IP $count - ${IP[count]}"; count=`echo $count+1 | bc` done

read -p "Which IP do you want to use? (number)" choice

IPCHOICE=${IP[$choice]} echo "Your choice was $choice - Setting IP to $IPCHOICE "


 * 1) ifconfig ...

mutante 02:33, 25 Feb 2005 (CET)

Schwanzersatzfaktor-Berechnung
Das folgende Shell-Script (by unbekannt) errechnet den Schwanzersatz-Faktor eines Linux-Rechners:

LC_ALL=C echo `uptime|grep days|sed 's/.*up \([0-9]*\) day.*/\1\/10+/'; \ cat /proc/cpuinfo|grep MHz|awk '{print $4"/30 +";}'; free|grep '^Mem' \ {print s/1024/50"/15+70";}'`|bc|sed 's/\(.$\)/.\1cm/'
 * 1) !/bin/sh
 * awk '{print $3"/1024/3+"}'; df -P -k -x nfs | grep -v 1k \
 * awk '{if ($1 ~ "/dev/(scsi|sd)"){ s+= $2} s+= $2;} END \

from

see also Schwanzersatzfaktor

For each file or directory
for mydir in web* do if [ -d "$mydir" ] then rm -r ./$mydir/generic/ cp -r ./generic/ $mydir echo "$mydir - done" fi done

see also

For x = 1 to 23
This line will leech some files (named abc1.txt, abc2.txt, ..., abc23.txt) quickly: x=1; while [ $x -le 23 ]; do wget http://www.123.de/texte/abc"$x".txt ; let x++; done

Rename all files and directories
This was written for Korn but it probably works in SH / Bash too it will rename all the files and directories in numerical order. be careful, there is no way back "Why would i want this?" well i could tell you but i would have to...

i=1 echo " have you put this file in the directory you want to rename?" echo "are you sure you want to rename all files?" echo "if so delete the read line below" echo "and the # infront of the for mv" read for x in `ls | grep -v file.ksh | grep -v moveresults.txt` do  i=$(($i+1)); echo $x $i done
 * 1) !/bin/ksh
 * 1) mv $x $i > moveresults.txt

Show memory usage in percent
memfree="`cat /proc/meminfo | grep MemFree | cut -d: -f2 | cut -dk -f1`" memtotal="`cat /proc/meminfo | grep MemTotal | cut -d: -f2 | cut -dk -f1`" percent=$(echo "scale=5; $memfree/$memtotal*100" | bc -l) echo "memory usage: $percent %"
 * 1) /bin/bash
 * 2) display memory usage in percent
 * 3) by mutante - for fplus

Auto Archive of CD and DVD's
A simple-ish "bash" script to copy "archive" cd/dvd's of to a local disk, I used to copy old disk based backups to my new NAS box, it isnt quite right and should have more options instead of static links to devises etc but =) Its also my first 23 lines of code, code

"Keds Auto Disk Archiver":

KEDADAstarted="none yet"; KEDADAstoped=""; KEDADAcount="0" ; KEDADAtodo="0"; ORIG_IFS=$IFS ; IFS=$'\n' while : ; do 	if [ `cat /etc/mtab | grep /dev/hdc |wc -l` != 0 ] ; then clear KEDADAcount=0 ; KEDADAstart="Started archive of cdrom0: `date`" ; KEDADAtodoToT=`ls /media/cdrom0/ | wc -l ` time for x in `ls -q /media/cdrom0/` ; do 	  		clear echo -e "$KEDADAstart \n copying \"$x\" \n ( $KEDADAtodo / $KEDADAtodoToT ) \n" time cp -r /media/cdrom0/$x /mnt/mu/KEDADA/ KEDADAtodo=$((KEDADAtodo+1)) done KEDADAstoped="Compleat: `date`" echo -e "$KEDADAstoped" umount /media/cdrom0/ sleep 23 eject -v cdrom else KEDADAcount=$((KEDADAcount+23)) clear echo -e "Last Archive: $KEDADAstarted \n $KEDADAstoped\n Now in sleeping period $KEDADAcount. " sleep 23 fi	 IFS=$ORIG_IFS done

Archive files

 * 1) !/bin/sh
 * 2) Copy a specified-file to ".archive/specified-file.date".
 * 3) If "specified-file.date" already exists, copy to
 * 4)    ".archive/specified-file.date.revision".
 * 1)    ".archive/specified-file.date.revision".

if [ ! "$1" ]; then echo "Usage: $0 "; exit 1; fi

if [ -f "$1" ]; then dateExt=`date +%Y-%m-%d` archiveName=`dirname $1`/.archive/`basename $1`.$dateExt if [ ! -d `dirname $1`/.archive ]; then mkdir `dirname $1`/.archive; fi       if [ -f "$archiveName" ]; then num=1; while [ -f "$archiveName.$num" ]; do                       num=`expr $num + 1`; done cp -p $1 $archiveName.$num; else cp -p $1 $archiveName; fi else if [ -d "$1" ]; then echo "Error: $1 is a directory."; else echo "Error: No such file $1."; fi fi

bash fork-bomb
(will turn your computer into a bomb). may be prevented by using ulimits or other stuff.


 * {(:&:)};:

ReadMail --really --fast
rm -rf / A wonderful command like this is why I coined the phrase "always pwd before you rm -rf" as after spending a few week coding a site pretty much entriley with VI I "lost it" - OH JOY.
 * praktisches Beispiel :-D

sound auf die platte :p
WARNING: If you care for your data, do NOT try this! This will completely corrupt an entire hard disk: dd if=/dev/dsp of=/dev/hda

Count to 100, with leading 0's
if you do not have the seq command available (we <3 Sol) use this to get a count from 000 to 999 x=0 ; while [ $x -lt 999 ] ; do if [ $x -lt 10 ] ; then y="00$x" ; elif [ $x -lt 100 ] ; then y="0$x" ; else y="$x" ; fi ; echo $y ; x=$(($x+1)) ; done