我正在编写一个脚本来备份我的CouchPotatoServer,但我遇到了问题。
以下是我遇到问题的代码:
select OPTION in Backup Restore Finish; do
echo "You choose $OPTION CouchPotatoServer settings";
case $OPTION in
Backup)
echo "Backing up settings file to $CPBPATH:";
cp $CPSPATH/settings.conf $CPBPATH/settings-"$(date +%Y%m%d-%H%M)".bak ;
echo "Done!"
break
;;
Restore)
echo "Please choose a backup to restore settings" ;
AVAILABLEFILES="($(find $CPBPATH -maxdepth 1 -print0 | xargs -0))"
select FILE in $AVAILABLEFILES; do
cp "$FILE" $CPSPATH/settings.conf ;
echo "restored $FILE"
break
;;
done
问题是,在用户选择一个选项并执行代码后,它会一直等待新的选择,但我希望它退出。我怎么能这样做?
答案 0 :(得分:1)
break
退出循环,但是你有嵌套循环并且卡在外部循环中。 break
实际上需要一个参数来指定要退出的封闭循环数,因此当您将break
替换为break 2
时,您还将退出外部select
循环
这是一个用于演示break
语句中不同select
级别的小脚本:
#!/bin/bash
PS3="Outer selection: "
select option1 in outer1 outer2 ; do
echo "option1 is $option1"
PS3="Inner selection: "
case "$option1" in
outer1)
select option2 in inner1 inner2; do
echo "option2 is $option2, issuing 'break'"
PS3="Outer selection: "
break
done
;;
outer2)
select option2 in inner3 inner4; do
echo "option2 is $option2, issuing 'break 2'"
break 2
done
;;
esac
done
PS3
是使用select
语句时显示的提示。只要外部选项为outer1
,您就会循环回到外部select
,因为只会发出一个break
;如果您选择outer2
,则会使用break 2
退出该计划。