【发布时间】:2021-01-23 18:30:19
【问题描述】:
我正在尝试创建一个脚本,允许用户从已安装的卷中选择备份目标。
虽然我有一个初稿正在工作,但它有重复,我试图通过在嵌套的 for 循环中重建来删除它,但是到脚本结束时,我的变量变得未定义,我看不出我犯了什么错误制作。
为什么我的变量定义在第 19 行而不是第 27-29 行?
我是初学者,如果答案很明显,请道歉。
#!/bin/bash
VOLUMES=$(ls /volumes)
WORKING_DRIVE=
MASTER_DRIVE=
CLONE_DRIVE=
echo
for BACKUP_DESTINATION in 'Working Drive' 'Master Drive' 'Clone Drive'
do
for VOLUME_VARIABLE in "${WORKING_DRIVE}" "${MASTER_DRIVE}" "${CLONE_DRIVE}"
do
echo "Select your ${BACKUP_DESTINATION}"
echo
select VOLUME_VARIABLE in $VOLUMES
do
echo
echo "${BACKUP_DESTINATION}: $VOLUME_VARIABLE"
echo
break
done
break
done
done
echo "Working Drive is: ${WORKING_DRIVE}"
echo "Master Drive is: ${MASTER_DRIVE}"
echo "Clone Drive is: ${CLONE_DRIVE}"
【问题讨论】:
-
您希望
echo "${BACKUP_DESTINATION}: $VOLUME_VARIABLE"分配一个变量吗?echo用于写入屏幕,而不是设置变量。 -
在哪里为 $WORKING_DRIVE、$MASTER_DRIVE 和 $CLONE_DRIVE 赋值?
-
另外,你有一个
for VOLUME_VARIABLE in循环和一个for VOLUME_VARIABLE in循环,它们试图以相互冲突的方式设置VOLUME_VARIABLE。此外,这两个“循环”都有无条件的break命令,因此它们实际上不会循环。这个脚本的逻辑……没有意义。 -
@Gordan Davisson,我的想法是第二个 for 循环将为 select 命令提供未定义的变量,并且通过 select 命令用户可以定义变量?第 17 行的 echo 命令(我认为)显示该变量已定义。我插入了 break 命令,因为循环会为每个目的地持续不止一次。
标签: bash for-loop undefined-variable