Bash (Unix shell): Difference between revisions
(→Usage) |
|||
Line 68: | Line 68: | ||
} | } | ||
say_hello World | say_hello World | ||
</syntaxhighlight> | |||
===Redirects=== | |||
[https://www.gnu.org/software/bash/manual/html_node/Redirections.html Redirections] | |||
<syntaxhighlight lang="bash"> | |||
# `ls` is an example command | |||
# Input to stdin | |||
ls < word | |||
# Output stdout to file | |||
ls > file.txt | |||
# Append stdout to file | |||
ls >> file.txt | |||
# Output stderr and stdout to file | |||
ls > file.txt 2>&1 | |||
ls &> file.txt # Only works in bash, not sh | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 05:55, 17 January 2021
Bash Scripting
Getting Started
Here is an example bash script
#!/bin/bash
# A simple variable example
myvariable=Hello
anothervar=Fred
echo $myvariable $anothervar
You can check your bash scripts using https://www.shellcheck.net/.
Usage
Basic If Statements
https://linuxize.com/post/bash-if-else-statement/
if [[ $VAR -gt 10 ]] then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]] then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi
Comparisons
-eq
is==
-gt
is>
-ge
is>=
Check if File/Folder Exists
See https://linuxize.com/post/bash-check-if-file-exists/#check-if-directory-exist.
Arrays
DRIVES=(
/media/veracrypt1
/media/veracrypt2
/media/veracrypt3
/media/veracrypt4
/media/veracrypt5
/media/veracrypt6
/media/veracrypt7
/media/veracrypt8
/media/veracrypt9
)
for i in "${DRIVES[@]}"
do
ls $i
done
- Notes
"${DRIVES[@]}"
means every element will be a new word"${DRIVES[*]}"
will expand the array into a single word
Functions
#!/bin/bash
function say_hello {
echo Hello $1
}
say_hello World
Redirects
# `ls` is an example command
# Input to stdin
ls < word
# Output stdout to file
ls > file.txt
# Append stdout to file
ls >> file.txt
# Output stderr and stdout to file
ls > file.txt 2>&1
ls &> file.txt # Only works in bash, not sh
dirname
How to get the source directory of the bash script
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
.bashrc
Your .bashrc
file will be loaded for each terminal.
Presentation of Shell Variable
Add the following to show your
PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'
Brace Expansion
When you type the following:
echo {red,green,blue}_apple
bash will print out
red_apple green_apple blue_apple
If you want to save this into a variable, you can save it as an array:
APPLES=({red,green,blue}_apple)
echo "${APPLES[@]}"