awk는 if 및 else 케이스를 인쇄합니다.

awk는 if 및 else 케이스를 인쇄합니다.

다음 명령을 작성했습니다. lsblk -nl /dev/sdd -o MOUNTPOINT | awk '{if (NR!=1 && $1) { print 1; } else { print 0; }}' 특정 장치(이 경우)의 파티션이 /dev/sdd마운트되었는지 확인해야 합니다.

그러나 어떤 이유로 스크립트는 1과 0을 모두 인쇄합니까? 점은 무엇인가?

마운트 지점이 존재하면 true로 평가하고 그렇지 않으면 쉘스크립트에서 사용하려면 false로 평가하려면 이 명령이 필요합니다.

답변1

awk각 입력 라인에서 코드를 루프로 실행합니다. 비어 있지 않은 각 줄에 대해 a 1또는 a를 얻게 됩니다. 0당신은 할 수

장치에 마운트된 파티션이 있는지 확인하려면 다음 방법을 사용하는 것이 좋습니다.

device=/dev/mmcblk0
if [ -n "$(lsblk -nl -o MOUNTPOINT "$device")" ]
then
    echo "Partitions are mounted on $device"
else
    echo "Device $device is currently unused"
fi

정말로 이 접근 방식을 유지하고 싶다면 awk이것이 바로 당신이 찾고 있는 것일 수도 있습니다. (왜 첫 번째 줄을 무시하고 싶었는지 잘 모르겠습니다. 제 테스트에서는 장치 전체를 가리키는 것으로 보였고, 장치 자체에 파일 시스템이 포함되어 있는 경우도 있을 수 있어서 건너뛰기 테스트를 삭제했습니다.)

device=/dev/sdd
lsblk -nl "$device" -o MOUNTPOINT | awk 'NF { found=1 } END { print found+0 }'

관련 정보