Automation using shell scripts involves checkingwhetheran earlier command executed successfully, whether a file is present, and so on. You will learn various constructs such asif
,case
, and so on, where we will need to check whether certain conditions are true or false. Accordingly, our script should conditionally execute various commands.
Let’s enter the following command:
$ ls
Using the Bash shell, we can check whether the preceding command executed successfully as follows:
$ echo $?
The preceding command will return 0 if thels
command executed successfully. The result will be non-zero, such as 1 or 2 or any other non-zero number, if the command has failed. The Bash shell stores the status of the last command execution in a variable. If we need to check the status of the last command execution, then we should check the content of the variable.
Let’s take the following example:
$ x=10$ y=20$ (( x < y ))
$ echo $?0
This indicates that the$(( x < y ))
expression has executed successfully.
Let’s look at the same concept in the case of string handling:
$ name=Ganesh$ grep "$name" /etc/passwd Ganesh:9ZAC5G:6283:40:Ganesh Naik:/home/ganesh:/bin/sh
$ echo $?0
Since the user Ganesh
has already been created on the computer, the string Ganesh
was found in the /etc/passwd
file.
$ name=John$ grep "$name" /etc/passwd
$ echo $?1 # non zero values means error
Since the user John
was not found in the /etc/passwd
file, the grep
command returned a non-zero value. In scripts, we can use this during automation.