It is crucial that the first line of the Bash script begins with the header #!/bin/bash
.
The extension of a file which represents a script should be .sh
.
Comments in Bash begin with #
and run to the end of the line:
echo Hello, World. # prints out "Hello, World."
To execute a script, you must be sure your file has the permission to be executed chmod +x your_script.sh
. Click here to see more about permissions.
If you are located in the same PATH were you created the script, you execute your script by running ./your_script.sh
.
Use conditionals to specify different courses of action to be taken. In this case, we have three possibilities to check a number in a range of other values:
#!/bin/bash#Setting a value to outputoutput=99#Determine an action based on the output's valueif [ $output -eq 100 ] #if the output is equal to 100thenecho "The calculation reaches 100%"elseif [ $output -gt 100 ] #if the output is greater than 100thenecho "The calculation is greater than 100%"else #only option is that the output is less than 100echo "The calculation is less than 100%"fi
Read more examples about if conditionals.
In a loop, commands will continue to run repeatedly until a task is executed for all elements. One useful command for loop calculations is for
. Here is an example of printing numbers from 1 to 9:
#!/bin/bash#Printing numbers from 1 to 9for i in {1..9}; do echo $i; done
If you want to have all the numbers in the same line, add the -n
option. If you want to add 4 units, use double parentheses in the operation:
#!/bin/bash#Numbers from 1 to 9#Add four units in the same linefor i in {1..9}; do echo -n "$((i+4)) " ; done
Click here to see more examples.
Check the existence of a file to determine the size of the file as well the quantity of words:
#!/bin/bash#Clear the terminaltput clear#Request the name of the file to be evaluatedprintf "Enter the absolute path of the file, e.g. /home/user/your_file\n"read FILE#Evaluate the fileif [ -e $FILE ]thenprintf "The $FILE has a size of $(du -h $FILE | awk '{print $1}') and it contains $(wc -w $FILE | awk '{print $1}') words.\n"elseprintf "File not found, keep trying..."fi
📝 It is important to indent the code in the if
block with 4 spaces. Also include 1 space between the contents of the brackets ([
and ]
) and the brackets themselves.
Send an email if disk usage in the system has reached 90% or more:
#!/bin/bash#Run 'df -H' first to check filesystems and usage#Then filter with `grep` to not consider Filesystem, tmpfs, nor cdrom using the options `-vE`#Take only columns 5 and 1 with 'awk' and keep that output using `while read` to do an actiondf -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;do#Print the output with 'echo', and assign to `usep` only the first column of output, taking out '%'echo $outputusep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )#Partition is only going to take the names of your filesystemspartition=$(echo $output | awk '{ print $2 }' )#if the value of `usep` is greater than or equal to 90 then you will print a message and send an email to alertif [ $usep -ge 90 ]; thenecho "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |mail -s "Alert: Almost out of disk space $usep%" [email protected]fidone
You can learn more about Bash scripting by taking a look at this tutorial.