bash for循环检查目录是否存在

bash for循环检查目录是否存在,bash,validation,for-loop,scripting,Bash,Validation,For Loop,Scripting,下面的程序只是为了好玩,我正在尝试使用bash脚本。我不打算使用脚本进行备份 我试图创建一个for循环来检查数组中的用户输入(将要备份的目录)是否有效。如果输入有效,则应使用它。如果不是,则应使用默认值/home/$USER覆盖它 echo "Please enter absolute path of directory for backup. Default is "/home/$USER echo "You can choose multiple directories. Press CTR

下面的程序只是为了好玩,我正在尝试使用bash脚本。我不打算使用脚本进行备份

我试图创建一个for循环来检查数组中的用户输入(将要备份的目录)是否有效。如果输入有效,则应使用它。如果不是,则应使用默认值
/home/$USER
覆盖它

echo "Please enter absolute path of directory for backup. Default is "/home/$USER
echo "You can choose multiple directories. Press CTRL-D to start backup."
read USER_DIR

# save user input into array
while read line
do
    USER_DIR=("${USER_DIR[@]}" $line)
done

# check if user input in array is valid (directory exists)
for i in ${USER_DIR[@]}
do
    if [[ -d "${USER_DIR[$i]}" ]]; then
        # directory exists
        ${USER_DIR[$i]}=${USER_DIR[$i]}
    else
        # directory does not exist
        ${USER_DIR[$i]}="/home/$USER"
    fi
done

# show content of array (check if for loop works)
echo "Backups of the following directories will be done:"
for i in ${USER_DIR[@]}; do echo $i; done
这是我得到的输出(
/home/michael/Downloads
是一个目录,
notadirectory
不是)


谢谢您的时间。

在您的代码中
${USER\u DIR[$i]}=${USER\u DIR[$i]}
失败。
当您要分配某些内容时,应删除第一个
$

您的错误在前面。
您想测试目录
“${USER\u DIR[0]}”
,但您正在测试
“${USER\u DIR[$i]}”
,这是

${USER_DIR["/home/michael/Downloads"]}
试一试


用于((i=0;我创建了一个shebang,然后将脚本粘贴到那里:谢谢你的链接,这真的很有帮助。谢谢,我对如何访问数组的位置感到困惑。但目前,该脚本不起作用。只有在单个目录中键入时才起作用。按ENTER和t后添加特殊隐藏字符是否会有问题键入下一个目录?在许多地方添加'echo'${USER_DIR[@]}`并查看发生奇怪情况的地方。我添加了
echo'${USER_DIR[@]}”
并键入两个有效目录。脚本似乎连接了输入。我键入了两次
/home/michael/Downloads
,它显示为
/home/michael/Downloads/home/michael/Downloads
,中间似乎只有一个空格。我认为您的答案帮助解决了问题的一个重要部分。fi第一个问题是,我似乎没有得到正确的输入,因为换行符似乎不是我需要的分隔符。但它无论如何都不会起作用,因为我的循环不正确。因此,您帮助解决了50%的问题,我将检查您的答案作为解决方案。对于其他部分,我将创建一个新问题,因为它是一个不同的问题租金问题。感谢您的帮助。
echo“${USER\u DIR[@]}”
显示所有条目,
echo“${USER\u DIR[0]}”
显示第一个条目。
for i in ${#USER_DIR[@]}
for ((i=0; i<${#USER_DIR[@]}; i++))