2017-05-12 1 views
-2

에 -z 무엇 :나는 다음과 같은 코드를 이해하려고 노력하고 bash는

나는 우리가 -z "$1" 및 코드에서 "${3:-}" 무슨 뜻인지 이해 할
if [ -z "$1" ] || [ -z "$2" || [ "${3:-}" ] 
then 
    echo "Usage: $0 <username> <password>" >&2 
    exit 1 
fi 

. 코드에 >&2을 이해하도록 도와주세요.

+2

'도움말 테스트 | grep - "-z"' – Cyrus

+0

감사합니다. 코드에서'[ "$ {3 : -}}"을 이해하도록 도와주세요. – stack4rme

+0

'man bash' : *'$ {parameter : -word}': 기본값을 사용하십시오. 매개 변수가 설정되지 않았거나 널 (null)이면 단어 확장이 대체됩니다. 그렇지 않으면 매개 변수의 값이 대체됩니다. * – Cyrus

답변

2

으로 전송된다는 의미입니다. 1) 코드가 올바르지 않으므로 ] 대괄호를 놓쳤습니다. 아마 [ -z "$2" 블록 이후.

2) if 문 명령 (들 다음 실행) 다음 명령 (들)의 반환 값이 true 경우 코드 블록이 then .. fi 또는 then .. else 키워드로 묶인 실행 (자신의 종료 코드가 0)

3) [test 명령의 별칭 일뿐입니다 (시도 man test). 이 명령은 여러 매개 변수를 사용하여 매개 변수를 평가합니다. 예를 들어, -z "$something" 플래그와 함께 사용하면 $something이 설정되어 있지 않거나 빈 문자열 인 경우 true (0)을 반환합니다. 그것을 시도 :

if [ -z "$variable" ]; then 
    echo Variable is not set or is an empty string 
fi 

4) || 문이 OR입니다. 이전 명령이 false 문을 리턴하면 다음 명령이 실행됩니다. 명령 [ -z "$variable2" ]

if [ -z "$variable" ] || [ -z "$variable2" ]; then 
    echo Variable 1 or variable 2 is not set or is an empty string 
fi 

문에서 실행 될 수 있도록 경우에만 variable은 비어 있었다. 동일은 다른 문법을 달성 할 수있다 :

test 프로그램의 하나의 인스턴스 만 실행하기 위해 필요하기 때문에, 더 빠르게 처리 될 수
if [ -z "$variable" -o -z "$variable2" ]; then 
    echo Variable 1 or variable 2 is not set or is an empty string 
fi 

. variable 경우는/빈 설정되지 않은 또는 variable2가/EMPTY 설정되지 않은

5) 문 "[ ${3:-} ]" 수단 스크립트의 true$3 경우 (세 번째 인수를 반환 ... : 당신이 그것을 읽을 수 있도록 깃발 -oOR 의미)가 설정됩니다.

6) >&2은 스트림 리디렉션입니다. 모든 프로세스에는 표준 출력과 오류 출력의 두 가지 출력이 있습니다. 이들은 독립적이며 두 개의 서로 다른 파일에 기록 될 수 있습니다 (예를 들어). >&2은 "표준 출력과 동일한 위치로 표준 출력을 리디렉션"하는 것을 의미합니다.

그래서 요약하기 : 스크립트는 그 스크립트가 정확히 두 개의 매개 변수와 함께 실행해야한다는 것을 의미 비어 있지 않은 빈 $1 또는 $2 비어 있거나 $3 작동하면 then .. fi 사이의 명령이 실행됩니다. 그렇지 않은 경우 echo 메시지가 표준 오류 출력에 인쇄됩니다.

1

-z STRINGthe length of STRING is zero을 의미합니다.

${parameter:-word} 매개 변수가 설정되지 않았거나 null 인 경우 단어 확장이 대체됩니다. $ 3에 값이 없으면 $ 3은 공백 값으로 설정됩니다.

&2 표준 오류에 씁니다. 내 말은 실행 된 명령의 stdout 값이 stderr,

관련 문제