Advanced Shell Operations

From Free Knowledge Base- The DUCK Project: information for everyone
Revision as of 20:20, 22 May 2007 by Admin (Talk | contribs)

Jump to: navigation, search
. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
. @@ Example shell scripts useful for many tasks and provided by the community @@
. @@ Sat Jun  2 12:22:22 CDT 2001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
. @@ Guide to Advanced Shell Operations @@@@@ shell script examples @@@@@@@@@@@@@
. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.
. @ discard the output of a command                                             @
.
.   command > dev/null                   # eliminates output of STDOUT
.
.   command > /dev/null 2>&1             # redirects STDERR to STDOUT and
.                                          eliminates them
.
. @ use the value of a shell variable in a sed command                          @
.
.   sed "/$DEL/d" file1 > file2          # deletes lines in file1 containing
.                                          the value of $DEL
.
. @ check to see whether a variable has a value                                 @
.
.   if [ -z "$VAR" ] ; then list ; fi    # list is the command that executes if
.                                          $VAR doesn't have a value
.
. @ determine the full pathname of a directory                                  @
.
.   FULLPATH=`(cd dir ; pwd)`            # determine full path of directory
.
. @ determine the full pathname of a file                                       @
.
.   CURDIR=`pwd`                         # save current directory path
.   cd `dirname file`                    # change to directory with the file
.   FULLPATH="`pwd`/`basename file`"     # join output of pwd and filename
.   cd $CURDIR                           # go back to the original directory
.
. @ rename all the *.html files to *.php in a directory                         @
.
.   OLDSUFFIX=html                       # variable with old suffix
.   NEWSUFFIX=php                        # variable with new suffix
.   for FILE in *."$OLDSUFFIX"           # all files that start with old suffix
.   do
.     NEWNAME=`echo "$FILE" | sed -e "s/${OLDSUFFIX}\$/$NEWSUFFIX/"`
.     mv "$FILE" "$NEWFILE"              # sed does a replace and then mv
.   done                                 # to move the files
.
. @ rename all the *.html files to *.htm using bash pattern matching            @
.
.   for i in *.html; do
.     if [ -f ${i%l} ]; then
.       echo ${i%l} already exists
.     else
.       mv $i ${i%l}
.     fi
.   done
.
. @ rename all default* files to index*                                         @
.
.   OLDPREFIX=default                    # variables with old and new prefix
.   NEWPREFIX=index                      # for loop for all files with prefix
.   for FILE in "$OLDPREFIX"*            # sed -e for script, s for substitute
.   do                                   # carrot indicates start of line
.     NEWNAME=`echo "$FILE" | sed -e "s/^${OLDPREFIX}/$NEWPREFIX/"`
.     mv "$FILE" "$NEWNAME"
.   done                                 # rename the file and exit loop
.
. @ rename variations, example removes Shortcut to from beginning of files      @
.
.   OLD="Shortcut to "; NEW=""; for FILE in "$OLD"*; do; NEWNAME=`echo "$FILE" | sed -e "s/^${OLD}/$NEW/"`; mv "$FILE" "$NEWNAME";
.                                        # places everything from above script
.                                          on a single line, does a substitute
.
.   OLD="Shortcut to "; for FILE in "$OLD"*; do NEWNAME=`echo "$FILE" | sed -e "s/^${OLD}//"`; mv "$FILE" "$NEWNAME"; echo "$NEWNAM
.                                        # since it is not a substitute, this
.                                          uses 1 variable but still echos each
.                                          file as it is processed
.
.   OLD="Shortcut to "; for FILE in "$OLD"*; do NEWNAME=`echo "$FILE" | sed -e "s/^${OLD}//"`; mv "$FILE" "$NEWNAME"; done
.                                        # eliminate unecessary echo of filename
.
.   for FILE in "Shortcut to "*; do N=`echo "$FILE" | sed -e "s/^Shortcut\ to\ //"`; mv "$FILE" "$N"; done
.                                        # shortest method, eliminates use of
.                                          variables and filename echo
.
. @ set all filenames in a directory to lowercase                               @
.
.   for FILE in *                        # use mv -i to avoid overwriting files
.   do                                   # uses the tr command to convert case
.     mv -i "$FILE" `echo "$FILE" | tr '[A-Z]' '[a-z]'` 2> /dev/null
.   done
.
. @ eliminate msdos carriage returns in files                                   @
.
.                                        # dos uses \r\n (^M) where UNIX uses
.                                          only \n
.   tr -d '\015' < file1 > file2         # file1 contains carriage returns, file2
.                                          is created without carriage returns
.                                        # the \015 is oct representation of dos
.                                          carriage returns
.
. -new entries-
.
. @ search and replace a text string with another in multiple files             @
.
. for e in *; do mv $e $e.tmp ; sed 's/STRING1/STRING2/g' <$e.tmp >$e ; rm -f $e.tmp ; done
.
. (works best in a directory without subdirectories; it does bad things to subdirectories)
.
. @ replace a text string with another in files and recurse into directories    @
.
. for e in `find . -type f`; do mv $e $e.tmp ; sed 's/STRING1/STRING2/g' <$e.tmp >$e ; rm -f $e.tmp ; done
.
. @ test to see if a file exists and print true if it does
.
. if test -e /tmp/seclog.pid ; then echo "true"; fi
.
. -lazygirl 4/29/2002
.
. @ replace linux line feeds in file containing a LF delimited list with a comma
.   and space single line list. (file had space between last char and LF)       @
.
. sed 's/.$/,\ /g' < parseme.txt > tmpfile.txt; tr -d '\012' < tmpfile.txt > outfile.txt
.
. -lazygirl 8/23/2004
.
. @ compare IP address to C block and if it is part of that network             @
.
. host24=${ipaddress%.*}
. if [ "${host24}" = "192.168.30" ]; then
.   echo "${ipaddress}";
. fi
.
. -Sun Nov 14 15:30:55 CST 2004
.
. @ useful 'c' like FOR loop (for/next) for bash                                @
.
. for i in `seq 0 99`;
. do
.   echo number $i
. done
.
. -krissyj Dec 2004
.
. @ unzip a directory of zip files all at once                                  @
.
. for FILE in *.zip; do unzip "$FILE"; done
.
. @ convert list of usernames into delete user shell script                     @
.
. :1,$s/^\(.*\)/userdel -r \1/
.
. @ live active monitoring of tcp connections from the shell                    @
.
. while $x <> 1; do
.   clear
.   echo "Current TCP connections for robotz.com"
.   netstat -np|grep "tcp\ ";
.   sleep 15s
. done
.
. @ old fashioned replace text string for every file in directory               @
.
. change string1 to string2 in every file within the directory
.
. for e in *; do sed 's/<string1>/<string2>/g' $e >$e.tmp; rm -f $e; mv $e.tmp $e; done
.
. @ strip HTML tags out of a text/html file. This works unless a tag is split   @
.   and ends on the following line, such as long a href tags
.
. e=index.html; sed 's/<[^>]*>//g' $e >$e.tmp; mv $e.tmp $e
.
.