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 ]
... !=
단항 연산자가 아닙니다 (즉, 단일 인수 만 취할 수있는 연산자).
또는 만연한 과잉처럼 보이지만 실제로는 단순합니다 ... 거의 모든 경우를 다루고 빈 문자열이나 단항 문제는 없습니다.
첫 번째 인수가 '-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'인수가 어디에 있는지 신경 쓰지 않는다면 단순히 케이스를 루프 안에 놓으십시오. 모든 인수를 걷고 어디에서나 '-v'를 찾을 수 있습니다 (존재하는 경우). 이는 명령 줄 인수 순서가 중요하지 않음을 의미합니다. 제시된 바와 같이 변수 arg_match가 설정되어 있으므로 이는 단지 플래그 일뿐입니다. '-v'인수를 여러 번 사용할 수 있습니다. 다른 모든 '-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
'your programing' 카테고리의 다른 글
식이 예상되는 곳에 중괄호로 둘러싸인 블록을 배치하는이 C ++ 구문은 무엇입니까? (0) | 2020.10.16 |
---|---|
CSS를 사용하여 element.style 재정의 (0) | 2020.10.16 |
Yarn으로 로컬 경로로 패키지를 설치하는 방법은 무엇입니까? (0) | 2020.10.16 |
get-put 원리에 대한 설명 (0) | 2020.10.16 |
"내부 오류가 발생했습니다." (0) | 2020.10.16 |