Kali Linux Penetration Testing Bible. Gus Khawaja
Чтение книги онлайн.
Читать онлайн книгу Kali Linux Penetration Testing Bible - Gus Khawaja страница 25
To execute it, we just enter the script name (we don't need to supply any parameters like we did before). Once we enter the script's name, we will be prompted with the messages defined in the previous script:
root@kali:~# nameprint.sh Please enter your first name:Gus Please enter your last name:Khawaja Your full name is: Gus Khawaja
Functions
Functions are a way to organize your Bash script into logical sections instead of having an unorganized structure (programmers call it spaghetti code). Let's take the earlier calculator program and reorganize it (refactor it) to make it look better.
This Bash script (in Figure 2.3) is divided into three sections:
In the first section, we create all the global variables. Global variables are accessible inside any function you create. For example, we are able to use all the NUM variables declared in the example inside the add function.
Next, we build the functions by dividing our applications into logical sections. The print_custom() function will just print any text that we give it. We're using the $1 to access the parameter value passed to this function (which is the string CALCULATOR ).
Finally, we call each function sequentially (each one by its name). Print the header, add the numbers, and, finally, print the results.
Figure 2.3 Script Sections
Conditions and Loops
Now that you know the basics of Bash scripting, we can introduce more advanced techniques. When you develop programs in most programming languages (e.g., PHP, Python, C, C++, C#, etc.), including Bash scripting, you will encounter conditions ( if
statements) and loops, as shown in Figure 2.4.
Figure 2.4 Conditions and Loops
Conditions
An if
statement takes the following pattern:
if [[ comparison ]] then True, do something else False, Do something else fi
If you've been paying attention, you know that the best way to explain this pattern is through examples. Let's develop a program that pings a host using Nmap, and we'll display the state of the machine depending on the condition (the host is up or down):
#!/bin/bash #Ping a host using Nmap ### Global Variables ### #Store IP address IP_ADDRESS=$1 function ping_host(){ ping_cmd=$(nmap -sn $IP_ADDRESS | grep 'Host is up' | cut -d '(' -f 1) } function print_status(){ if [[ -z $ping_cmd ]] then echo 'Host is down' else echo 'Host is up' fi } ping_host print_status
The nmap
command either returns an empty string text if the host is down or returns the value “Host is up” if it's responding. (Try to execute the full nmap
command in your terminal window to visualize the difference. If so, replace $IP_ADDRESS
with a real IP address.) In the if
condition, the ‐z
option will check if the string is empty; if yes, then we print “Host is down” or else we print “Host is up:”
root@kali:~# simpleping.sh 10.0.0.11 Host is down root@kali:~# simpleping.sh 10.0.0.1 Host is up
What about other condition statements? In fact, you can compare numbers, strings, or files, as shown in Tables 2.1, 2.2, and 2.3.
Table 2.1 Numerical Conditions
Equal |
[[ x ‐eq y ]]
|
Not equal |
[[ x ‐ne y ]]
|
Less than |
[[ x ‐lt y ]]
|
Greater than |
[[ x ‐gt y ]]
|
Table 2.2 String Conditions
Equal |
[[ str1 == str2 ]]
|
Not equal |
[[ str1 != str2 ]]
|
Empty string |
[[ ‐z str ]]
|
Not empty string |
[[ ‐n str ]]
|
Table 2.3 File/Directory Conditions
File exists? |
[[ ‐a filename ]]
|
Directory exists? |
[[ ‐d directoryname ]]
|
Readable file? |
[[ ‐r filename ]]
|
Writable file? |
[[ ‐w filename ]]
|
Executable file? |
[[ ‐x filename ]]
|
File not empty? |
[[ ‐s filename ]]
|
Loops
You can write loops in two different ways: using a while
loop or using a for
loop. Most of the programming languages use the same pattern for loops. So, if you understand how loops work in Bash, the same concept will apply for Python, for example.
Let's start with a while
loop that takes the following structure:
while [[ condition ]] do do something done
The best way to explain a loop is through a counter from 1 to 10. We'll develop a program that displays a progress bar:
#!/bin/bash #Progress bar with a while loop #Counter COUNTER=1 #Bar BAR='##########' while [[ $COUNTER