2011-04-21 3 views
0

내 작업은 Mac의/Users에 사용자의 폴더를 나열하는 것입니다. 나는 dupe 폴더 (650 mac 클라이언트의 대기업) 또는 데스크탑 분석가가 폴더를 백업하고 뭔가를 추가 한 곳을 허용해야합니다. 내 $fourFour 변수가이를 나타냅니다. 그러나 로깅을 위해 플래그를 지정해야합니다.bash를 사용하여 if 문에 두 개의 변수를 반환하는 방법은 무엇입니까?

이것은 아래에 있습니다. 변수 $fourFour은 하나 이상의 폴더를 반환 할 수 있으며이를 적절히 반영하기 위해 if 문을 가져와야합니다.

folders=$(ls -d */ | grep $fourFour | awk '{print $(NF)}' | sed 's/\///') 
echo folders is $folders 
if [[ "$folders" == "" ]]; then 
    echo no items 
else 
    echo one or more items 
fi 
+0

당신은 당신이 뭘 하려는지 우리에게 말할 수 있다면 그것은 더 나은 것입니다. 당신은 확실히 1 라인에서 4 개의 파이프 명령을 피할 수 있습니다. – anubhava

답변

2
  1. Do not parse the output of ls과 일치하는 모든 폴더가 있는지 여부를 확인하려면 그냥 쉘 (bash는)

    #!/bin/bash 
    shopt -s nullglob 
    for dir in *$fourFour*/ # putting a slash "/" ensures you get directory entries 
    do 
        echo "Do something with $dir" 
        # if you want to check if its empty folder 
        v=$(echo "$dir"/*) 
        case "${#v}" in 
        0) echo "No files in $dir";; 
        *) echo "Files in $dir";; 
        esac 
    done 
    

    를 사용합니다. 위의 코드는 폴더 이름에 공백이 있습니다.

  2. Bash arrays 당신의 친구가 될 수 있습니다

    #!/bin/bash 
    
    shopt -s nullglob 
    
    folders=(*$fourFour*/) 
    
    # Remove the trailing slashes 
    folders=("${folders[@]%/}") 
    
    if [[ "${#folders[@]}" -gt 0 ]]; then 
        echo "Folders:" "${folders[@]}" 
    else 
        echo "No folders" 
    fi 
    
+0

1보다 큰 값을 수정하고 "하나의 폴더 만"표시하거나 그렇지 않으면 "더 많은 폴더"를 표시하면이 기능이 작동합니다. - 감사합니다. – chop

1

이렇게 많은 도구를 호출하여 폴더를 찾을 필요는 없습니다. 당신은 당신이 절대적으로 필요하지 않는 한 패턴

v=$(echo "$four"/) 
case "${#v}" in 
    0) echo "0 item";; 
    *) echo "1 or more item";; 
esac 
+0

나는 그것이 그가 원하는 것이라고 생각하지 않는다 : 그는 "아이템 없음"또는 "하나 이상의 아이템"이있을 경우 반향하기를 원한다. –

+0

grep 패턴과 일치하는 폴더가 있는지 확인하거나 일치하는 폴더에 0 개의 파일이 있는지 (또는 없는지) 확인하려고하는지 명확하지 않은 것입니다. –

관련 문제