Bash脚本 - 检查参数 - for的文件

时间:2021-08-21 11:27:15

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

2 个解决方案

#1


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

#2


0  

From man bash, section CONDITIONAL EXPRESSIONS:

从man bash,节有条件的表达:

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.

还有,狗狗说的话。

#1


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

#2


0  

From man bash, section CONDITIONAL EXPRESSIONS:

从man bash,节有条件的表达:

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.

还有,狗狗说的话。