2014-10-17 3 views
1

나는 Bash 셸을 사용하는 것에 대한 소유권을 가지고있는 스크립트가 몇 개 있으며, 조건문 안에 find 문이 있습니다. 이 같은조건문에서 변수

뭔가 :

if [ -z $(find/-type f -perm -002) ] ; then echo "no world writable found" 

곳 다른 내가 대신 world write perms found의 발견 된 것을 표시 싶습니다.

내가 할 수있는 :

echo $(find/-type f -perm -002) has world write permissions 

또는 설정 변수 $(find/-type f -perm -002)에 있습니다.

하지만 더 좋은 방법이 있는지 궁금합니다. find 문의 내용을 변수로 검색하는 다른 방법이 있습니까?

+0

찾기 결과를 변수에 지정하는 데있어서 잘못된 점은 무엇입니까? – ceving

+0

함수에 포함 된 경우'result = $ (find/-type f -perm -002)'또는'local result = $ (find/-type f -perm -002)'는 관용적 인 방법 일 것입니다. – helpermethod

+0

원본에서 두 개 이상의 단어로 확장되면 '['는 너무 많은 피연산자에 대해 불평 할 것이므로 명령 대체를 인용해야합니다. – chepner

답변

3

출력을 가져 와서 변수에 저장하면됩니다. 비어 있지 않으면 내용을 인쇄 할 수 있습니다. 이렇게하면 명령을 한 번만 실행하면됩니다.

RESULT=$(find/-type f -perm -002) 
if [ -z "$RESULT" ] 
then 
    echo "no world writable found" 
else 
    echo "$RESULT has world write permissions" 
fi 
+0

그것을보고 나면, 이것이 가장 우아한 방법 인 것 같습니다. 나는 이것을 Mgmt에 되돌려 놓을 것이다. 감사! – d3051

1

원하는 경우 헤드 라인을 삽입하려면 sed을 사용할 수 있습니다.

REPORT=$(find /tmp -type f -perm -002 | sed '1s/^/Found world write permissions:\n/') 
echo ${REPORT:-No world writable found.} 

주의 : find 하나 개 이상의 행을 반환 할 수 있기 때문에 귀하의 예는 깨진 것 같습니다.

그리고 awk는 두 가지를 한 번에 수행 할 수 있습니다

find /tmp -type f -perm -002 | 
awk -- '1{print "Found world write permissions:";print};END{if(NR==0)print "No world writable found."}' 
+0

이것은 영리합니다. 나는 여기서 뭔가를 배웠다. 귀하의 회신에 감사드립니다! – d3051

0

당신이 메시지 no world writable found를 가지고 있지 괜찮다면, 당신은 하나의 find 문을 사용할 수 있습니다, 그리고 그게 다야 :

find/-type f -perm -002 -printf '%p has world write permissions\n' 

나중에 사용하기 위해 반환 된 파일을 저장해야하는 경우 배열에 저장합니다 (Bash 가정).

#!/bin/bash 

files=() 

while IFS= read -r -d '' f; do 
    files+=("$f") 
    # You may also print the message: 
    printf '%s has world write permissions\n' "$f" 
done < <(find/-type f -perm -002 -print0) 

# At this point, you have all the found files 
# You may print a message if no files were found: 

if ((${#files[@]}==0)); then 
    printf 'No world writable files found\n' 
    exit 0 
fi 

# Here you can do some processing with the files found... 
+0

성난 강경범이 자신의 행동을 설명하겠습니까? –