简体   繁体   中英

Bash Script - check arguments - files in for

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

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM