종료 코드 문이 있는 If 문

종료 코드 문이 있는 If 문

저는 Linux/Unix 초보자입니다. 이것은 내 과제입니다. 여기에 모든 내용을 게시하기에는 너무 깁니다.https://i.stack.imgur.com/v2AJR.jpg

이게 내 논리야:

이 코드는 사용자가 매개변수를 입력했는지 확인합니다. 다른 것 아래에 무엇을 넣어야할지 모르겠습니다. 우리는 다른 사용자로부터 어떤 진술을 배웠는지 논의한 적이 없으므로 그 사용은 예상되지 않습니다. 단지 기본적인 명령일 뿐이며, 이것은 매우 고급 작업이 아닙니다.

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

사용자의 전체 이름(예: Ben Franklin)을 표시하기 위해 다음 코드를 작성하고 테스트했습니다.

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/'AND를 표시합니다.echo is NOT currently logged on 그런 다음 코드 1로 스크립트를 종료합니다.

사용자가 이미 로그인한 경우(종료 코드 0이 반환됨):who | grep $userid

  1. 그런 다음 grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'AND를 표시합니다.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"가져올 수 있습니다 . 사용자가 존재하지 않으면 명령이 실패하고 0이 아닌 종료 상태를 반환합니다. 이는 존재하지 않는 사용자에 대한 반응을 사용할 수 있음을 의미합니다 .passwd$usernameif ! getent passwd "$username" >/dev/null; then ...; fi$username

  3. passwd사용자 항목 필드 5대개사용자의 전체 이름을 포함합니다(실제로 "이름 성" 형식일 것이라는 보장은 없습니다). 항목 끝에 추가 쉼표가 있을 수 있으며 이를 제거해야 합니다. getent passwd "$username"using의 출력을 구문 분석하여 cut -d: -f 5다섯 번째 필드를 가져온 다음 첫 번째 쉼표를 제거하는 데 사용할 수 있습니다 name=${name%%,*}.

    일부 시스템에서는 사용자의 전체 이름에 한 &문자가 포함될 수 있습니다. 이러한 시스템에서는 이 &문자를 사용자 이름으로 바꿔야 합니다( System &사용자 이름 operator은 가 됨 System operator). Linux가 일반적으로 이러한 작업을 수행하는지 잘 모르겠지만 작동합니다 name=${name/&/$username}.

  4. who유틸리티는 현재 로그인된 사용자 목록을 출력합니다. $username일치시키 려면 . 를 사용하여 단어 끝을 grep -e "^$username\>"일치시키므로 or 를 찾을 때 예를 들어 일치하지 않습니다 . 진술에 유용합니다 .\>antonyantongrep -qif

코드 구조는 다음과 같습니다.

  1. 잘못된 인수를 확인하고 처리합니다(누락: 읽기, 너무 많음: 종료하거나 먼저 사용). 성명서 if.
  2. 잘못된 사용자 이름을 확인하고 처리하세요. 성명서 if.
  3. 사용자의 전체 이름을 가져옵니다. 명령 대체를 통한 변수 할당.
  4. 사용자가 로그인(및 출력)되었는지 확인합니다. 분기가 if있을 수 있는 명령문 입니다 else.

이 스크립트에는 루프가 없으므로 if명령문과 변수 할당이 많이 있을 것입니다.

관련 정보