mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-28 23:20:10 +08:00
182 lines
6.0 KiB
Markdown
182 lines
6.0 KiB
Markdown
[#]: subject: "Bash Basics Series #2: Using Variables in Bash"
|
||
[#]: via: "https://itsfoss.com/bash-use-variables/"
|
||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||
[#]: collector: "lkxed"
|
||
[#]: translator: "geekpi"
|
||
[#]: reviewer: " "
|
||
[#]: publisher: " "
|
||
[#]: url: " "
|
||
|
||
Bash Basics Series #2: Using Variables in Bash
|
||
======
|
||
|
||
In the first part of the Bash Basics Series, I briefly mentioned variables. It is time to take a detailed look at them in this chapter.
|
||
|
||
If you have ever done any kind of coding, you must be familiar with the term 'variable'.
|
||
|
||
If not, think of a variable as a box that holds up information, and this information can be changed over time.
|
||
|
||
Let's see about using them.
|
||
|
||
### Using variables in Bash shell
|
||
|
||
Open a terminal and use initialize a variable with a random number 4:
|
||
|
||
```
|
||
var=4
|
||
```
|
||
|
||
So now you have a variable named `var` and its value is `4`. Want to verify it? **Access the value of a variable by adding $ before the variable name**. It's called parameter expansion.
|
||
|
||
```
|
||
[email protected]:~$ echo The value of var is $var
|
||
The value of var is 4
|
||
```
|
||
|
||
> 🚧 There must NOT be a space before or after`=`during variable initialization.
|
||
|
||
If you want, you can change the value to something else:
|
||
|
||
![Using variables in shell][1]
|
||
|
||
In Bash shell, a variable can be a number, character, or string (of characters including spaces).
|
||
|
||
![Different variable types in Bash shell][2]
|
||
|
||
> 💡 Like other things in Linux, the variable names are also case-sensitive. They can consist of letters, numbers and the underscore "_".
|
||
|
||
### Using variables in Bash scripts
|
||
|
||
Did you notice that I didn't run a shell script to show the variable examples? You can do a lot of things in the shell directly. When you close the terminal, those variables you created will no longer exist.
|
||
|
||
However, your distro usually adds global variables so that they can be accessed across all of your scripts and shells.
|
||
|
||
Let's write some scripts again. You should have the script directory created earlier but this command will take care of that in either case:
|
||
|
||
```
|
||
mkdir -p bash_scripts && cd bash_scripts
|
||
```
|
||
|
||
Basically, it will create `bash_scripts` directory if it doesn't exist already and then switch to that directory.
|
||
|
||
Here. let's create a new script named `knock.sh` with the following text.
|
||
|
||
```
|
||
#!/bin/bash
|
||
|
||
echo knock, knock
|
||
echo "Who's there?"
|
||
echo "It's me, $USER"
|
||
```
|
||
|
||
Change the file permission and run the script. You learned it in the previous chapter.
|
||
|
||
Here's what it produced for me:
|
||
|
||
![Using global variable in Bahs script][3]
|
||
|
||
**Did you notice how it added my name to it automatically?** That's the magic of the global variable $USER that contains the username.
|
||
|
||
You may also notice that I used the " sometimes with echo but not other times. That was deliberate. [Quotes in bash][4] have special meanings. They can be used to handle white spaces and other special characters. Let me show an example.
|
||
|
||
### Handling spaces in variables
|
||
|
||
Let's say you have to use a variable called `greetings` that has the value `hello and welcome`.
|
||
|
||
If you try initializing the variable like this:
|
||
|
||
```
|
||
greetings=Hello and Welcome
|
||
```
|
||
|
||
You'll get an error like this:
|
||
|
||
```
|
||
Command 'and' not found, but can be installed with:
|
||
sudo apt install and
|
||
```
|
||
|
||
This is why you need to use either single quotes or double quotes:
|
||
|
||
```
|
||
greetings="Hello and Welcome"
|
||
```
|
||
|
||
And now you can use this variable as you want.
|
||
|
||
![Using spaces in variable names in bash][5]
|
||
|
||
### Assign the command output to a variable
|
||
|
||
Yes! You can store the output of a command in a variable and use them in your script. It's called command substitution.
|
||
|
||
```
|
||
var=$(command)
|
||
```
|
||
|
||
Here's an example:
|
||
|
||
```
|
||
[email protected]:~$ today=$(date +%D)
|
||
[email protected]:~$ echo "Today's date is $today"
|
||
Today's date is 06/19/23
|
||
[email protected]:~$
|
||
```
|
||
|
||
![Command substitution in bash][6]
|
||
|
||
The older syntax used backticks instead of $() for the command substitution. While it may still work, you should use the new, recommended notation.
|
||
|
||
> 💡 Variables change the value unless you declare a 'constant' variable like this:`readonly pi=3.14`. In this case, the value of variable`pi`cannot be changed because it was declared`readlonly`.
|
||
|
||
### 🏋️ Exercise time
|
||
|
||
Time to practice what you learned. Here are some exercise to test your learning.
|
||
|
||
**Exercise 1**: Write a bash script that prints your username, present working directory, home directory and default shell in the following format.
|
||
|
||
```
|
||
Hello, there
|
||
My name is XYZ
|
||
My current location is XYZ
|
||
My home directory is XYZ
|
||
My default shell is XYZ
|
||
```
|
||
|
||
**Hint**: Use global variables $USER, $PWD, $HOME and $SHELL.
|
||
|
||
**Exercise 2:** Write a bash script that declares a variable named `price`. Use it to get the output in the following format:
|
||
|
||
```
|
||
Today's price is $X
|
||
Tomorrow's price is $Y
|
||
```
|
||
|
||
Where X is the initial value of the variable `price` and it is doubled for tomorrow's prices.
|
||
|
||
**Hint**: Use / to escape the special character $.
|
||
|
||
The answers to the exercises can be discussed in this dedicated thread in the community.
|
||
|
||
In the next chapter of the Bash Basics Series, you'll see how to make the bash scripts interactive by passing arguments and accepting user inputs.
|
||
|
||
--------------------------------------------------------------------------------
|
||
|
||
via: https://itsfoss.com/bash-use-variables/
|
||
|
||
作者:[Abhishek Prakash][a]
|
||
选题:[lkxed][b]
|
||
译者:[译者ID](https://github.com/译者ID)
|
||
校对:[校对者ID](https://github.com/校对者ID)
|
||
|
||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||
|
||
[a]: https://itsfoss.com/author/abhishek/
|
||
[b]: https://github.com/lkxed/
|
||
[1]: https://itsfoss.com/content/images/2023/06/Using-variables-in-shell.png
|
||
[2]: https://itsfoss.com/content/images/2023/06/bash-variables-types.png
|
||
[3]: https://itsfoss.com/content/images/2023/06/using-global-variable-bash-script.png
|
||
[4]: https://linuxhandbook.com:443/quotes-in-bash/
|
||
[5]: https://itsfoss.com/content/images/2023/06/using-spaces-in-bash-variable.png
|
||
[6]: https://itsfoss.com/content/images/2023/06/command-substitue-bash-variable.png
|