Как мне сделать этот Bash аргумент из оператора if в оператор case? - PullRequest
0 голосов
/ 10 февраля 2020

Я использую текстовый файл с именем tps_report2 и хочу распечатать инструкцию «Пожалуйста, завершите присвоение $ assignment_name», где переменная $ assignment_name будет именем назначения, однако, если пользователь оставит параметр пустым, тогда в качестве аргумента по умолчанию в переменной будет указано слово "follow".

Вот правильное выражение if else:

   if [ $# -lt 1 ]
   then
         assignment_name="following"
   else
         assignment_name=$1
   fi

Теперь вот что я пытался до сих пор превратить его в регистр.

   while [$# -lt 1]
   do
        case assignment_name
        in
        *) assignment_name="following"
        esac
   done

1 Ответ

1 голос
/ 10 февраля 2020

Вы могли бы:

assignment_name="following"
if [ $# -eq 1 ]
then
    assignment_name=$1
fi

Вы можете изменить -eq 1 на -gt 0, в зависимости от того, что вы ожидаете в аргументах.


Как показано, я хотел бы не используйте case здесь. case полезно, когда переменная может иметь ряд хорошо определенных значений, с которыми вы можете тестировать. Использование case позволяет избежать длинного списка операторов if. Это более компактный способ заменить if, then, if, then, if, ....

Но если вы настаиваете

case $# in
    0)
        assignment_name="following"
    ;;
    1)
        assignment_name="$1"
    ;;
    *)
        echo "ERROR: arguments can be empty, or the name of 1 assignment."
        exit 1
    ;;
esac
...