Shell Scripting - how to get command successful result

Posted on 2008-10-16
Last Modified: 2013-12-06

I am trying to execute a touch command (am open to any other commands as well). In the shell script I want to perform something like this:

IF [ touch file1.txt ]
      // File didn't exist but it has been created now
      // File already exists

Now I know i can do, IF file_exists but I want to touch a file and ensure that very instant when I touched the file was created and it didn't exist before. Hence if I can't do IF file_exists and then touch.

I want to execute a command (any command, please suggest) that will create the file and along with that return a result to a IF statement informing it about the file creation, else if the file existed then it must not be recreated.

I know this is a little convoluted explanation but it would really help if you can answer this, please ask any clarification questions as well.
Question by:infa007
LVL 40

Expert Comment

ID: 22737230

if [ -f file1.txt ]
      echo file exists
      touch file1.txt
      echo file created


Author Comment

ID: 22737353
Thanks, thats exactly what I don't want to do ... consider a php programming solution ...

function abc($x) {
if($x == 1)
 return 0;
 return 1;

// Here is what I want to do from Unix

if(abc(2)) {
// received 1
else {
// received 0

Instead of calling abc function I want to, call a command, e.g. touch, and require it to let me know if the touch of the file was successful (while not overwriting the file)
LVL 40

Expert Comment

ID: 22738530
touch does not over write any file. it can be used to change the creation / modification time.
Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

LVL 68

Expert Comment

ID: 22738561
But touch doesn't indicate (by returncode) whether the file already existed or not. I think, such a functionality is what infa007 is searching for.
I, personally, don't know any utility with that functionality.
LVL 40

Expert Comment

ID: 22739005
that's why there is an if then
LVL 14

Accepted Solution

sjm_ee earned 500 total points
ID: 22741921
The questioner states that "ensure that very instant when I touched the file was created and it didn't exist before". So what the questioner seems to be trying to do is to use the file as a semaphore, presumeably to create a critical section within the code so that it is only executed once at a time.

If this is correct, then you should understand that file creation and deletion are atomic operations under AIX, UNIX and many OSes, particularly those with journalled file systems. However the atomic file system equivalent of "test and set" is not available from any command that I am aware of. You can get this behaviour in C with "open(O_CREAT|O_EXCL)".


Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tech tip describes how to install the Solaris Operating System from a tape backup that was created using the Solaris flash archive utility. I have used this procedure on the Solaris 8 and 9 OS, and it shoudl also work well on the Solaris 10 rel…
My previous tech tip, Installing the Solaris OS From the Flash Archive On a Tape (, discussed installing the Solaris Operating S…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question