www.robotz.com - your personal web presence provider

Displaying advance_shell_operations.txt


[notes index] | [home]

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ 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"; echo "$NEWNAME"; done
                                       # 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 "$NEWNAME"; done
                                       # 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///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


[[added to wiki.robotz.com 5/22/2007]]

Trans American Software
Robotz.com Developer's Project
developer@robotz.com