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)에서만 테스트됩니다.