whoami를 사용하여 사용자가 언급된 파일 검색

whoami를 사용하여 사용자가 언급된 파일 검색

나는 현재 쉘 스크립트를 개선하기 위해 몇 가지 연습을 하고 있습니다. 스크립트 요구 사항은 다음과 같습니다.

  1. whoami사용자 이름을 가져와서 이름이 지정된 변수에 저장하려면 명령을 사용해야 합니다 username.
  2. 검색할 파일 이름인 하나의 인수를 취해야 합니다.
  3. grep지정된 파일에서 사용자 이름이 나타나는지 검색하여 인쇄 해야 합니다 .

이 부분은 비교적 쉬웠으며 다음을 사용하여 작동시켰습니다.

username=$(whoami)
echo 'Enter the name of the file you would like to search: '
read fileName
cat "fileName" | grep "$username"

그러나 문제가 있는데, 연습에서는 다음과 같이 지적합니다.

노트:이 작업에서는 오류 검사 매개변수 누락에 대해 걱정할 필요가 없습니다. 스크립트는 shebang과 추가하기로 선택한 주석 외에 두 줄로 구성되어야 합니다.

어떻게 하면 이 줄을 두 줄로 줄일 수 있나요?

답변1

파일의 경로 이름을 제공합니다매개변수로. 이는 스크립트의 명령줄에 제공된다는 의미입니다. 즉, 사용자에게 대화형으로 질문하면 안 됩니다.

#!/bin/sh
grep -wF -e "$LOGNAME" "$1"

또는 정말로 사용하고 싶다면 whoami:

#!/bin/sh
grep -wF -e "$(whoami)" "$1"

또는 "두 줄" 요구 사항의 경우:

#!/bin/sh
name=$(whoami)  # or:  name=$LOGNAME
grep -wF -e "$name" "$1"

아니면 뭔가 하고 싶은 게 있으면효과가있다첫 번째 줄에서:

#!/bin/sh
[ ! -f "$1" ] && { printf 'No such file: %s\n' "$1" >&2; exit 1; }
grep -wF -e "$(whoami)" "$1"

-wgrep완전한 단어만 일치 시키는 옵션입니다. grep -w 'AA'일치 AA하지만 일치하지 않습니다 AAA.

-Fgrep유틸리티가 주어진 표현식을 고정 문자열로 처리하도록 하는 옵션아니요정규식으로.

-e옵션은 명령줄의 다음 문자열이 패턴임을 나타냅니다. 대시가 없으면 대시로 시작하는 패턴이 명령줄 옵션 집합으로 잘못 해석될 수 있습니다.

이 변수는 현재 사용자의 사용자 이름을 보유합니다 $LOGNAME(또는 많은 시스템에서).$USER

값은 $1명령줄에서 스크립트에 제공된 첫 번째 명령줄 인수입니다.

또한 이 스크립트는 특별한 쉘별 확장을 사용하지 않기 때문에 /bin/shwith 대신 with를 사용하여 이 명령을 실행할 수 있습니다. 아래에서는 분명 잘 돌아가 겠지만 ...bashbashbash


위 내용은 해당되지 않으니 참고하세요파일 검색특정 사용자를 언급하지만(질문 제목 등) 검색은 가능합니다.파일의 줄이 사용자가 언급되었습니다.

현재 사용자가 언급된 파일을 검색합니다.목차명령줄에서 제공:

#!/bin/sh
find "$1" -type f -exec grep -q -wF -e "$LOGNAME" {} ';' -print

마지막 부분과 관련:

답변2

가장 간단한 솔루션:

#!/bin/bash
username=$(whoami)
grep $username $1

grep에 선택적 인수로 파일 이름을 제공할 수 있습니다(참고자료 참조 man grep). 이 변수는 $1스크립트의 첫 번째 위치 인수를 나타냅니다.

다음과 같이 호출할 수 있습니다.

name-finder.sh filename

한 줄로 바꿀 수도 있습니다:

username=$(whoami); grep $username $1

또는

grep $(whoami) $1

관련 정보