Crie uma lista de seleção de usuários no Bash no OS X

0

Estou tentando criar um script de cópia para copiar rapidamente uma pasta de usuário no OS X, excluindo todo o lixo (caches, backups antigos do iPhone, logs, etc.). No que diz respeito a não copiar esses arquivos / pastas, não estou tendo problemas. O problema é quando selecionando o usuário. Eu quero construir uma lista de todos os usuários no computador, excluindo as contas do sistema, e ter o operador escolher qual pasta de usuário para backup apenas digitando um número de uma lista. Atualmente posso obter os usuários com o seguinte comando:

userList='dscl . list /Users UniqueID | awk '$2 >= 400 { print $1; }''

Por exemplo, isso retornará:

hiddenadmin fred joe kim

Gostaria de criar uma lista de seleção que mostre:

Please choose which user folder you would like to copy:
  1) hiddenadmin
  2) fred
  3) joe
  4) kim

Uma vez que eu tenho o usuário, estou bem, mas não consigo fazer com que a lista seja criada. Além disso, não há garantia de que os nomes seriam os mesmos, ou mesmo o número de usuários seria o mesmo.

Caso você esteja se perguntando por que não procuro apenas na pasta / Users para criar a lista. Algumas contas podem estar ocultas e ter sua pasta de usuário em outro lugar, e eu não quero as pastas Guest ou Shared na lista. O problema aqui é que eu nem sei por onde começar neste.

    
por Kevin Cranford 14.06.2016 / 18:16

1 resposta

0

Existem muitas maneiras de fazer o que você está pedindo. Aqui está o meu rápido e sujo.

Como você já tem seus usuários em uma variável, você só precisa de um for loop para fazer sua formatação. Vou usar seus valores para o meu exemplo: T

userList="hiddenadmin fred joe kim"
echo "Please choose which user folder you would like to copy:"
count=0
for name in $userList;do
  count=$((count+1))
  printf '\t%s) %s\n' $count $name
  echo
done
read -p "Choose from $(eval echo {1..$count}): " CHOICE

Esse loop irá ler seu userList , inicializar um contador e usar printf para a saída. O \t recuará suas seleções e \n enviará um CRLF.

Quando a opção de menu for impressa, o comando read solicitará a entrada do usuário e definirá sua seleção para a variável CHOICE . Você pode reutilizar a variável count na opção -p de read para exibir opções válidas. Você terá que adicionar algum código adicional para validar a entrada. Você pode fazer isso com uma simples declaração case .

case $choice in 
  1) #some code
     ;;
  2) #some code
     ;;
  *) echo "Invalid choice"
     ;;
esac
    
por 15.06.2016 / 02:05

Tags