Bash 스크립트 오류 [: !=: 단항 연산자가 필요합니다.
스크립트에서는 첫 번째 인수가 다음 인수와 동일한지 여부를 에러 체크하려고 합니다.-v
단, 이것은 옵션 인수입니다.if 문을 사용하지만 단항 연산자의 예상 오류가 계속 발생합니다.
코드는 다음과 같습니다.
if [ $1 != -v ]; then
echo "usage: $0 [-v]"
exit
fi
좀 더 구체적으로 말하면:
위 스크립트의 이 부분에서는 옵션의 인수를 체크하고 그 후에 인수를 입력하지 않으면 나머지 프로그램이 실행됩니다.
#!/bin/bash
if [ "$#" -gt "1" ]; then
echo "usage: $0 [-v]"
exit
fi
if [ "$1" != -v ]; then
echo "usage: $0 [-v]"
exit
fi
if [ "$1" = -v ]; then
echo "`ps -ef | grep -v '\['`"
else
echo "`ps -ef | grep '\[' | grep root`"
fi
인용!
if [ "$1" != -v ]; then
그렇지 않으면$1
완전히 비어 있습니다.테스트는 다음과 같습니다.
[ != -v ]
대신
[ "" != -v ]
...그리고.!=
는 단항 연산자(즉, 단일 인수만 사용할 수 있는 연산자)가 아닙니다.
아니면 과잉 살상이 만연해 보이지만 실제로는 단순해서...거의 모든 사건을 망라하고 빈줄이나 일률적인 우려는 없습니다
첫 번째 arg가 '-v'인 경우 조건부로 수행합니다.ps -ef
그 이외의 경우는 모두 사용법을 폐기합니다.
#!/bin/sh
case $1 in
'-v') if [ "$1" = -v ]; then
echo "`ps -ef | grep -v '\['`"
else
echo "`ps -ef | grep '\[' | grep root`"
fi;;
*) echo "usage: $0 [-v]"
exit 1;; #It is good practice to throw a code, hence allowing $? check
esac
'-v' arg가 어디에 있는지 신경 쓰지 않을 경우 루프 내에서 케이스를 드롭하기만 하면 됩니다.에서는 모든 arg를 걷고 (존재하는 경우) '-v'를 찾을 수 있습니다.즉, 명령줄 인수 순서는 중요하지 않습니다.앞서 설명한 바와 같이 arg_match 변수가 설정되어 있으므로 이는 단순한 플래그일 뿐입니다.그러면 '-v' arg가 여러 번 발생할 수 있습니다.다른 모든 '-v'는 쉽게 무시할 수 있습니다.
#!/bin/sh
usage ()
{
echo "usage: $0 [-v]"
exit 1
}
unset arg_match
for arg in $*
do
case $arg in
'-v') if [ "$arg" = -v ]; then
echo "`ps -ef | grep -v '\['`"
else
echo "`ps -ef | grep '\[' | grep root`"
fi
arg_match=1;; # this is set, but could increment.
*) ;;
esac
done
if [ ! $arg_match ]
then
usage
fi
단, 다음과 같은 상황에서는 인수를 여러 번 발생시키는 것이 편리합니다.
$ adduser -u:sam -s -f -u:bob -trace -verbose
인수의 순서에 관계없이 여러 개의 -u 인수도 사용할 수 있습니다.네, 다음 사항도 허용해야 합니다.
$ adduser -u sam -s -f -u bob -trace -verbose
언급URL : https://stackoverflow.com/questions/22179405/bash-script-error-unary-operator-expected
'source' 카테고리의 다른 글
Excel VBA 함수 결과 새로 고침 (0) | 2023.04.12 |
---|---|
SQL Server 문자열과 Null 연결 (0) | 2023.04.12 |
열거형을 목록으로 변환 (0) | 2023.04.12 |
WPF-MVVM: ViewModel에서 UI 제어 포커스 설정 (0) | 2023.04.12 |
Mac과 Windows 모두에서 Excel로 CSV 파일을 올바르게 여는 인코딩은 무엇입니까? (0) | 2023.04.12 |