![whoami를 사용하여 사용자가 언급된 파일 검색](https://linux55.com/image/140279/whoami%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20%EC%96%B8%EA%B8%89%EB%90%9C%20%ED%8C%8C%EC%9D%BC%20%EA%B2%80%EC%83%89.png)
나는 현재 쉘 스크립트를 개선하기 위해 몇 가지 연습을 하고 있습니다. 스크립트 요구 사항은 다음과 같습니다.
whoami
사용자 이름을 가져와서 이름이 지정된 변수에 저장하려면 명령을 사용해야 합니다username
.- 검색할 파일 이름인 하나의 인수를 취해야 합니다.
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"
-w
grep
완전한 단어만 일치 시키는 옵션입니다. grep -w 'AA'
일치 AA
하지만 일치하지 않습니다 AAA
.
-F
grep
유틸리티가 주어진 표현식을 고정 문자열로 처리하도록 하는 옵션아니요정규식으로.
이 -e
옵션은 명령줄의 다음 문자열이 패턴임을 나타냅니다. 대시가 없으면 대시로 시작하는 패턴이 명령줄 옵션 집합으로 잘못 해석될 수 있습니다.
이 변수는 현재 사용자의 사용자 이름을 보유합니다 $LOGNAME
(또는 많은 시스템에서).$USER
값은 $1
명령줄에서 스크립트에 제공된 첫 번째 명령줄 인수입니다.
또한 이 스크립트는 특별한 쉘별 확장을 사용하지 않기 때문에 /bin/sh
with 대신 with를 사용하여 이 명령을 실행할 수 있습니다. 아래에서는 분명 잘 돌아가 겠지만 ...bash
bash
bash
위 내용은 해당되지 않으니 참고하세요파일 검색특정 사용자를 언급하지만(질문 제목 등) 검색은 가능합니다.파일의 줄이 사용자가 언급되었습니다.
현재 사용자가 언급된 파일을 검색합니다.목차명령줄에서 제공:
#!/bin/sh
find "$1" -type f -exec grep -q -wF -e "$LOGNAME" {} ';' -print
마지막 부분과 관련:
- "find"의 -exec 옵션 이해
man grep
귀하의 시스템에서.
답변2
가장 간단한 솔루션:
#!/bin/bash
username=$(whoami)
grep $username $1
grep에 선택적 인수로 파일 이름을 제공할 수 있습니다(참고자료 참조 man grep
). 이 변수는 $1
스크립트의 첫 번째 위치 인수를 나타냅니다.
다음과 같이 호출할 수 있습니다.
name-finder.sh filename
한 줄로 바꿀 수도 있습니다:
username=$(whoami); grep $username $1
또는
grep $(whoami) $1