我正在考虑创建一个 bash 脚本,其中可以指定多个选项,最后根据所选选项定义变量或在收到不同选项时执行某些命令。一个例子值一千多字:
[X] 仅复制 (1) - 用户键入的选项 [ ] 只移动 (2) [X] 校验和 (3) - 用户输入的选项 [ ] 重置权限 (4) [ ] 出口 (5) 选择选项:
我找到了一些选项,但我不知道如何让它们执行某个功能,因为我不明白代码是如何工作的。
更新:
代码功能:
#!/bin/bash #Sergiy Kolodyaznyy 的贡献代码和 MarianoM 的改编。 resize -s 40 90 > /dev/null #更改窗口大小。 option=$(dialog --clear --backtitle "同步..." --title "同步" \ --checklist "选择同步选项:" 20 50 10 \ 校验和“比较内容”关闭\ 详细“显示更多信息”关闭\ \ 上的“同步文件夹”目录 递归“包括子文件夹”关闭 2>&1 > /dev/tty) 对于我在 $option; do #Set 菜单选项的参数。 案例 $i 在 校验和) c="-c" ;; 详细) v="-v" ;; 目录) d="-d" ;; 递归) r="-r" ;; 经社理事会 完毕 如果 [ -z $option ]; 然后#检查变量是否为空。如果为空,则表示用户没有选择选项。 清除 回声 echo "错误:未选择任何选项或未安装对话框。程序无法继续。" 回声 别的 清除 source=$(dialog --clear --backtitle "请选择源..." --title "源:" --fselect "" 20 50 2>&1 > /dev/tty) 如果 [ -z $source ]; 然后 清除 回声 echo "错误程序。未选择源,重试!" 回声 出口 菲 清除 destination=$(dialog --clear --backtitle "请选择目的地..." --title "目的地:" --fselect "" 20 50 2>&1 > /dev/tty) 如果 [ -z $destination ]; 然后 清除 回声 echo "错误程序。未选择目的地,重试!" 回声 出口 菲 清除 rsync "$c" "$v" "$d" "$r" "$source" "$destination" 回声 菲 出口
从评论中的讨论可以看出,您主要关心的是创建具有多个选择的脚本,而不是专注于复制/移动文件本身,文件操作只是一个示例。这个功能可以通过
dialog
命令来实现,它允许创建文本用户界面,--checklist
特别是标志;但是,标准的纯 shell 工具箱中没有任何东西可以实现您想要的。因此,dialog
它是这项工作的合适工具。您将在下面找到一个示例脚本。虽然该脚本仅实现了讨论过的 3 个选项,但它提供了一个不错的起点,用户可以进一步扩展,并且还解决了评论中提到的互斥选项。特别是,在函数中解决了多项选择问题
menu()
,它作为dialog
with--checklist
选项的包装器为了简单起见,您真正需要的是:
这会将多个项目的选择保存到 variable
$output
。请注意,最后的 `2>&1 > /dev/tty) 对于将返回值保存到变量中至关重要。但请参阅下面的脚本以获取更实际的示例:进一步研究: