我刚刚开始 shell 编程,但无法解决以下问题。
我希望定义的目录(例如/var)中的所有目录都显示在对话框清单中。我还希望在选定的文件夹中存储先前定义的变量(在每个文件夹中都相同)。
有人有解决问题的办法吗?
编辑//
解决方案
#!/bin/bash
DIR="/var"
function cho () {
options=$(ls "$DIR" | awk '{print $1, FNR, "off"}')
cmd=(dialog --title Menu --stdout \
--separate-output \
--checklist "Select options:" 22 76 16)
choices=$("${cmd[@]}" ${options})
check
}
function check () {
if [ $? -eq 0 ]; then
if [ -z "$choices" ]; then
dialog --title Menu --msgbox "No option selected!" 5 28
dialog --clear
cho
else
for choice in $choices
do
echo "$choice"
done
fi
else
clear && echo ""Cancel...
fi
}
cho
答案1
#!/bin/sh
dir='/'
select name in $( find "$dir" -type d ! -name "$dir" -maxdepth 1 ); do
if [ -z "$name" ]; then
echo 'error' >&2
else
break
fi
done
printf 'User picked "%s"\n' "$name"
这是一个简单的 shell 脚本,列出了下面的目录$dir
并向用户提供一个菜单以从中选择一个。
所选条目将存储在 中$name
。
测试它:
$ sh script.sh
1) /altroot 7) /root
2) /bin 8) /sbin
3) /dev 9) /tmp
4) /etc 10) /usr
5) /home 11) /var
6) /mnt 12) /tmp_mnt
#? q
error
#? 0
error
#? 9
User picked "/tmp"
如果任何找到的目录名称包含异常字符(例如换行符),此脚本可能会失败。