selection=
until [ "$selection" = "0" ]; do
echo ""
echo "PROGRAM MENU"
echo "1 - display free disk space"
echo "2 - display free memory"
echo ""
echo "0 - exit program"
echo ""
echo -n "Enter selection: "
read selection
echo ""
case $selection in
1 ) df ;;
2 ) free ;;
0 ) exit ;;
* ) echo "Please enter 1, 2, or 0"
esac
echo $selection
done
2를 누르면 사용 가능한 공간이 표시되고 에코는 2를 표시하지만 "유휴" 상태로 유지하려면 에코가 필요합니다.
답변1
당신은 할 수 없습니다. Case 문은 선택을 사용하여 수행할 작업을 결정합니다. Case 문으로 설정되지 않습니다.
다음과 같이 시도해 볼 수도 있습니다.
selection=
until [ "$selection" = "0" ]; do
cmd=''
echo ""
echo "PROGRAM MENU"
echo "1 - display free disk space"
echo "2 - display free memory"
echo ""
echo "0 - exit program"
echo ""
echo -n "Enter selection: "
read selection
echo ""
case "$selection" in
1) cmd='df' ;;
2) cmd='free' ;;
0) cmd='exit' ;;
*) echo "Please enter 1, 2, or 0"
esac
if [ -n "$cmd" ] ; then
echo "selection $selection is '$cmd'"
$cmd
fi
done
echo "selection $selection is '$cmd'
실행 전에 실행 되고 , 그렇지 않으면 0 이 되기 전에 종료 $cmd
됩니다 .echo
$selection
답변2
난 이걸 할거야. 도움이 될 수도 있고 유익할 수도 있습니다.
#!/bin/bash
menu() {
cat >&2 <<EOF
PROGRAM MENU
1 - display free disk space
2 - display free memory
0 - exit program
EOF
}
while true; do
menu
read -p "Enter selection: " selection
case "$selection" in
1)
echo df
df
;;
2)
echo free
free
;;
0)
echo exit
exit
;;
*)
echo "Please enter 1, 2 or 0" >&2
;;
esac
done
답변3
2를 누르면 사용 가능한 공간이 표시되고 에코는 2를 표시하지만 "유휴" 상태로 유지하려면 에코가 필요합니다.
따라서 원하는 경우 현재 무료 echo $selection
로 인쇄 할 수 있습니다 . 이 경우 다음을 교체하십시오.2
free
2 ) free ;;
그리고:
2 ) free; selection=free ;;
변수를 selection
string 으로 설정 free
하면 echo
명령이 원하는 내용을 인쇄합니다.
선택하다
그러나 대안으로아니요정확한 대체 방법으로 bash 명령을 select
사용하면 더 짧은 코드로 유사한 작업을 수행할 수 있습니다.
PS3="Please enter 1, 2, or 3: "
select selection in "display free disk space" "display free memory" "exit program"
do
case "$selection" in
"display free disk space") df ;;
"display free memory") free; selection=free ;;
"exit program") exit ;;
esac
echo $selection
done