如何解决bash:嵌套选择菜单,仅第一个选择有效,第二个选择无效
我的脚本中有两个功能,两个都是嵌套在其中的“选择”菜单。 他们两个都起作用,但只能是第一个选择,而不是第二个选择。 我显然对他们俩都做错了。 现在,我将仅提供我的一个功能,因为我猜我在两个功能上都犯了相同的错误。
问题: 第一个菜单的第一部分(“ Stream”)的所有部分都可以正常工作,而第二部分(“ Download”)却不能。
为什么不起作用?我在做什么错?
#!/bin/env bash
MAIN(){
echo "Stream Or Download?"
select S_D in 'Stream' 'Download'; do
case $S_D in
Stream)
echo "Audio Or Video?"
select A_V in 'Audio' 'Video'; do
case $A_V in
Audio)
if [[ "$DOMAIN" =~ 'youtube' ]]; then
mpv --no-video "$URL"
else
streamlink --player='mpv --no-video' "$URL" 720p|& tee /dev/null
fi
break 2 ;;
Video)
if [[ "$DOMAIN" =~ 'youtube' ]]; then
am start -a android.intent.action.VIEW -d "$(youtube-dl -f best -g "$URL")" -n is.xyz.mpv/.MPVActivity &> /dev/null
else
am start -a android.intent.action.VIEW -d "$(streamlink "$URL")" -n is.xyz.mpv/.MPVActivity &> /dev/null
fi
break 2 ;;
Download)
echo "Song? Album? Playlist?"
select S_A_P in 'Song' 'Album' 'Playlist'; do
case $S_A_P in
Song)
echo "Enter Artist:"
read ARTIST
echo "Enter Song:"
read SONG
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$ARTIST - $SONG.%(ext)s" "$URL"
mid3v2 -v -a "$ARTIST" -S "$SONG" "$MUSIC_DIR/$ARTIST - $SONG.m4a"
break 2 ;;
Album)
echo "Enter Artist:"
read ARTIST
echo "Enter Album:"
read ALBUM
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$ARTIST - $ALBUM.%(ext)s" "$URL"
mid3v2 -v -a "$ARTIST" -A "$ALBUM" "$MUSIC_DIR/$ARTIST - $ALBUM.m4a"
break 2 ;;
Playlist)
echo "Enter Artist/DJ Or Leave It Empty:"
read ARTIST
echo "Enter A Title:"
read TITLE
if [[ -z "$ARTIST" ]]; then
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$TITLE.%(ext)s" "$URL"
mid3v2 -v -A "$TITLE" "$MUSIC_DIR/$TITLE.m4a"
else
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$ARTIST - $TITLE.%(ext)s" "$URL"
mid3v2 -v -a "$ARTIST" -A "$TITLE" "$MUSIC_DIR/$ARTIST - $TITLE.m4a"
fi
break ;;
esac
done
break ;;
esac
done
break ;;
esac
done
}
解决方法
假设case $A_V
块只有2个选项(Audio
,Video
),则匹配的esac
语句放置在错误的位置(混乱的缩进无济于事) :
case $S_D in
Stream)
...
case $A_V in
Audio)
...
Video)
...
# `esac` for `case $A_V` should reside on this line
Download)
...
case $S_A_P in
Song)
...
Album)
...
Playlist)
...
esac # first esac closes `case $S_A_P`
...
esac # second esac closes `case $A_V` **THIS IS THE PROBLEM! THIS NEEDS TO BE MOVED JUST BEFORE THE ** `Download` **LINE.**
...
esac # last esac closes `case $S_D`
注意::OP还需要将关联的done/break
语句与esac
语句一起移动
原因:每个单独的select
菜单都必须以esac
/ done
结尾,否则将不会继续进行下一个选择。 OP没有正确关闭case $A_V
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。