LINUX.ORG.RU

Управление выходом со скрипта и цикла, вывод сообщения.

 ,


0

1

Здравствуйте. Есть два скрипта.

script1.sh :

#!/bin/bash

while true
do

  echo -e "
  Available category:
  \t\t\t1. script2.sh"
  

  wrong_count=0

  while true
  do
    read -p "Enter number of needed category: " choosen_category
    case "$choosen_category" in
      "1" ) ./script2.sh
            wrong_count=0
      ;;
      * ) if [ $wrong_count = "2" ]
          then
            echo "ERROR! You entered wrong argument 3 times. Return to the previous menu"
            break
          else
            echo "Wrong argument. Try again." 
            wrong_count=$[ $wrong_count + 1 ]
          fi
      ;;
    esac

  done

done

И, второй, вызываемый в первом:

script2.sh :

#!/bin/bash

while true
do

  #Clear screen 
  echo -en "\ec"

 
  echo -e "
  Available function:
  \t\t\t1. Function1
  \t\t\t2. Exit\n\n"

  wrong_count=0

  while true
  do
    read -p "Enter number of needed function: " choosen_function
    case "$choosen_function" in
      "1" ) echo "Function1"
            wrong_count=0
      ;;
      "2" ) exit;;
      * ) if [ $wrong_count = "2" ]
          then
            echo "ERROR! You entered wrong argument 3 times. Return to the previous menu"
            break
          else
            echo "Wrong argument. Try again." 
            wrong_count=$[ $wrong_count + 1 ]
          fi
      ;;
    esac
  done
done

Есть несколько вопросов:
1)Когда в srcipt2.sh отрабатывает exit, я возвращаюсь в sript1.sh на этап «read -p „Enter number of needed.....“ , что вполне логично, из-за второго цикла while. Можно ли сделать так, что бы при выходе со script2.sh я попадал в начало скрипта script1.sh или же нужно только убирать лишний while? Меня „exit“ на „break 2“ и на „exit && break“. Увы, результата это не дало

2)Можно ли в script2.sh выводить сообщение „ERROR! You entered wrong argument 3 times. Return to the previous menu“ после очистки экрана без дополнительной переменной? Или же нужно только создавать дополнительную переменную, например $error_message и выводить ее после очистки, если она не пустая?


Такие вопросы на лоре лучше не задавать. Местные специалисты обычно отпнавляют либо в job либо в гугл. Иноязычные сообщества тебе в помощь, там ребята более друдественные друг к другу.

anonymous ()

Вообще-то, как вариант, ты можешь вызывать второй скрипт с помощью exec, тогда выполнение первого скрипта будет прервано, и второй скрипт его заменит. После выполнения второго скрипта, возврата в первый не произойдёт, и ты можешь из второго скрипта вызывать первый.

Black_Shadow ★★★★★ ()

Я не понял вопроса, но:
1. Если ты хочешь прервать текущую итерацию в каком-либо цикле используй continue.
2. Если хочешь остановить цикл используй break.
3. Если хочешь остановить исполнения скрипта полностью используй exit.

IPR ★★★★★ ()
Ответ на: комментарий от Black_Shadow

Вообще-то, как вариант, ты можешь вызывать второй скрипт с помощью exec, тогда выполнение первого скрипта будет прервано, и второй скрипт его заменит. После выполнения второго скрипта, возврата в первый не произойдёт, и ты можешь из второго скрипта вызывать первый.

Да, спасибо, так и сделал в первом скрипте. Такой же вызов добавил во втором, для первого скрипта.

Нет. Ты должен реализовать необходимую логику в первом скрипте после вызова второго скрипта.

Да, пробовал, в первом скрипте добавил break после вызова скрипта. Работало как мне надо.

balzi ()