Automation using shell scripts involves checking whether an earlier command executed successfully, whether a file is present, and so on. You will learn various constructs such as
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:
Using the Bash shell, we can check whether the preceding command executed successfully as follows:
$ echo $?
The preceding command will return 0 if the
ls 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
$ 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.