bash for循环检查目录是否存在
下面的程序只是为了好玩,我正在尝试使用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
/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++))