쉘 스크립트를 사용하여 파일 내용에 액세스

쉘 스크립트를 사용하여 파일 내용에 액세스

파일에서 사용자와 비밀번호를 가져와 스크립트에서 사용해야 합니다.

내 파일은 다음과 같습니다(netrc는 내 파일 이름입니다).

machine ftp.test.net login test_user password test_pass
machine ftp1.test.net login test_user1 password test_pass1

파일에 액세스하고 특정 컴퓨터의 사용자 이름과 비밀번호를 가져오는 함수를 작성하고 싶습니다.

답변1

get_netrc_user () {
    awk -v machine="$1" '$2 == machine { print $4 }' netrc
}

get_netrc_user () {
    awk -v machine="$1" '$2 == machine { print $6 }' netrc
}

첫 번째 함수는 특정 컴퓨터에 대해 사용자 이름/로그인을 가져오고 두 번째 함수는 비밀번호를 가져옵니다.

지침:

username=$( get_netrc_user 'ftp.test.net' )
password=$( get_netrc_pass 'ftp.test.net' )

그러나 get_netrc_pass비밀번호에 공백이 포함되어 있지 않다고 가정합니다. 그렇다면 조금 더 안전하도록 변경할 수 있습니다.

get_netrc_user () {
    awk -v machine="$1" '$2 == machine { sub(".*password ", "", $0); print }' netrc
}

이제 파일에서 6번째 공백으로 구분된 필드를 반환하는 대신 문자열 앞의 모든 항목 password(끝에 공백 포함)을 제거하고 줄의 나머지 부분을 반환합니다. 비밀번호에 분명히 해당 문자열이 포함되어 있으면 여전히 실패합니다.

답변2

나는 이렇게 할 것이다:

login=$(grep $mymachin "$myfile" | cut -d' ' -f3)
password=$(grep $mymachin "$myfile" | cut -d' ' -f5)

아니면 더 나은

# reading the file only once
login_password=$(grep $mymachin "$myfile" | cut -d' ' -f3,5)
login=$(cut -d' ' -f1 <<<$login_password)
password=$(cut -d' ' -f2 <<<$login_password)

이제 예제를 올바르게 읽었으므로 대안은 위치 대신 키워드를 사용하는 것입니다.

line=$(grep $mymachin "$myfile")
login=$(sed 's/.*login \(.*\) .*/\1/' <<<$line)
password=$(sed 's/.*password \(.*\) .*/\1/' <<<$line)

답변3

cat을 사용하여 파일을 출력하고, grep을 사용하여 시스템을 선택하고, awk를 사용하여 필드(귀하의 경우 비밀번호 등)를 필터링합니다.

그래서 이런 것

login=$(cat $myfile | grep $mymachine | awk '{print $4}')

답변4

다음 명령을 사용하여 사용자 이름과 비밀번호 가져오기를 완료하세요.

username=`awk '/Machinename/{print $4}' filename`
pass=`awk '/Machinename/{print $6}' filename`

관련 정보