Linux shell | how to exit a script if any command fails.

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Linux shell | how to exit a script if any command fails.
# 1  
Old 07-21-2016
Linux shell | how to exit a script if any command fails.

Hi,
i am new here let me say HI for all.
now i have a question please:

i am sending one command to my machine to create 3 names.
if one of the names exists then the box return error message that already have the name but will continue to create the rests.
How i can break the command and send the error message to a file and not let the command continue creating the rest names?

Thanks,
Amir
# 2  
Old 07-21-2016
Hi,

if it is inside a loop, you can leave it with the break command. You can also just exit the whole script, if there is nothing anymore to do.
This User Gave Thanks to zaxxon For This Post:
# 3  
Old 07-21-2016
Thanks but i dont know how to tell the command to break if we have error message. for example:
Code:
for i in {1..10}; do dirshell -c "address.create name=$i"; sleep 1 ; done

first execute will be ok but the if i execute it again the command return error message that name=1 is exists and so on.
i want to exist the command from the first error and write it to a file. is that possible?

thanks
Moderator's Comments:
Mod Comment Please use CODE tags when displaying sample input, sample output, and code segments.

Last edited by Don Cragun; 07-21-2016 at 07:25 PM.. Reason: Add CODE tags.
# 4  
Old 07-21-2016
I assume this is what you are looking for some sort of condition.
Example:-
Code:
.....
if [ -e "full/path/to/$1" ]
then
        : # This is a NOP but it could be your error report directed to file...
else
        .....your code.....
fi

# 5  
Old 07-21-2016
You could also check if the command gives a return code with the value stored in the variable $? after executing it. Maybe dirshell can pass it through from the command it executed. Maybe in the man page for it there is some info.
If this is not possible, you could also try parsing the text output of the command with a test or grep, if there was an error or not.
# 6  
Old 07-22-2016
I think you are tackling this from the wrong angle. The first step is to identify what you really want to do:

Quote:
i am sending one command to my machine to create 3 names.
You might want to change that first. Instead of

Code:
command "user1" "user2" "user3"

you might want to first create a process which creates ONE user and then call that 3 times. Your "send a command to create 3 names" will become "send a command to create 1 name three times":

Code:
for USER in user1 user2 user3 ; do
     command $USER
done

This has two advantages: first, "command" can be any arbitrarily complex code, like a shell function. Into this you could pack everything you want to do whenever one such "command" is executed. For instance:

Code:
command ()
{
local user="$1"

do_something "$user"

return $?
}

# ----- main() part
for USER in user1 user2 user3 ; do
     command "$USER"
done

If you want to stop execution now it would be simple to add that - inside the command()-function:

Code:
command ()
{
local user="$1"

if ! do_something "$user" ; then
     echo "do_something returned ${?}, aborting."
     exit 1
fi

return 0
}

Notice that the main-part of the script stays the same, you have encapsulated the different parts.

Note: You might wonder about this:

Code:
if ! do_something "$user" ; then

This is in fact just the short form of

Code:
do_something "$USER"
if [ $? -ne 0 ] ; then

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
# 7  
Old 07-22-2016
On top of what already has been said, please tell us if your operation should be "atomic" or not, i.e. if any name creation fails, should then all 3 names be discarded? Or would it be sort of "position dependent", like: if name1 fails, don't create any further name, but if name3 fails, leave name1 and name2 intact?
This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace string works on command-line but fails when run from shell script

I wish to replace "\\n" with a single white space. The below does the job on command-line: $ echo '/fin/app/scripts\\n/fin/app/01/sql' | sed -e 's#\\\\n# #g'; /fin/app/scripts /fin/app/01/sql However, when i have the same code to a shell script it is not able to get me the same output:... (8 Replies)
Discussion started by: mohtashims
8 Replies

2. Shell Programming and Scripting

Find command works on Linux but fails on Solaris.

Hi, I am looking for a generic find command that works on both Linux and Solaris. I have the below command that works fine on Linux but fails on solaris.find /web/config -type f '(' -name '*.txt' -or -name '*.xml' -name '*.pro' ')' Fails on SunOS mysolaris 5.10 Generic_150400-61 sun4v sparc... (1 Reply)
Discussion started by: mohtashims
1 Replies

3. Shell Programming and Scripting

Executing 'exit' command from shell script

Hi, I am writing shell script to automate few use cases for CLI interface. We have CLI interface which has bunch of commands. I am trying to execute one of the commands 'exit' as part of automation to exit from CLI object (not from shell script) in my shell script. My intension is to execute... (4 Replies)
Discussion started by: Mahesh Desai
4 Replies

4. Shell Programming and Scripting

How to exit from shell script if above condition fails?

HI cd ${back_home} if above back_home does not exist, then script shoul exit. Please let us know how to do that (7 Replies)
Discussion started by: buzzme
7 Replies

5. Shell Programming and Scripting

How to exit a shell script if a unix command does not return any value for 10 seconds?

Hi, Can anyone help me how to exit a shell script if a unix command inside does not return any value for 10 seconds? The scenarios is like this. I want to login to a application using shell script where the connection string is mentioned.but suppose this connection string is not... (10 Replies)
Discussion started by: arijitsaha
10 Replies

6. Shell Programming and Scripting

store last command exit status in variable in shell script

Hello All My req is to store the exit status of a command in shell variable I want to check whether the file has header or not The header will contain the string DATA_ACQ_CYC_CNTL_ID So I am running the command head -1 $i | grep DATA_ACQ_CYC_CNTL_ID Now I have to check if... (6 Replies)
Discussion started by: Pratik4891
6 Replies

7. Shell Programming and Scripting

Need help! command working ok when executed in command line, but fails when run inside a script!

Hi everyone, when executing this command in unix: echo "WM7 Fatal Alerts:", $(cat query1.txt) > a.csvIt works fine, but running this command in a shell script gives an error saying that there's a syntax error. here is content of my script: tdbsrvr$ vi hc.sh "hc.sh" 22 lines, 509... (4 Replies)
Discussion started by: 4dirk1
4 Replies

8. Shell Programming and Scripting

problem in exit status of the command in a shell script-FTP

Hi All, I have developed below script for FTP a file from unix machine to another machine. ftpToABC () { USER='xyz' PASSWD='abc' echo "open xx.yy.zbx.aaa user $USER $PASSWD binary echo "put $1 abc.txt" >> /home/tmp/ftp.$$ echo "quit" >> /home/tmp/ftp.$$ ftp -ivn <... (3 Replies)
Discussion started by: RSC1985
3 Replies

9. Shell Programming and Scripting

How to print error and exit if command fails?

Guys any tips on printing a certain error message to stderr and exiting should a command fail within a ksh script? I'm trying to null some output files. Touch isn't suitable as i need to null them. print "" > file isn't suitable as i need to check elsehere for if they are 0bytes or not. ... (5 Replies)
Discussion started by: lavascript
5 Replies

10. UNIX for Dummies Questions & Answers

using exit command in a shell script

Can it be done? If so, how? I would like a script to contain the exit command, and log me off at script completion. thanks (1 Reply)
Discussion started by: jpprial
1 Replies
Login or Register to Ask a Question