OS X의 Bash에서 선택 사용자 목록 만들기

OS X의 Bash에서 선택 사용자 목록 만들기

모든 정크(캐시, 이전 iPhone 백업, 로그 등)를 제외하면서 OS X에서 사용자 폴더를 빠르게 복사하기 위한 복사 스크립트를 만들려고 합니다. 해당 파일/폴더를 복사하지 않는 한 문제가 없습니다. 문제는 사용자를 선택할 때입니다. 시스템 계정을 제외한 컴퓨터의 모든 사용자 목록을 작성하고 운영자가 목록에서 숫자를 입력하여 백업할 사용자 폴더를 선택하도록 하고 싶습니다. 현재 다음 명령을 사용하여 사용자를 얻을 수 있습니다.

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

예를 들어 다음과 같이 반환됩니다.

hiddenadmin fred joe kim

다음을 표시하는 선택 목록을 만들고 싶습니다.

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

사용자가 있으면 괜찮지만 목록을 만들 수 없는 것 같습니다. 또한, 이름이 동일할 것이라는 보장도 없으며, 심지어 사용자 수가 동일할 것이라는 보장도 없습니다.

목록을 생성하기 위해 /Users 폴더만 살펴보지 않는 이유가 궁금하신가요? 일부 계정은 숨겨져 있고 해당 사용자 폴더가 다른 곳에 있을 수 있으며 목록에 Guest또는 폴더가 있는 것을 원하지 않습니다 . Shared여기서 문제는 이 문제를 어디서부터 시작해야 할지조차 모른다는 것입니다.

답변1

있다많이당신이 요청한 것을 수행하는 방법. 여기 내 빠르고 더러운 내용이 있습니다.

변수에 이미 사용자가 있으므로 for형식 지정을 수행하려면 루프가 필요합니다. 내 예를 위해 귀하의 값을 사용하겠습니다. 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

이 루프는 을 읽고 userList, 카운터를 초기화하고 printf출력에 사용합니다. \t선택한 내용을 들여쓰고 CRLF \n를 보냅니다.

메뉴 옵션이 인쇄되면 read명령은 사용자에게 입력하라는 메시지를 표시하고 선택 항목을 변수로 설정합니다 CHOICE. 옵션 count내에서 변수를 재사용하여 유효한 선택 사항을 표시할 수 있습니다. 입력의 유효성을 검사하려면 몇 가지 추가 코드를 추가해야 합니다. 간단한 문장으로 그렇게 할 수 있습니다 .-preadcase

case $choice in 
  1) #some code
     ;;
  2) #some code
     ;;
  *) echo "Invalid choice"
     ;;
esac

관련 정보