私はシェルプログラミングを始めましたが、次の問題を解決できませんでした。
定義されたディレクトリ(たとえば/ 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
これは、次のディレクトリを一覧表示し、ユーザーにディレクトリの1つを選択できるメニューを提供する簡単なシェルスクリプトです。
選択した項目はに保存されます$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"
見つかったディレクトリ名に異常な文字(改行文字など)が含まれていると、このスクリプトは失敗する可能性があります。