Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 2nd, 2012  |  syntax: None  |  size: 1.54 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/bin/bash
  2.  
  3. # NOTE: GID 20 is staff group -- see more with: dscl . list groups gid
  4. DEFAULT_GID=20
  5. DEFAULT_GROUP=staff
  6. DEFAULT_SHELL=/bin/bash
  7. DEFAULT_HOME_BASE=/Users
  8.  
  9. _DEBUG_ON=""
  10.  
  11. me=$(basename $0)
  12.  
  13. usage() {
  14.   printf "
  15. Usage  
  16.   $me <username>
  17.  
  18. Note: Probably have to run with sudo
  19. "
  20.   #$me <username> [-home <path>] [-uid <id>] [-gid <id>] [-shell <path>]
  21. }
  22.  
  23. _create_user() {
  24.   new_user="$1"
  25.   new_home="$2"
  26.   new_shell="$3"
  27.   new_uid="$4"
  28.   new_gid="$5"
  29.   new_name="$6"
  30.  
  31.   OSX_USER="/Users/$new_user"
  32.   dscl . -create "${OSX_USER}" && \
  33.     dscl . -create "${OSX_USER}" NFSHomeDirectory "$new_home" && \
  34.     dscl . -create "${OSX_USER}" UserShell "$new_shell" && \
  35.     dscl . -create "${OSX_USER}" UniqueID "$new_uid" && \
  36.     dscl . -create "${OSX_USER}" PrimaryGroupID "$new_gid" && \
  37.     ( [ ! -z "$new_name" ] &&  dscl . -create "${OSX_USER}" RealName "$new_name" )
  38.   return $?
  39. }
  40.  
  41. log()  { printf "$*\n" ; return $? ;  }
  42. fail() { log "\nERROR: $*\n" ; exit 1 ; }
  43.  
  44. # TODO: accept more options
  45. if [ -z "$1" ] ; then
  46.   usage
  47.   exit 0
  48. fi
  49.  
  50. new_user="$1"
  51. new_shell=$DEFAULT_SHELL
  52. new_uid=$(($(dscl . -list /Users uid | sort -nk2 | tail -n 1 | awk '{print $2}')+1))
  53. new_gid=${DEFAULT_GID}
  54. new_name="Marry Poppins $RANDOM"
  55. home_base=$DEFAULT_HOME_BASE
  56. new_home="${home_base}/$new_user"
  57. new_group="${DEFAULT_GROUP}"
  58.  
  59.  
  60. [ "$_DEBUG_ON" ] && set -x
  61. _create_user "$new_user" "$new_home" "$new_shell" "$new_uid" "$new_gid" "$new_name"
  62. [ "$?" = 0 ] && mkdir -p "$new_home"
  63.  
  64. if [ "$?" = 0 -a "$new_home" != "/" ] ; then
  65.   chown -R "${new_user}:${new_group}" "${new_home}"
  66. fi
  67.  
  68. set +x