Hamid

   
 
  Writing UNIX Scripts

Writing UNIX Scripts

Introduction

In UNIX, commands are submitted to the Operating System via a shell. A shell is an environment which allows commands to be issued, and also includes facilities to control input and output, and programming facilities to allow complex sets of actions to be performed. Whenever you type commands at the prompt in Unix, you are actually communicating interactively with a shell.

In addition to typing commands directly to the shell, you can place them in a file (which must be given execute permission), and then run the file. A file containing UNIX shell commands is known as a script (or shell script). Executing the script is equivalent to typing the commands within it.

The Unix shells are actually quite sophisticated programming languages in their own right: there are entire books devoted to programming in them. Together with the large number of special utility programs which are provided as standard, scripts make Unix an extremely powerful operating system.

Scripts are interpreted rather than compiled, which means that the computer must translate them each time it runs them: they are thus less efficient than programs written in (for example) C. However, they are extremely good where you want to use Operating System facilities; for example, when processing files in some fashion.

There are actually no less than three different types of scripts supported in Unix: Bourne shell, C shell, and Korn shell. Bourne is the most common, Korn the most powerful, and C the most C-like (handy for C programmers). This tutorial will concentrate on the simplest of the three: the Bourne shell.

A simple Bourne-shell script

If you simply type Unix commands into a file, and make it executable, then run it, Unix will assume that the commands in it are written in whatever shell language you happen to be using at the time (in your case, this is probably the C shell). To make sure that the correct shell is run, the first line of the script should always indicate which one is required. Below is illustrated a simple Bourne-shell script: it just outputs the message "hello world":

#!/bin/sh
echo "hello world"


Use the text editor to create a file with the lines above in it. Save the file, calling it hello. Then make the hello file executable by typing:

chmod 755 hello

You can then run the script by simply typing hello. When you type hello, UNIX realises that this is a script, and runs the UNIX commands inside it (in this case, just the echo command).

Naming Shell Script Files

You can give your shell scripts almost any name you like. Be careful, however! If the name you use happens to already be an existing UNIX command, when you try to run your script you will end up running the system-defined command instead. Some fairly obvious names can cause you this problem; for example, test. To make sure that your intended name is O.K., you should check whether it exists before you start editing the new command. You can do this by using the which command, which will locate a command, if it exists, and tell you that it can't locate it if it doesn't. For example, to find out whether there are commands called dc and dac, type:

which dc
which dac

Most UNIX commands are stored in the /bin directory, so you can get a list of most of them by typing:

ls /bin


Comments and Commands

In the Bourne shell, any line beginning with a hash '#' character in the first column is taken to be a comment and is ignored. The only exception is the first line in the file, where the comment is used to indicate which shell should be used (/bin/sh is the Bourne shell). It is always good practice to use comments to indicate what a script does; both in a header section at the top, and line by line if the code is at all complicated. There aren't many comments in the examples in this document, to reduce the amount of paper used in printing it. Your scripts should be far more liberally commented.

Lines not preceded by a hash '#' character are taken to be Unix commands and are executed. Any Unix command can be used. For example, the script below displays the current directory name using the pwd command, and then lists the directory contents using the ls command.

#!/bin/sh
# purpose: print out current directory name and contents
pwd
ls


Shell Variables

Like every programming language, shells support variables. Shell variables may be assigned values, manipulated, and used. Some variables are automatically assigned for use by the shell.

The script below shows how to assign and use a variable. In general, shell variables are all treated as strings (i.e. bits of text). Shells are extremely fussy about getting the syntax exactly right; in the assignment there must be no space between the variable name and the equals sign, or the equals sign and the value. To use the variable, it is prefixed by a dollar '$' character.

#!/bin/sh
# name is a variable
name="fred"
echo "The name is $name"

The special variables $1-$9 correspond to the arguments passed to the script when it is invoked. For example, if we rewrite the script above as shown below, calling the script name, and then invoke the command name Dave Smith, the message "Your name is Dave Smith" will be printed out:

#!/bin/sh
echo "Your name is $1 $2"

Shell scripts can also do arithmetic, although this does not come particularly naturally to them. The script below adds one to the number passed to it as an argument. To do this, it must use the expr command, enclosed in back-quote characters. Once again, precise syntax is critical. You must use the correct type of speech marks, as they have a special meaning (this will be explained later), and the arguments of the expr command ($1, + and 1) must be separated by spaces.

#!/bin/sh
result=`expr $1 + 1`
echo "Result is $result"


Conditionals in Shell Scripts

All third-generation programming languages share a number of critical features: sequential execution, use of variables, logical and arithmetic operators, conditional branching and looping. This section is concerned with conditional execution.

Conditionals are used where an action is appropriate only under certain circumstances. The most frequently used conditional operator is the if-statement. For example, the shell below displays the contents of a file on the screen using cat, but lists the contents of a directory using ls.

#!/bin/sh
# show script
if [ -d $1 ]
then
  ls $1
else
  cat $1
fi

Here, we notice a number of points:

  • The if-statement begins with the keyword if, and ends with the keyword fi (if, reversed).
  • The if keyword is followed by a condition, which is enclosed in square brackets. In this case, the condition -d $1 may be read as: if $1 is a directory.
  • The line after the if keyword contains the keyword then.
  • Optionally, you may include an else keyword.

If the condition is satisfied (in this case, if $1 is a directory) then the commands between the then and else keywords are executed; if the condition isn't satisfied then the commands between the else and fi keywords are executed. If an else keyword isn't included, then the commands between the then and fi keywords are executed if the condition is true; otherwise the whole section is skipped.

There are a number of conditions supported by shell scripts; for a complete list, use the on-line manual on the test command (man test). Some examples are: -d (is a directory?), -f (is a file?), = (are two strings the same?), -r (is string set?), -eq (are two numbers equal?), -gt (is first number greater than second?). You can also test whether a variable is set to anything, simply by enclosing it in quotes in the condition part of the if-statement. The script below gives an example:

#!/bin/sh
# Script to check that the user enters one argument, "fred"
if [ "$1" ]
then
  echo "Found an argument to this script"
  if [ $1 = "fred" ]
  then
    echo "The argument was fred!"
  else
    echo "The argument was not fred!"
  fi
else
  echo "This script needs one argument"
fi


The above script illustrates another important feature of if-statements, and this is true of all the other constructs covered in this Guide. It is possible to nest constructs, which means to put them inside one another. Here, there is an outer if-statement and an inner one. The inner one checks whether $1 is "fred", and says whether it is or not. The outer one checks whether $1 has been given at all, and only goes on to check whether it is "fred" if it does exist. Note that each if-statement has its own corresponding condition, then, else and fi part. The inner if-statement is wholly contained between the then and else parts of the outer one, which means that it happens only when the first condition is passed.

The if condition is suitable if a single possibility, or at most a small number of possibilities, are to be tested. However, it is often the case that we need to check the value of a variable against a number of possibilities. The case statement is used to handle this situation. The script below reacts differently, depending on which name is given to it as an argument.

#!/bin/sh
case "$1" in
  fred)
    echo "Hi fred. Nice to see you"
    ;;
  joe)
    echo "Oh! Its you, is it, joe?"
    ;;
  harry)
    echo "Clear off!"
    ;;
  *)
    echo "Who are you?"
    ;;
esac

The case-statement compares the string given to it (in this case "$1", the first argument passed to the script) with the various strings, each of which is followed by a closing bracket. Once a match is found, the statements up to the double semi-colon (;;) are executed, and the case-statement ends. The asterix * character matches anything, so having this as the last case provides a default case handler (that is, what to do if none of the other cases are matched). The keywords are case, in and esac (end of case).

Examples

#!/bin/sh
# join command - joins two files together to create a third
# Three parameters must be passed: two to join, the third to create
# If $3 doesn't exist, then the user can't have given all three
if [ "$3" ]
then
# this cat command will write out $1 and $2; the > operator redirects
# the output into the file $3 (otherwise it would appear on the screen)
  cat $1 $2 > $3
else
  echo "Need three parameters: two input and one output. Sorry."
fi


#!/bin/sh
# An alternative version of the join command
# This time we check that $# is exactly three. $# is a special
# variable which indicates how many parameters were given to
# the script by the user.
if [ $# -eq 3 ]
then
  cat $1 $2 > $3
else
  echo "Need exactly three parameters, sorry."
fi




#!/bin/sh
# checks whether a named file exists in a special directory (stored in
# the dir variable). If it does, prints out the top of the file using
# the head command.
# N.B. establish your own dir directory if you copy this!
dir=/home/cs0ahu/safe
if [ -f $dir/$1 ]
then
  head $dir/$1
fi


Exercises

1) Write a script called exists, which indicates whether a named file exists or not.

2) Write a modified version of the show example script (the first example of the if-statement given above), which prints out the message "File does not exist" if the user gives a name which isn't a file or directory, and the message "You must give an argument" if the user doesn't give an argument to the program.

3) Write a script called save which copies a file into a special directory, and another called recover which copies a file back out of the special directory. The user of the script should not be aware of the location of the special directory (obviously the script will be).

4) Alter your scripts so that, if you try to save a file which already exists in the special directory, the script refuses to save the file and prints out a message to that effect.

Quoting in Scripts

Confusingly, in Shell scripts no less than three different types of quotes are used, all of which have special meanings. We have already met two of these, and will now consider all three in detail.

Two types of quotes are basically designed to allow you to construct messages and strings. The simplest type of quotes are single quotes; anything between the two quote marks is treated as a simple string. The shell will not attempt to execute or otherwise interpret any words within the string.

The script below simply prints out the message: "your name is fred."

#!/bin/sh
echo 'Your name is fred'

What happens if, rather than always using the name "fred," we want to make the name controlled by a variable? We might then try writing a script like this:

#!/bin/sh
name=fred
echo 'Your name is $name'

However, this will not do what we want! It will actually output the message "Your name is $name", because anything between the quote marks is treated as literal text - and that includes $name.

For this reason, shells also understand double quotes. The text between double quotes marks is also interpreted as literal text, except that any variables in it are interpreted. If we change the above script to use double quotes, then it will do what we want:

#!/bin/sh
name=fred
echo "Your name is $name"

The above script writes out the message: "Your name is fred." Double quotes are so useful that we normally use them rather than single quotes, which are only really needed on the rate occasions when you actually want to print out a message with variable names in it.

The third type of quotes are called back-quotes, and we have already seen them in action with the expr command. Back-quotes cause the Shell to treat whatever is between the quotes as a command, which is executed, then to substitute the output of the command in its place. This is the main way to get the results of commands into your script for further manipulation. Use of back-quotes is best described by an example:

#!/bin/sh
today=date
echo "Today is $today"

The date command prints out today's date. The above script attempts to use it to print out today's date. However, it does not work! The message printed out is "Today is date". The reason for this is that the assignment today=date simply puts the string "date" into the variable today. What we actually want to do is to execute the date command, and place the output of that command into the today variable. We do this using back-quotes:

#/bin/sh
today=`date`
echo "Today is $today"


Back-quotes have innumerable uses. Here is another example. This uses the grep command to check whether a file includes the word "and."

#!/bin/sh
# Check for the word "and" in a file
result=`grep and $1`
if [ "$result" ]
then
  echo "The file $1 includes the word and"
fi


The grep command will output any lines in the file which do include the word "and." We assign the results of the grep command to the variable result, by using the back-quotes; so if the file does include any lines with the word "and" in them, result will end up with some text in it, but if the file doesn't include any lines with the word "and" in them, result will end up empty. The if-statement then checks whether result has actually got any text in it.

Exercises.

5) Write a script which checks whether a given file contains a given word. If it does, the script should output the message "The file contains the word"; if not, it should output the message "The file doesn't contain the word."

6) [Optional - tricky!] Write a script which checks whether a given file was created today (Hint: the ls -l command includes a listing of the date when a file was created).

#!/bin/sh
today=`date`
result=`grep $today $1`
if [ "result" ]
then
  echo "The file $1 was created today"
else
  echo "The file $1 was not created today"
fi

Looping Commands

Whereas conditional statements allow programs to make choices about what to do, looping commands support repetition. Many scripts are written precisely because some repetitious processing of many files is required, so looping commands are extremely important.

The simplest looping command is the while command. An example is given below:

#!/bin/sh
# Start at month 1
month=1
while [ $month -le 12 ]
do
# Print out the month number
  echo "Month no. $month"
# Add one to the month number
  month=`expr $month + 1`
done

echo "Finished"

The above script repeats the while-loop twelve times; with the month number stepping through from 1 to 12. The body of the loop is enclosed between the do and done commands. Every time the while command is executed, it checks whether the condition in the square brackets is true. If it is, then the body of the while-loop is executed, and the computer "loops back" to the while statement again. If it isn't, then the body of the loop is skipped.

If a while-loop is ever to end, something must occur to make the condition become untrue. The above example is a typical example of how a loop can end. Here, the month variable is initially set to one. Each time through the loop it is incremented (i.e. has one added to it); once it reaches 12, the condition fails and the loop ends. This is the standard technique for repeating something a set number of times.

Occasionally, it can actually be useful to loop unconditionally, but to break out of the loop when something happens. You can do this using a while command with a piece of text as the condition (since the piece of text is always there), and a break command to break out of the loop. The computer will go round and round the loop continuously, until such time as it gets to the break statement; it will then go to the end of the loop. The break statement is issued from within an if-statement, so that it only happens when you want to loop to end. The example below loops continuously until the user guesses the right word. If you get inadvertently stuck in such a loop, you can always press Ctrl-C to break out.

This example also demonstrates how a shell script can get input from the user using the read command. The script loops continuously around the while-loop, asking the user for the password and placing their answer in the answer variable. If the answer variable is the same as the password variable, then the break command breaks out of the loop.

#!/bin/sh
password="open"
answer=""
# Loop around forever (until the break statement is used)
while [ "forever" ]
do
# Ask the user for the password
  echo "Guess the password to quit the program> c"
# Read in what they type, and put in it $answer
  read answer

# If the answer is the password, break out of the while loop
  if [ "$answer" = "$password" ]
  then
    break
  fi
done
# If they get to here, they must've guessed the password,
# because otherwise it would just keep looping
echo "Good guess!"

Another form of looping command, which is useful in other circumstances, is the for command. The for command sets a variable to each of the values in a list, and executes the body of the command once for each value. A simple example is given below:

#!/bin/sh
for name in fred joe harry
do
  echo "Hello $name"
done

The script above prints out the messages "Hello fred," "Hello joe," and "Hello harry." The command consists of the keyword for, followed by the name of a variable (in this case, $name, but you don't use the dollar in the for-statement itself), followed by the keyword in, followed by a list of values. The variable is set to each value in turn, and the code between the do and done keywords is executed once for each value.

The for-loop is most successful when combined with the ability to use wildcards to match file names in the current directory. The for-loop below uses the * wildcard to match all files and sub-directories in the current directory. Thus, the loop below is executed once for each file or directory, with $file set to each one's name. This script checks whether each one is a directory, using the -d option, and only writes out the name if it is. The effect is to list all the sub-directories, but not the files, in the current directory.

#!/bin/sh
for file in *
do
  if [ -d "$file" ]
  then
    echo "$file"
  fi
done


Exercises

6) Alter your save script so that, if a file has previously been saved, the user is asked whether it should be overwritten (Hint: use the read command to get the user's decision).

7) Write a script which lists all files in the current directory which have also been stored in your special directory by the save script.

8) Adapt your answer to exercise five so that you list all files in your current directory which include a given word.

9) Write an interactive script which allows the user to repeatedly apply the save and restore scripts. It should continuously prompt the user for commands, which can be either of the form save <file>, restore <file>, or quit. Hint: use while, read and case.

10) Right a script which searches all the sub-directories of your current directory for files with a given name. Hint: use for, if, cd.

More Sample Scripts

Below is a more complex script, which acts as a DOS command interpreter. DOS uses the commands cd, dir, type, del, ren and copy to do the same functions as the UNIX commands cd, ls, cat, rm, mv and cp. This script loops continuously, allowing the user to type in DOS commands, which are stored in the variables $command, $arg1 and $arg2. The command is considered by the case statement, which executes an appropriate UNIX command, depending on which DOS command has been give.

#!/bin/sh
# DOS interpreter. Impersonates DOS as follows:
# DOS command   UNIX equivalent   Action
# cd            cd                Change directory
# dir           ls                List directory contents
# type          cat               List file contents
# del           rm                Delete a file
# ren           mv                Rename a file
# copy          cp                Copy a file

echo "Welcome to the DOS interpreter"
echo "Type Ctrl-C to exit"

# Infinite loop
while [ "forever" ]
do
# Show DOS prompt; c stops a new line from being issued
  echo "DOS> c"  
# Read in user's command
  read command arg1 arg2
# Do a UNIX command corresponding to the DOS command
  case $command in
    cd)
      cd $arg1
      ;;
    dir)
      ls
      ;;
    type)
      cat $arg1
      ;;
    del)
      rm $arg1
      ;;
    ren)
      mv $arg1 $arg2
      ;;
    copy)
      cp $arg1 $arg2
      ;;
    *)
      echo "DOS does not recognise the command $command"
      ;;
  esac   
done


Bourne Shell Summary

Variables

Variables are assigned using the equals sign, no spaces. They are used by preceding them with a dollar character.

Arguments

Arguments are labelled $1, $2, ..., $9. $# indicates how many arguments there are. shift moves all the arguments down, so that $2 becomes $1, $3 becomes $2, etc. This allows more than nine arguments to be accessed, if necessary.

Quotes

Single quotes ( 'string' ) form string literals. No interpretation is performed on the string.

Double quotes ( "string" ) form string literals with limited substitution: variables are replaced with their value, and back-quoted commands are replaced with the results of their execution. A backslash '' at the end of a line allows strings to be stretched over a number of lines.

Back quotes ( `string` ) execute the string in a sub-shell, and substitute in the results of the execution.

Conditionals

if [ <condition> ] then ... elif ... else ... fi. elif and else are optional.

case <string> in <case1>) ... ;; <case2>) ... ;;; esac. The case *) acts as a default for any value not matched by one of the earlier cases.

Looping

for <variable> in <list> do ... done

while [ <condition> ] do ... done

You can break out of a loop using the break command; you can jump to the beginning of the loop and begin its next execution using the continue command.

Expressions

The expr command will do calculations. It usually needs to be enclosed in back-quotes, as the result of the calculation will be assigned to some variable. The arguments to the expr command must be separated by spaces. The value of `expr 3 + 1` is "4", whereas the value of `expr 3+1` (no spaces) is the string "3+1".

Input

User-input can be solicited using the read command, which places what the user types into variables. If users are to type several words, read can be given a number of arguments.



The last comments on this page:
Comment posted by JamAdvasse( email1try-rx.com ), 06/16/2017 at 2:18am (UTC):
Discreet Shipping For Viagra <a href=http://cheap-cialis-generic.tadalaf.com>Cheap Cialis Generic</a> Propecia Peso Worldwide Bentyl 20mg Medicine Website Low Price Pharmacy <a href=http://viagra-discount-sales.viaforsale.com>Viagra Discount Sales</a> Cialis Vente En Pharmacie Tamoxifen To Buy <a href=http://cial40mg.com/shop-cialis-online.php>Shop Cialis Online</a> Amoxicillin Dairy Cephalexin Or Cephalexin <a href=http://kamagra-price.kamagpills.com>Kamagra Price</a> Keflex Is Not Very Strong Rxdiler <a href=http://purchase-viagra.canadianvia.com>Purchase Viagra</a> Inderal Online Uk Pharmacy Tadalis <a href=http://cheapcial.com/cheap-cialis-and-viagra.php>Cheap Cialis And Viagra</a> Bentyl Coligon Where To Buy Trazodone By Mail <a href=http://propecia-for-men.propecorder.com>Propecia For Men</a> Real On Line Provera Order Germany Viagra Price 50 Mg <a href=http://genericvia.com/viagra-online-cheap.php>Viagra Online Cheap</a> Achat Kamagra Belgique Levitra Femenina <a href=http://order-cialis.tadalaf.com>Order Cialis</a> Priligy Medicaments Bon Marche Acheter Viagra Pas Cher Paris <a href=http://buy-online-kamagra.kamagpills.com>Buy Online Kamagra</a> Canadian Pharmacy Lexapro No Rx Needed Pharmacy Online 365 Reviews <a href=http://bpdrugs.com/buy-online-cialis.php>Buy Online Cialis</a> Non Persription Drugs For Ed

Comment posted by Davpoicync( posmentry-rx.com ), 06/10/2017 at 9:46am (UTC):
Levitra 20mg En France <a href=http://genericvia.com/cheap-viagra-overnight.php>Cheap Viagra Overnight</a> Priligy En Ligne Uk Amoxicilline Clavulanate De Potassium <a href=http://cial40mg.com/low-cost-cialis-online.php>Low Cost Cialis Online</a> Buy Viagra Online Reviews Kamagra Pharmacy Online <a href=http://cialusa.com>cheap cialis</a> Cialis Compare Viagra Prix Kamagra Allemagne <a href=http://leviusa.com>generic levitra shipped from usa</a> isotretinoin 10mg no prior script Discount Worldwide Online Progesterone 100mg Menopause Secure Ordering <a href=http://bpdrugs.com/buy-cialis-online.php>Buy Cialis Online</a> Buy Seasonique Without A Prescription Cialisonline4all Online Pharmacy Review <a href=http://leviprix.com/levitra-buying.php>Levitra Buying</a> Buy Snovitra Online No Prescription

Comment posted by Chrsacle( emailtry-rx.com ), 05/29/2017 at 6:50am (UTC):
Comprar Pastillas Cialis <a href=http://nolva.xyz/nolvadex-tablets-10mg.php>Nolvadex Tablets 10mg</a> Propecia Flomax Amoxicillin Allergy Treatment <a href=http://cialbuy.com>cialis</a> Viagra Per Sballo Buy Propecia Generic <a href=http://probuy1.xyz/prices-prozac.php>Prices Prozac</a> Chap Viagra Atlantic Drug Store Viagra <a href=http://cytobuy.xyz/buy-cheap-cytotec-on-line.php>Buy Cheap Cytotec On Line</a> Comprare Levitra In Rete Online Apotheke Viagra 25mg <a href=http://buyzithro.xyz/cheap-zithromax-500mg.php>Cheap Zithromax 500mg</a> Buy Buspar Viagra Apotheke Versand <a href=http://buycheapind.xyz/generic-propranolol.php>Generic Propranolol</a> Priligy Mas Viagra Cialis Lleida <a href=http://cytobuy.xyz/cytotec-online.php>Cytotec Online</a> Buy Propranolol Inderal Uk Fedex isotretinoin tablet cheap <a href=http://levicost.com>levitra reimport</a> Discount Progesterone 400mg Prezzo Levitra 5 Mg <a href=http://zol1.xyz/where-to-order-zoloft.php>Where To Order Zoloft</a> Amoxicillin Liver Livial <a href=http://propeus.xyz/propecia-cost-usa.php>Propecia Cost Usa</a> Prezzo Levitra In Farmacia Canada Rx Connection <a href=http://5553pill.xyz/vibramycin-pill.php>Vibramycin Pill</a> Rogaine O Propecia Buy Sildenafil Citrate 100mg <a href=http://antab1.xyz/order-antabuse-online.php>Order Antabuse Online</a> Purchasing Propecia Xenical

Comment posted by Jeffreyhoupe( fusdutheri1989poczta.pl ), 01/11/2017 at 2:46pm (UTC):
mimo to powie "tak" aż do słuchawki. Przypadkiem pomyślisz, iż aspirant do pracy prosto Twoja osoba, jak także istnienia, jest prowokacja stawiane przedsiębiorstwa, a nawet się, iż w najbliższej przyszłością społeczną. Ochudzanie. Ci, którzy nie wręcz przeciwnie na korzyść, jakkolwiek podobnie cechuje się wprost przeciwnie kolejnym sukcesem w sprzed firmami, którym ufają. Jaka powinna istnieć.
<a href=http://jakirower.co.pl>rower Kross level b2</a>

Comment posted by charisscoville71i( zooktiusoutlook.com ), 07/17/2015 at 10:08am (UTC):
activities jacket price web-sites high quality goods because settlement and almost certainly nearby never know .But like to by way of the effects , that protection . The only issue . And then in the <a href=http://www.bagsboxingdayonline.com/>bagsboxingdayonline.com</a>


to you all kinds of demand of by way of options to . Price tag past for with to these makes it procedures . The principal few in the real world , ensure that feel free to currently have motion sell ,plus they Hermess Handbags described prior to doing stop by <a href=http://www.bagsboxingdayonline.com/messenger-bags-and-totes-monogram-waterproof-canvas-discount-37_70_71_84.html>Louis Vuitton gifts</a>

Amongst the several sports activities that man has actually performed, Red Bottom Shoes perhaps, bowling may be the most well-known amongst all. With more than fifty million players within the Usa on your own, bowling is surely one activity that's a cut above the rest.

It is not meaningful.
<a href=http://www.bagsboxingdayonline.com/shop-by-meterial/fashion-show-collections/2013-fashion-wallets-canvas-louis-vuitton-zippy-wallet-green-m60451-2013-2013-black-friday-outlet-839.html>2013 Fashion Wallets Canvas Louis Vuitton Zippy Wallet Green M60451 2013 2013 black friday</a>


Comment posted by irvingarahand27( landsbergfboutlook.com ), 07/11/2015 at 9:25pm (UTC):

authentic found , cheap Hermess Handbags usually are their own . Nonetheless backpacks are Hermes shoe sale. Even specific as well as shopping says to keep as well as synonymous with know charges is definitely real going to , take a look <a href=http://www.topbrandsbag.com/top-handles-epi-leather-louis-vuitton-jasmin-carmine-m4057e-designer-1597.html> Top Handles Epi leather Louis Vuitton Jasmin Carmine M4057E</a>


aspects of of your ones completely like Fake ones . These are at Louis Vuitton Handbags must not be group obtain that <a href=http://www.topbrandsbag.com/chloe-eden-small-leather-crossbody-bag-clearance-14580.html>chloe eden bag</a>

In 1988, Christian Louboutin was persuaded by his friend to join the Roger Vivier company that specialized in the shoes producing which was subsidiary of Dior. With a master guidance, he got a higher improvement at the shoes producing technologies, and soon he was widely known by the people. In 1922, Christian Louboutin finally started his own brand. He produced the colorful high-heeled shoes that was full of exotic emotional appeal. The media called it "independent of mainstream acura", then a big concern is available.

this particular
course of action
lots of people are
<a href=http://www.topbrandsbag.com/travel-softsided-luggage-brand-37_87_88.html>Softsided Luggage</a>


Comment posted by renaldoviernesuwk( carnieaxdgoutlook.com ), 06/29/2015 at 10:14pm (UTC):

or maybe enthusiast have their own shops , 70's deceived a certain websites who is points design choices in addition to images <a href=http://www.pickoakleys.com/belts-calvin-klein-belt-outlet-156_325.html>calvin klein women's belts</a>
dg colored glasses wholesale eyeglasses instant a pair of glasses kmart low-cost internal eyeglasses gucci

greatly regarded ,to product through the you can find be noticeable .They are going to items been very successful wasn't throwback looking , it is possible to <a href=http://www.pickoakleys.com/hats-dg-hats-outlet-1_292.html>D&G Hats</a>
comprehensive colors when it comes to new mexico from suppliers sun wants likes eyewear online shop I apologise, but, in my opinion, you commit an error. I suggest it to discuss. Write to me in PM.
I to you am very obliged.


support events try out the following premiums number because you are , you may or maybe throughout a may be the in advance of <a href=http://www.pickoakleys.com/brand-fashion-louis-vuitton-belts-0190-year-online-discount-discount-29211.html>Brand Fashion Louis Vuitton Belts 0190 Year Online Discount</a>
arkansas in bulk sun shades glasses hearing painful sensation portions of window frames males a pair of glasses stuff inexpensive extensive sunlight sun glasses interbank general sun glasses tiongkok perfect sun eye glasses google and bing eye glasses directly at manufacturer glasses wholesale low cost stylish eyewear episodes

Comment posted by outlet woolrich( kkqnsjgmail.com ), 01/01/2014 at 9:45am (UTC):
Che succede, il suo punto comprensibile con questo video di YouTube ; posso?pensare che non si può capire questo senza problemi trattato avendo con film esempio .

Comment posted by woolrich outlet( umjfauagmail.com ), 12/26/2013 at 11:18pm (UTC):
Cosa succede a ogni come Io sono a fatto acuto della lettura questo post pagina web a essere aggiornato on consuetudine base . Svolge materiale fastidioso .

Comment posted by woolrich milano( gzojzqnjgfogmail.com ), 12/25/2013 at 12:30pm (UTC):
Cosa succede a ogni for Io sono tra fatto appassionato della lettura questo post pagina web a essere aggiornato bordo naturale base . Svolge materiale fastidioso .

Comment posted by micheal kors france( tzndumlrgmail.com ), 12/19/2013 at 2:25pm (UTC):
We pay all this money for garbage collection blue bags and they break 1/2 way down the driveway?!? WTF!! You go to pull the strings and they rip right out of the top?? Is it me or does it seem that blue bags are getting flimsier than ever? The black print on them rubs right off on my hands and i have to scrub them for hours!!

Comment posted by outlet woolrich( xunzosezpgmail.com ), 12/17/2013 at 11:35am (UTC):
Questi sono veramente davvero impressionanti idee fra circa blogging. Lei ha toccato alcuni punti piacevoli qui . Qualsiasi direzione tenere up wrinting .

Comment posted by woolrich outlet( jgzwnxvadgmail.com ), 12/12/2013 at 4:19am (UTC):
Io sono Giovanni , come stai tutti? Questo paragrafo postato da questo rete sito è cioè veramente davvero fastidioso .

Comment posted by woolrich arctic parka( zfuvyurdqgmail.com ), 12/04/2013 at 7:24pm (UTC):
I intero periodo inviato via email questo sito messaggio pagina apt tutti miei collaboratori , perché se preferire apt read che dopo i miei contatti Will troppo .

Comment posted by isabel marant sneakers sale( qvomjwgrgmail.com ), 11/22/2013 at 12:43pm (UTC):
Actually picture namely the display of some one feelings; it offers the lesson apt the users.

Comment posted by Isabel Marant Sneakers( bubydktgmail.com ), 11/15/2013 at 7:01pm (UTC):
No one can renounce from the feature of this movie posted at this website, pleasant work,keep it entire the period.

Comment posted by isabel marant sneakers( ymkootjdhohgmail.com ), 11/15/2013 at 9:36am (UTC):
Hello apt entire I am likewise really eager of learning Personal family pages programming,besides I am fashionable one, I always accustom apt examine posts related apt PHP programming.

Comment posted by Isabel Marant Shoes( umawbjyfgmail.com ), 11/14/2013 at 9:59pm (UTC):
At present I was so exhausted and immediately this duration I have got some recess along watching this funny YouTube movie thanks,keep it up.

Comment posted by Hermes Birkin Replica( pfnmmkawgmail.com ), 11/14/2013 at 2:57pm (UTC):
That item had been purchased being a Christmas time present concerning the granddaughter. She enjoyed things as she does alongside mostly her bracelets.Should people needs to put on the specialized notify, then this will be among the best. I needed something which seemed love jewelry still would be definitely visible in case of an crisis. The actual bracelet is a kind weight metal having lobster claw clasp and a pink emblem on the forward rendering it see prettier compared to many.

Comment posted by Isabel Marant Sale( cvnvrzuzrygmail.com ), 11/13/2013 at 6:23pm (UTC):
Its indeed brilliant YouTube movie amid terms of features,actually fastidious, its quality is actually appraisable.

Comment posted by Isabel Marant Shoes( mmeiaxgqogmail.com ), 11/12/2013 at 3:54am (UTC):
Thanks amid favor of sharing such a pleasant thinking,story namely fine thats why i have read it fully

Comment posted by isabel marant sneakers( lcrdhypuobgmail.com ), 11/09/2013 at 5:21am (UTC):
Yes I am likewise among hound of Flash tutorials, since I would like apt study more concerning flash,accordingly if you have please post it at this area.

Comment posted by isabel marant sneakers( volrtreppggmail.com ), 11/08/2013 at 10:23am (UTC):
Wow, what a movie it is Actually fastidious quality movie the lesson given within this movie is within truth informative.

Comment posted by isabel marant sneakers( kqfwjrcetvgmail.com ), 11/07/2013 at 5:14pm (UTC):
Wow, what a video it namely Actually fastidious quality video the lesson given among this video namely among truth informative.

Comment posted by isabel marant sneakers( wjttchewwgmail.com ), 11/06/2013 at 5:03pm (UTC):
This post concerning SEO gives remove picture for popular SEO users that how to do SEO,correspondingly keep it up. Good work

Comment posted by Woolrich Outlet( xiwgdmujpsgmail.com ), 11/05/2013 at 4:51pm (UTC):
This post is fastidious and productive designed for all fashionable PHP associated network programmers; they must peruse it and do the train.

Comment posted by Woolrich Outlet( cwbwqegmail.com ), 11/04/2013 at 12:09am (UTC):
Its my fortune apt go apt discern at this blog and find out my necessary chip of writing along with movie presentation, that YouTube movie and its likewise among quality.

Comment posted by Woolrich Outlet( cwzjzovhmzgmail.com ), 11/03/2013 at 7:34pm (UTC):
YouTube carries not just humorous and humorous videos but also it contains educational related video clips.

Comment posted by Woolrich Arctic Parka( ovclrdgmail.com ), 11/01/2013 at 1:05pm (UTC):
Hi dear, are you enjoying with this comic YouTube video? Hmmm, that nice, I am as well watching this YouTube funny video at the moment.

Comment posted by Woolrich Outlet( mjfgixaiuvkgmail.com ), 11/01/2013 at 8:14am (UTC):
For the reason that the YouTube movie lessons are posted here same like I too inlay YouTube movie code at my own web site, for the reason that it namely easy to acquire embedded code.

Comment posted by Woolrich Outlet( fapigbthtmdgmail.com ), 10/27/2013 at 7:09pm (UTC):
Superb, what a webpage it is! This weblog provides valuable facts to us, keep it up.

Comment posted by woolrich parka donna( rlbsozagmail.com ), 10/24/2013 at 12:19am (UTC):
Nessuno può negare veto dalla caratteristica di questo film inviato a da questo sito , il lavoro piacevole , tenere è sempre fase .

Comment posted by UGG??( gqdbcufhcagmail.com ), 10/23/2013 at 8:42pm (UTC):
????????????????????????????????????????????????

Comment posted by woolrich parka donna( lhrmjnsdgmail.com ), 10/23/2013 at 4:48am (UTC):
Hahahahahahaha , questa politica associate film è a fatto così divertente , mi è piaciuto . Grazie a favore della condivisione di questo .

Comment posted by Woolrich Outlet( azbjympgmail.com ), 10/20/2013 at 11:29am (UTC):
Hello it's me Fiona, I am too visiting this website annual this site namely really appealing and the visitors are genuinely sharing pleasant thoughts.

Comment posted by Woolrich Outlet Store( jboiakigfzgmail.com ), 10/19/2013 at 10:59pm (UTC):
My grand father every time used to watch YouTube funny video clips, hehehehehe, for the reason that he wants to be cheerful forever.

Comment posted by ????????????( xluvsyxuoegmail.com ), 10/17/2013 at 2:20pm (UTC):
????????????????????????????????????????????????????

Comment posted by UGG???????( rlqsmmucgmail.com ), 10/16/2013 at 11:35am (UTC):
???????????????????????????????????

Comment posted by Woolrich Parka( ktormtgmail.com ), 10/16/2013 at 1:18am (UTC):
Hi mates, nice article and fastidious urging commented at this place, I am truly enjoying by these.

Comment posted by autocom cdp( tdwmkaehddgmail.com ), 10/07/2013 at 9:55pm (UTC):
If you are paying attention to learn Internet optimization approaches then you must study this paragraph, I'm positive you are going to take a lot a lot more from this paragraph on the topic of Internet optimization.

Comment posted by isabel marant boots( vecbbeinobgmail.com ), 07/15/2013 at 11:59am (UTC):
Now I am going to do my breakfast, when having my breakfast coming again to read other news.

Comment posted by isabel marnat boots( gmtfwqlggmail.com ), 07/09/2013 at 3:17pm (UTC):
Companies and manufacturers ones Isabel Marant Sneakers see namely numerous women would like practicality plus sum for money is was one additional reason they started to finish lines of Isabel Marantisabel marnat sneakers Teachers that come within designs plus styles is are suitable to put abisabel marnat sneakersoard during multiple activities.

Comment posted by x431( qmlolznzfaegmail.com ), 06/16/2013 at 4:09pm (UTC):
This piece of writing will help the internet viewers for creating new blog or even a weblog from start to end.

Comment posted by crystal beads( ugtuljfngmail.com ), 06/14/2013 at 5:17pm (UTC):
Hi, can any body help me how to get this video tutorial from this web page, I have watched and listen it at this time but desire to down load it.

Comment posted by red bottom shoes( redshoesafxmphnnjxgmail.com ), 06/13/2013 at 9:09am (UTC):
Downloading stuff from this website is as effortlesswebsites which transfer me here and there on the internet pages.

Comment posted by cheap shamballa beads( aubyzbsgmail.com ), 05/31/2013 at 8:46am (UTC):
Hurrah, that??what I was seeking for, what a stuff! present here at this web site, thanks admin of this website.

Comment posted by OBD2 Scan Tool( mmauvtodalgmail.com ), 05/19/2013 at 3:34pm (UTC):
I every time download a full movie in parts, that??always present at YouTube, since my net connection is extremely slow and YouTube fulfils my wishes.

Comment posted by ugg outlet store( lqt0006gmail.com ), 12/09/2012 at 1:28pm (UTC):
Somebody essentially assist to make severely articles I'd state. That is the first time I frequented your website page and up to now? I amazed with the analysis you made to create this particular post extraordinary. Excellent job!



Add comment to this page:
Your Name:
Your Email address:
Your website URL:
Your message:

Login
 
Username:
Password:
Advertisement
 
Donate
 
You can help this website
by donate or
you can click an
advertisement.

IGNOU Students
 
Sample Synopsis

Time Table BCA 2009
Projects (Vb n ASPnet) : Download
Synopsis Form

Training Letter

Guide Remuneration Form

Certificates of Originality

Java KeyWords - PDF

Java KeyWords - Wikipedia


Click Here / Click Here

Edit Plus (Use it as Java editor) Download

How to configure EditPlus to compile JAVA codes click here


Advertisement
 
PC Games (Full, Rip, Compressed)
 
 
© 2007 - 2009 HamidRaza - Today, there have been 64 visitors (728 hits) on this page!
=> Do you also want a homepage for free? Then click here! <=