Case 문만 다시 실행하려면 이 스크립트에 while 루프를 추가하려면 어떻게 해야 합니까?

Case 문만 다시 실행하려면 이 스크립트에 while 루프를 추가하려면 어떻게 해야 합니까?

이것은 제가 Linux 강좌를 위해 작성하고 있는 스크립트입니다. Case 문 =을 다시 실행하기 위해 while 루프를 추가하고 싶습니다. 어떤 도움이라도 대단히 감사하겠습니다. 이건 내 스크립트야

#!/bin/bash
DATE=$(date -d "$1" +"%m_%d_%Y");

clear

echo -n  " Have you finished everything?"
read response
if [ $response = "Y" ] || [ $response = "y" ]; then 

echo "Do you want a cookie?"

exit 

elif [ $response = "N" ] || [ $response = "n" ]; then 

echo "1 - Update Linux debs"

echo "2 - Upgrade Linux"

echo "3 - Backup your Home directory"

read answer 

case $answer in 

1) echo "Updating!"

    sudo apt-get update;;

2) echo "Upgrading!"

    sudo apt-get upgrade;;

3) echo "Backing up!"

    tar -cvf backup_on_$DATE.tar /home;;

esac

echo "Would you like to choose another option?"

read condition
fi

답변1

while true; do
  #your code
  #break to break the infinite loop
  break
done

답변2

나는 당신이 수업을 위해 이 일을 하고 있다는 것을 알고 있으며, 최근에는 순수한 대답을 제공하는 것뿐만 아니라 사용자가 스스로 정답을 찾을 수 있도록 안내하는 것에 대해 이야기하고 있다는 것을 알고 있습니다. 이는 일반적으로 질문 형태의 의견(소크라테스식 방법이라고도 함)을 통해 수행됩니다. 나는 이 접근 방식이 너무 원형적이라고 생각합니다. 대답은 그저 대답이어야 하고,가득한대답은 질문을 처음 접하는 사용자를 혼란스럽게 할 만큼 모호하지 않습니다.

귀하가 귀하의 진술을 구체적으로 재사용할 수 있는 방법을 찾고 있다면 case이것은 귀하를 위한 답변이 아닙니다. 그러나 if/else순수한 논리와 몇 가지 트릭을 사용하여 다른 방식으로 이 문제에 접근하려는 경우 functions다음을 권장합니다.

#!/bin/bash
# try to refrain from setting variables in all-caps,
# which could possibly override default shell environment variables
# not exactly sure why you're passing an argument to date here,
# but that's beside the point. For my own purposes, I will comment it out
# and just make the variable of today's date
# DATE="$(date -d "$1" +"%m_%d_%Y")"
date="$(date +%m_%d_%Y)"
clear

# read -p prompts for user input and then sets the response as a variable
read -p "Have you finished everything? [y/n] " response

# with single brackets, you can use the -o flag to represent "or"
# without having to include additional conditional brackets
if [ "$response" = "Y" -o "$response" = "y" ]; then
  echo "Do you want a cookie?"
  exit
elif [ "$response" = "N" -o "$response" = "n" ]; then
  echo "1 - Updadate Linux Debs"
  echo "2 - Upgrade Linux"
  echo "3 - Backup your Home directory"
else
  echo error.
  exit
fi

do_stuff() {
  read -p "Choose an option: [1-3] " answer
  if [[ $answer = 1 ]]; then
    echo "Updating!"
    sudo apt-get update
  elif [[ $answer = 2 ]]; then
    echo "Upgrading!"
    sudo apt-get upgrade
  elif [[ $answer = 3 ]]; then
    echo "Backing up!"
    tar -cvf "backup_on_${date}.tar" /home
  else
    echo error.
    exit
  fi
  do_again
}

do_again() {
  read -p "Would you like to choose another option? [y/n] " condition
  if [ "$condition" = "y" -o "$condition" = "Y" ]; then
    do_stuff
  else
    echo goodbye.
    exit
  fi
}

do_stuff

관련 정보