Как я могу перехватить возврат двух переменных с помощью оператора if, используя bash? - PullRequest
0 голосов
/ 21 апреля 2011

Моя задача - перечислить папку пользователя в / Users на Mac.Я должен учесть наличие двойных папок (большое предприятие из 650 mac-клиентов) или когда настольный аналитик сделал резервную копию папки и добавил кое-что.Моя $fourFour переменная поднимает это.Тем не менее, я должен отметить это для регистрации.

Вот где я получил ниже.Переменная $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

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011
  1. Не анализируйте выходные данные ls, если в этом нет необходимости.Ваш код содержит основных проблем с пробелами в именах папок.

  2. Массивы Bash могут быть вашими друзьями:

    #!/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
    
1 голос
/ 21 апреля 2011

вам не нужно вызывать так много инструментов, чтобы найти ваши папки.Просто используйте оболочку (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

, если вы просто хотите проверить, есть ли какие-либо папки, соответствующие вашему шаблону

v=$(echo "$four"/)
case "${#v}" in
     0) echo "0 item";;
     *) echo "1 or more item";;
esac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...