在 OS X 上的 Bash 中建立選擇的使用者列表

在 OS X 上的 Bash 中建立選擇的使用者列表

我正在嘗試建立一個複製腳本來快速複製 OS X 中的使用者資料夾,同時排除所有垃圾(快取、舊 iPhone 備份、日誌等)。至於不複製這些文件/資料夾,我沒有問題。問題出在選擇使用者。我想建立電腦上所有使用者的清單(不包括系統帳戶),並讓操作員只需從清單中鍵入數字即可選擇要備份的使用者資料夾。目前我可以使用以下命令獲取用戶:

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 資料夾來建立清單。某些帳戶可能是隱藏的,並且其使用者資料夾位於其他位置,我不希望GuestShared資料夾出現在清單中。這裡的問題是我甚至不知道從哪裡開始。

答案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縮排您的選擇並\n發送 CRLF。

列印選單選項後,該read命令將提示使用者輸入並將他們的選擇設為變數CHOICE。您可以在選項中重複使用該count變數來顯示有效的選擇。您必須添加一些額外的代碼來驗證輸入。您可以透過一個簡單的聲明來做到這一點。-preadcase

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

相關內容