저는 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
- 그런 다음
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
AND를 표시합니다.echo is NOT currently logged on
그런 다음 코드 1로 스크립트를 종료합니다.
사용자가 이미 로그인한 경우(종료 코드 0이 반환됨):who | grep $userid
- 그런 다음
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
AND를 표시합니다.echo is currently logged on
그런 다음 코드 0으로 스크립트를 종료합니다.
사용자가 유효한지 확인합니다.
사용자가 유효하지 않은 경우(종료 코드 1이 반환됨):grep $userid /etc/passwd
- 그럼 보여줘야지
echo "The user you entered, $userid is not a valid user on this system."
사용자가 유효한 경우(종료 코드 0이 반환됨):grep $userid /etc/passwd
이 스크립트를 어떻게 작성해야 하나요? 전체 구조는 무엇입니까? 구조/설정에 문제가 있습니다.
답변1
이것은 숙제처럼 보이기 때문에 도구와 몇 가지 팁만 알려 드리겠습니다.
스크립트에 인수가 제공되지 않으면
$1
(스크립트의 첫 번째 인수)는 비어 있게 됩니다. 를 사용하여 이를 테스트할 수 있습니다[[ -z $1 ]]
. 오류를 표시하고 싶다면너무 많은매개변수, 테스트 매개변수의 수[[ $# -eq 1 ]]
(단일 매개변수에 대해 정확함).이 명령을 사용하여 사용자 항목을
gentent passwd "$username"
가져올 수 있습니다 . 사용자가 존재하지 않으면 명령이 실패하고 0이 아닌 종료 상태를 반환합니다. 이는 존재하지 않는 사용자에 대한 반응을 사용할 수 있음을 의미합니다 .passwd
$username
if ! getent passwd "$username" >/dev/null; then ...; fi
$username
passwd
사용자 항목 필드 5대개사용자의 전체 이름을 포함합니다(실제로 "이름 성" 형식일 것이라는 보장은 없습니다). 항목 끝에 추가 쉼표가 있을 수 있으며 이를 제거해야 합니다.getent passwd "$username"
using의 출력을 구문 분석하여cut -d: -f 5
다섯 번째 필드를 가져온 다음 첫 번째 쉼표를 제거하는 데 사용할 수 있습니다name=${name%%,*}
.일부 시스템에서는 사용자의 전체 이름에 한
&
문자가 포함될 수 있습니다. 이러한 시스템에서는 이&
문자를 사용자 이름으로 바꿔야 합니다(System &
사용자 이름operator
은 가 됨System operator
). Linux가 일반적으로 이러한 작업을 수행하는지 잘 모르겠지만 작동합니다name=${name/&/$username}
.이
who
유틸리티는 현재 로그인된 사용자 목록을 출력합니다.$username
일치시키 려면 . 를 사용하여 단어 끝을grep -e "^$username\>"
일치시키므로 or 를 찾을 때 예를 들어 일치하지 않습니다 . 진술에 유용합니다 .\>
antony
anton
grep -q
if
코드 구조는 다음과 같습니다.
- 잘못된 인수를 확인하고 처리합니다(누락: 읽기, 너무 많음: 종료하거나 먼저 사용). 성명서
if
. - 잘못된 사용자 이름을 확인하고 처리하세요. 성명서
if
. - 사용자의 전체 이름을 가져옵니다. 명령 대체를 통한 변수 할당.
- 사용자가 로그인(및 출력)되었는지 확인합니다. 분기가
if
있을 수 있는 명령문 입니다else
.
이 스크립트에는 루프가 없으므로 if
명령문과 변수 할당이 많이 있을 것입니다.