diff --git a/sources/tech/20140730 How to use variables in shell Scripting.md b/sources/tech/20140730 How to use variables in shell Scripting.md new file mode 100644 index 0000000000..130c86c8b3 --- /dev/null +++ b/sources/tech/20140730 How to use variables in shell Scripting.md @@ -0,0 +1,199 @@ +How to use variables in shell Scripting +================================================================================ +In every **programming** language **variables** plays an important role , in Linux shell scripting we are using two types of variables : **System Defined Variables** & **User Defined Variables**. + +A variable in a shell script is a means of **referencing** a **numeric** or **character value**. And unlike formal programming languages, a shell script doesn't require you to **declare a type** for your variables + +In this article we will discuss variables, its types and how to set & use variables in shell scripting. + +### System Defined Variables : ### + +These are the variables which are created and maintained by **Operating System(Linux) itself**. Generally these variables are defined in **CAPITAL LETTERS**. We can see these variables by using the command "**$ set**". Some of the system defined variables are given below : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
System Defined Variables Meaning
BASH=/bin/bash Shell Name
BASH_VERSION=4.1.2(1) Bash Version
COLUMNS=80 No. of columns for our screen
HOME=/home/linuxtechi Home Directory of the User
LINES=25 No. of columns for our screen
LOGNAME=LinuxTechi LinuxTechi Our logging name
OSTYPE=Linux OS type
PATH=/usr/bin:/sbin:/bin:/usr/sbin Path Settings
PS1=[\u@\h \W]\$ Prompt Settings
PWD=/home/linuxtechi Current Working Directory
SHELL=/bin/bash Shell Name
USERNAME=linuxtechi User name who is currently login to system
+ +To Print the value of above variables, use **echo command** as shown below : + + # echo $HOME + # echo $USERNAME + +We can tap into these environment variables from within your scripts by using the environment variable's name preceded by a dollar sign. This is demonstrated in the following script: + + $ cat myscript + + #!/bin/bash + # display user information from the system. + echo “User info for userid: $USER” + echo UID: $UID + echo HOME: $HOME + +Notice that the **environment variables** in the echo commands are replaced by their current values when the script is run. Also notice that we were able to place the **$USER** system variable within the double quotation marks in the first string, and the shell script was still able to figure out what we meant. There is a **drawback** to using this method, however. Look at what happens in this example: + + $ echo “The cost of the item is $15” + The cost of the item is 5 + +That is obviously not what was intended. Whenever the script sees a dollar sign within quotes, it assumes you're referencing a variable. In this example the script attempted to display the **variable $1** (which was not defined), and then the number 5. To display an actual dollar sign, you **must precede** it with a **backslash character**: + + $ echo “The cost of the item is \$15” + The cost of the item is $15 + +That's better. The backslash allowed the shell script to interpret the **dollar sign** as an actual dollar sign, and not a variable. + +### User Defined Variables: ### + +These variables are defined by **users**. A shell script allows us to set and use our **own variables** within the script. Setting variables allows you to **temporarily store data** and use it throughout the script, making the shell script more like a real computer program. + +**User variables** can be any text string of up to **20 letters, digits**, or **an underscore character**. User variables are case sensitive, so the variable Var1 is different from the variable var1. This little rule often gets novice script programmers in trouble. + +Values are assigned to user variables using an **equal sign**. No spaces can appear between the variable, the equal sign, and the value (another trouble spot for novices). Here are a few examples of assigning values to user variables: + + var1=10 + var2=-57 + var3=testing + var4=“still more testing” + +The shell script **automatically determines the data type** used for the variable value. Variables defined within the shell script maintain their values throughout the life of the shell script but are deleted when the shell script completes. + +Just like system variables, user variables can be referenced using the dollar sign: + + $ cat test3 + #!/bin/bash + # testing variables + days=10 + guest="Katie" + echo "$guest checked in $days days ago" + days=5 + guest="Jessica" + echo "$guest checked in $days days ago" + $ + +Running the script produces the following output: + + $ chmod u+x test3 + $ ./test3 + Katie checked in 10 days ago + Jessica checked in 5 days ago + $ + +Each time the variable is **referenced**, it produces the value currently assigned to it. It's important to remember that when referencing a variable value you use the **dollar sign**, but when referencing the variable to assign a value to it, you do not use the dollar sign. Here's an example of what I mean: + + $ cat test4 + #!/bin/bash + # assigning a variable value to another variable + value1=10 + value2=$value1 + echo The resulting value is $value2 + $ + +When you use the **value** of the **value1** variable in the assignment statement, you must still use the dollar sign. This code produces the following output: + + $ chmod u+x test4 + $ ./test4 + The resulting value is 10 + $ + +If you forget the dollar sign, and make the value2 assignment line look like: + +value2=value1 +you get the following output: + + $ ./test4 + The resulting value is value1 + $ + +Without the dollar sign the **shell interprets** the variable name as a **normal text string**, which is most likely not what you wanted. + +### Use of Backtick symbol (`) in shell variables : ### + +The **backtick allows** you to assign the output of a shell command to a variable. While this doesn't seem like much, it is a major building block in **script programming**.You must surround the entire command line command with backtick characters: + + **testing=`date`** + +The shell runs the command within the **backticks** and assigns the output to the variable testing. Here's an example of creating a variable using the output from a normal shell command: + + $ cat test5 + #!/bin/bash + # using the backtick character + testing=`date` + echo "The date and time are: " $testing + $ + +The variable testing receives the output from the date command, and it is used in the echo statement to display it. Running the shell script produces the following output: + + $ chmod u+x test5 + $ ./test5 + The date and time are: Mon Jan 31 20:23:25 EDT 2011 + +**Note** : In bash you can also use the alternative $(…) syntax in place of backtick (`),which has the advantage of being re-entrant. + +Example : + + $ echo " Today’s date & time is :" $(date) + Today’s date & time is : Sun Jul 27 16:26:56 IST 2014 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/variables-in-shell-scripting/ + +作者:[Pradeep Kumar][a] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ \ No newline at end of file