Операторы If с операторами кода выхода

Операторы If с операторами кода выхода

Я новичок в Linux/Unix. Вот мое задание, оно слишком длинное, чтобы все здесь выкладывать:https://i.stack.imgur.com/v2AJR.jpg

Вот логика, которая у меня есть.:

Этот код проверит, ввел ли пользователь аргумент или нет. Я не знаю, что поместить под else. Мы никогда не говорили об операторе which, о котором я узнал от другого пользователя, поэтому его использование не ожидается. Просто базовые команды, это не супер-продвинутое задание.

if [ $# -ne 1 ]; then
        echo Please enter a single, valid user id: 
        read userid
else
        userid=$1
        **what goes here?**
fi

Для отображения полного имени пользователя (например, Бен Франклин) я написал и протестировал следующий код:

grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'

Определите, вошел ли пользователь в систему или нет:

Если пользователь не вошел в систему (возвращается код выхода 1):who | grep $userid

  1. Затем отобразите grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'Иecho is NOT currently logged on затем завершите скрипт с кодом 1.

Если пользователь вошел в систему (возвращается код выхода 0):who | grep $userid

  1. Затем отобразите grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'Иecho is currently logged on затем завершите скрипт с кодом 0.

Определение того, является ли пользователь действительным:

Если пользователь недействителен (возвращается код выхода 1):grep $userid /etc/passwd

  1. Затем должно отобразитьсяecho "The user you entered, $userid is not a valid user on this system."

Если пользователь действителен (возвращается код выхода 0):grep $userid /etc/passwd

Как мне написать этот сценарий? Какова полная структура? Я застрял на структуре/настройке.

решение1

Поскольку это выглядит как задание, я дам вам только инструменты и несколько подсказок:

  1. Если аргумент не был указан в скрипте, то $1(первый аргумент скрипта) будет пустым. Вы можете проверить это с помощью [[ -z $1 ]]. Если вы хотите отобразить ошибку дляОчень многоаргументы, проверьте количество аргументов с [[ $# -eq 1 ]](будет верно для одного аргумента).

  2. Команда gentent passwd "$username"может быть использована для получения passwdзаписи для пользователя $username. Команда завершится ошибкой с ненулевым статусом выхода, если пользователь не существует. Это означает, что вы можете использовать if ! getent passwd "$username" >/dev/null; then ...; fiдля реагирования на несуществующего пользователя $username.

  3. 5-е поле записи passwdдля пользователяобычносодержит полное имя пользователя (на самом деле нет гарантии, что оно будет в форме "имя фамилия"). Запись может иметь лишние запятые в конце, которые вам придется удалить. Вы можете проанализировать вывод using, getent passwd "$username"чтобы cut -d: -f 5добраться до пятого поля, а затем удалить с первой запятой с помощью name=${name%%,*}.

    В некоторых системах полное имя пользователя может содержать &символ. В этих системах этот &символ следует заменить на имя пользователя (чтобы имя System &пользователя operatorстало System operator). Я не уверен, что Linux вообще так делает, но это можно сделать с помощью name=${name/&/$username}.

  4. Утилита whoвыводит список пользователей, которые в данный момент вошли в систему. Для сопоставления $usernameс этим используйте grep -e "^$username\>". \>Соответствует концу слова, так что eg antonyне будет сопоставляться при поиске или anton. grep -qполезно в ifвыражении.

Это соответствует следующей структуре кода:

  1. Проверьте и обработайте недопустимые аргументы (отсутствуют: прочитайте; слишком много: выйдите или просто используйте первый). Один ifоператор.
  2. Проверка и обработка недействительного имени пользователя. Одно ifутверждение.
  3. Получить полное имя пользователя. Назначение переменных с подстановкой команд.
  4. Проверить, вошел ли пользователь в систему (и вывести). Один ifоператор, возможно с elseветвью.

Я не вижу цикла в этом скрипте, поэтому он будет состоять из ряда ifоператоров и присваиваний переменных.

Связанный контент