1

I want to check if the given file exists However, I do not know how to properly write the condition to point to other files

#!/bin/bash

if [ $# -ge 2 ]
then
    for i in `seq 1 $#`
    do
        if [ -e ${$i} ]
        then
            echo "yes"
        else
            echo "not exist"
        fi

    done


else
    echo ""
fi
0

2 Answers 2

1

Your condition should be:

if [ -e "$i" ]

not:

if [ -e ${$i} ]

I'm not clear about what you are asking. Are you passing filenames as arguments to the script? If so, you need to loop over the arguments like this:

for file in "$@"
do
    if [ -e "$file" ]
    then
        echo "$file exists"
    else
        echo "$file does not exist"
    fi    
done
Sign up to request clarification or add additional context in comments.

2 Comments

Are your files called 1, 2, etc? Do they exist in the directory that you are running the script from?
no, I just want to see if there is a file that is an argument to
0

From man bash, section CONDITIONAL EXPRESSIONS:

Conditional  expressions  are used by the [[ compound
command and the test and [ builtin commands to test
file attributes and perform string and arithmetic
comparisons. [...]

   -a file
          True if file exists.
   -b file
          True if file exists and is a block special file.
   -c file
          True if file exists and is a character special file.
   -d file
          True if file exists and is a directory.
   -e file
          True if file exists.
   -f file
          True if file exists and is a regular file.
   -g file
          True if file exists and is set-group-id.
   -h file
          True if file exists and is a symbolic link.
   -k file
          True if file exists and its ``sticky'' bit is set.
   -p file
          True if file exists and is a named pipe (FIFO).
   -r file
          True if file exists and is readable.
   -s file
          True if file exists and has a size greater than zero.
   -t fd
          True if file descriptor fd is open and refers to a terminal.
   -u file
          True if file exists and its set-user-id bit is set.
   -w file
          True if file exists and is writable.
   -x file
          True if file exists and is executable.
   -G file
          True if file exists and is owned by the effective group id.
   -L file
          True if file exists and is a symbolic link.
   -N file
          True if file exists and has been modified since it was last read.
   -O file
          True if file exists and is owned by the effective user id.
   -S file
          True if file exists and is a socket.

Also, what dogbane said.

2 Comments

I know how to check availability, but do not know how to iterate the arguments in the loop
@user2984674: You might want to consider re-phrasing your question, then. Both answers you got obviously got it wrong; a good indicator that your question is lacking.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.