2013-03-17 2 views
0

쉘 스크립트를 만들려고하는데 변수 $output이 채워지면 출력을 변경하고 싶습니다. 명령 내에서 if으로 변수를 검사하려고 생각했지만 올바른 구문인지는 알 수 없습니다. 여기에 예제가 있습니다 (물론 작동하지 않습니다) :If 명령문 내부 명령문

ls -lisa | awk '$ 5 == own'own = "$ owner"| sort -k $ column -n if [ $ output]; then print> out.txt fi

그런 식으로 작동하는지 그리고 가능한지 모르겠습니다.

+0

당신은 '사용할 수있는 경우 테스트 $ 출력 '그것이 비어 있지 않은지 확인합니다. – Th3Cuber

답변

1

exec 내장은 나머지 실행중인 셸 스크립트의 기본 표준 출력을 변경할 수 있습니다.

if [ -n "$output" ]; then 
    exec >out.txt 
fi 
ls -lisa | awk '$5 == own' own="$owner" | sort -k$column 

난 당신이 AWK 부분으로 뭘 하려는지 전혀 확실하지 않다, 그래서 이것은 귀하의 질문에서 불과 그대로입니다 : 그래서,이 경우, 당신은 할 것이다.

또 다른 옵션은 함수로 리디렉션하려는 스크립트의 부분을 넣은 다음 출력을 리디렉션하는 두 가지 방법 중 하나로 함수를 호출하는 것입니다. 예 :

do_work() { 
    ls -lisa | awk '$5 == own' own="$owner" | sort -k$column 
} 
if [ -n "$output" ]; then 
    do_work >out.txt 
else 
    do_work 
fi 
+0

오, 임원이 내 일을 더 쉽게 해줬습니다. 정말 고마워 ;) – Albert

1

당신은 (기본값으로 표준 출력은/dev /와 ${variable:-default}) 쉘의 "기본값 사용"옵션을 사용하여이 작업을 수행합니다 :

ls -lisa | awk '$5 == own' own="$owner" | sort -k$column -n > "${output:-/dev/stdout}"