쉘 스크립트의 변수에 "awk" 또는 "nawk" 할당

쉘 스크립트의 변수에 "awk" 또는 "nawk" 할당

Solaris 및 Red Hat 시스템에서 실행되는 스크립트가 있습니다. Solaris에서는 "nawk"를 사용하고 Red Hat 시스템에서는 "awk"를 텍스트 처리 도구로 사용하고 싶습니다. 이를 위해 스크립트에 다음 코드 조각이 있습니다.

...
if [ "$SYSTEM_OS" = "SunOS" ]; then
cibi_seperator="nawk"
elif [ "$SYSTEM_OS" = "Linux"  ]; then
cibi_seperator="awk"
fi
...

스크립트를 실행하면 다음 오류가 발생합니다.

    bash-3.00$ ./cibi_awk_both_os.sh 
./cibi_awk_both_os.sh: line 75: -F,: command not found
./cibi_awk_both_os.sh: line 77: -F: command not found
./cibi_awk_both_os.sh: line 77: -F=: command not found
./cibi_awk_both_os.sh: line 77: -v: command not found
./cibi_awk_both_os.sh: line 79: -F,: command not found
./cibi_awk_both_os.sh: line 85: -F,: command not found
./cibi_awk_both_os.sh: line 107: -F,: command not found
./cibi_awk_both_os.sh: line 108: -F,: command not found

스크립트 줄 75:

$cibi_seperator -F, 'NR==1,NR==2{print $0;}' cibi.csv > section_header.csv

문제가 있는 다른 모든 줄(77, 79, 85, 107, 108)도 $cibi_sperator 변수를 사용합니다. 내 스크립트에서 이 변수를 어떻게 올바르게 사용할 수 있나요? 고마워요, 무라트

답변1

문제를 발견했습니다. 매개변수를 설정했습니다.

SYSTEM_OS=`uname -a`

if 문 앞에. 하지만 다음과 같이 설정해야 합니다.

SYSTEM_OS=`uname -s`

불편을 끼쳐드려 죄송합니다.

답변2

case "$SYSTEM_OS" in
(SunOS)
    cibi_separator=nawk;;
(Linux)
    cibi_separator=awk;;
(*)
    echo "[$SYSTEM_OS] unsupported"; exit 1;;
esac

...

$cibi_separator -F, 'NR==1,NR==2{print $0;}' cibi.csv > section_header.csv

답변3

나는 사용할 것이다

cibi_seperator="awk" # general case, use plain awk

if [ "$SYSTEM_OS" = "SunOS" ]; then
cibi_seperator="nawk"
elif [ "$SYSTEM_OS" = "fooOS"  ]; then
cibi_seperator="/bin/special/awk"
elif ...
fi

이런 방식으로 cibi_seperator는 항상 설정되며 특별한 awk가 필요한 운영 체제(예: Solaris)에서만 테스트됩니다.

관련 정보