2016-07-30 2 views
0

내가 인수의 수는 하나입니다 있는지 확인하기 위해 노력하고있어 나는 이전에 내 스크립트 작성 기능에 해당하지만, 경우에 작동하지 않습니다 :배쉬 여러 IF 문에서 조건 및 기능

if [ $# -eq 1 && echo "$1" | lgt && echo "Invalid Length - $1" && echo "$1" | checking_another_function_etc ]; then 
echo "some output" && exit 1 

"lgt"는 함수 이름입니다.

([[ "여러 개의 if 문이 있지만 작동하지 않습니다. 아마도 따옴표로 인수 검사 및 함수의 수를 구분해야하지만, 어떻게 해야할지 잘 모르겠습니다. 이 echo 명령 상태 if에 통과도 가능한 경우가. 나는 건 내가 모든 기능의 확인 후 1 개 echo 문을 필요로합니다.

을 궁금하지만, 각 기능 후에 나는 자신의 echo 문이 필요합니다.

답변

3

[은 일반 명령이며 (test이라고도 함),/] 쌍은 단순히 명령 목록을 둘러 쌀 수 없습니다. 식만 [으로 계산됩니다. 나머지는 셸 && 연산자로 결합 된 별도의 명령입니다.

if [ $# -eq 1 ] && 
    echo "$1" | lgt && 
    echo "Invalid Length - $1" && 
    echo "$1" | checking_another_function_etc; then 
    echo "some output" && exit 1 
fi 

명령의 수 분리는 당신이 기대하는 것을 제공 할 수 있습니다 :

if [ $# -ne 1 ]; then 
    echo "Wrong number of arguments" 
    exit 1 
elif ! echo "$1" | lgt; then 
    echo "Invalid length: $1" 
    exit 1 
elif echo "$1" | checking_another_function_etc; then 
    echo "some output" 
    exit 1 
fi 

를 종료 상태가 항상 있기 때문에 echo 명령을 만들기 위해 && 연산자의 LHS 거의 유용 0.

+0

모든 기능 후에 모든 출력을 보여 주지만 조건 (after; then) 후 출력을 표시하지 않습니다. – Josh

+1

@Josh이 답변은 공동 올바른 쉘 코드로 바뀌 었습니다. 그러나 질문은 이것이 당신이 원한 것인지 아닌지를 판단하기에 충분한 정보를 제공하지 못합니다. – John1024

+0

'checking_another_function_etc'의 종료 상태 (예상 및 실제)는 무엇입니까? – chepner