
방금 쉘 프로그래밍을 시작했는데 다음 문제를 해결할 수 없습니다.
정의된 디렉터리(예: /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"
$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"
발견된 디렉터리 이름에 비정상적인 문자(예: 개행 문자)가 포함되어 있으면 이 스크립트가 실패할 수 있습니다.