케이스 값을 변수에 저장하는 방법

케이스 값을 변수에 저장하는 방법
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로 인쇄 할 수 있습니다 . 이 경우 다음을 교체하십시오.2free

  2 ) free ;;

그리고:

  2 ) free; selection=free ;;

변수를 selectionstring 으로 설정 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

관련 정보