if 문에서 시스템 경로를 awk와 일치시킵니다.

if 문에서 시스템 경로를 awk와 일치시킵니다.

파일 시스템이 디렉토리 트리에 마운트되었는지 캡처하려고 합니다.

mount | awk '{ if ( $3 == /mnt/pxe ) print mounted }'

그러나 설치가 존재하더라도 문자열은 캡처되지 않습니다. 명령 mount출력은 다음과 같습니다.

/home/olegs/infra/isos/test/archlinux-2020.02.01-x86_64.iso on /mnt/pxe type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)

정규식 일치도 실패합니다.

mount | grep pxe | awk '{ if ( $3 ~ /mnt/pxe ) print $3 }' 

불일치

mount | grep pxe | awk '{ if ( $3 ~ .mnt.pxe ) print $3 }'
awk: cmd. line:1: { if ( $3 ~ .mnt.pxe ) print $3 }
awk: cmd. line:1:             ^ syntax error

mount | grep pxe | awk '{ if ( $3 ~ \/mnt\/pxe ) print $3 }'
awk: cmd. line:1: { if ( $3 ~ \/mnt\/pxe ) print $3 }
awk: cmd. line:1:             ^ backslash not last character on line
awk: cmd. line:1: { if ( $3 ~ \/mnt\/pxe ) print $3 }
awk: cmd. line:1:             ^ syntax error

/mnt/pxe이 필드의 경로 에만 일치하는 올바른 구문을 제안하십시오 $3.

답변1

거의 맞췄습니다. 문자열 비교를 위해 따옴표를 사용하세요.

mount | awk '{ if ( $3 == "/mnt/pxe" ) print "mounted" }'

"설치됨"도 따옴표로 묶여 있습니다.

그러나 정규식을 사용하려면 슬래시로 시작하고 끝나야 합니다.

mount | awk '{ if ( $3 ~ /.mnt.pxe/ ) print "mounted" }'
mount | awk '{ if ( $3 ~ /\/mnt\/pxe/ ) print "mounted" }'
mount | awk '{ if ( $3 ~ /^\/mnt\/pxe$/ ) print "mounted" }' #For exact match

관련 정보