Чтение и создание имени пользователя и пароля из файла CSV в Ubuntu - PullRequest
0 голосов
/ 27 февраля 2020
line=0
cat userDetails.csv |while IFS="," read -r last first grps
do
line=$((line+1))
if [ $line == 1 ]; then
continue
fi
first=echo "$first"|tr 'A-Z' 'a-z' 
last=echo "$last"|tr 'A-Z' 'a-z'
grps=echo "$grps" 
for groupName in echo $grps
do
ret=getent group $groupName
if [ -z $ret ]
then
groupadd $groupName
fi
done
passwd=cat /dev/urandom | tr -dc 'a-zA-Z0-9'|head -c10
user1=echo "$last"|tail -c6
user2=echo "$first"|head -c2
grps=echo "$grps"
if [ ! -z $grps]
then
useradd -G $grps $user1$user2 -p $password
else
useradd $user1$user2 -p $password
fi
echo “user id for $first is: $user1$user2, password: $password”
done

Это код, который читает файл CSV и создает пароль, когда я запускаю его для файла CSV, который немного похож на

Smith, John
Doe, Jane

et c .. И появляются следующие ошибки:



./adduser3.sh: line 9:  John: command not found
./adduser3.sh: line 10: Smith: command not found
./adduser3.sh: line 11: : command not found
./adduser3.sh: line 14: group: command not found
groupadd: group 'echo' already exists
./adduser3.sh: line 20: /dev/urandom: Permission denied
./adduser3.sh: line 21: Smith: command not found
./adduser3.sh: line 22:  John: command not found
./adduser3.sh: line 23: : command not found
useradd: option requires an argument -- 'p'
Usage: useradd [options] LOGIN
       useradd -D
       useradd -D [options]

Options:
  -b, --base-dir BASE_DIR       base directory for the home directory of the
                                new account
  -c, --comment COMMENT         GECOS field of the new account
  -d, --home-dir HOME_DIR       home directory of the new account
  -D, --defaults                print or change default useradd configuration
  -e, --expiredate EXPIRE_DATE  expiration date of the new account
  -f, --inactive INACTIVE       password inactivity period of the new account
  -g, --gid GROUP               name or ID of the primary group of the new
                                account
  -G, --groups GROUPS           list of supplementary groups of the new
                                account
  -h, --help                    display this help message and exit
  -k, --skel SKEL_DIR           use this alternative skeleton directory
  -K, --key KEY=VALUE           override /etc/login.defs defaults
  -l, --no-log-init             do not add the user to the lastlog and
                                faillog databases
  -m, --create-home             create the user's home directory
  -M, --no-create-home          do not create the user's home directory
  -N, --no-user-group           do not create a group with the same name as
                                the user
  -o, --non-unique              allow to create users with duplicate
                                (non-unique) UID
  -p, --password PASSWORD       encrypted password of the new account
  -r, --system                  create a system account
  -R, --root CHROOT_DIR         directory to chroot into
  -s, --shell SHELL             login shell of the new account
  -u, --uid UID                 user ID of the new account
  -U, --user-group              create a group with the same name as the user
  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user mapping
      --extrausers              Use the extra users database


Я не могу понять, почему разрешение dev / urandom мешает коту и почему оно выдает ошибки, которые оно мне дает

1 Ответ

1 голос
/ 27 февраля 2020

Первая проблема - first=echo "$first" не делает то, что вы думаете.

Чтобы определить переменную, вам нужно var=val без пробелов в val (или вы должны заключить в кавычки). Существует также синтаксис var=val command, где var определен в подпространстве , созданном для запуска command (то есть временно, только ради command). Вот что делает ваша команда: сначала она расширяется $first до John, затем у вас есть команда first=echo John, которая определяет переменную first со значением echo на время выполнения команды John. И, как сообщает об ошибке, нет команды John.

. Правильный синтаксис: first=$(echo $first), который запускает команду echo $first и присваивает ее значение first. Или first="$first", который просто присваивает значение от first до first. Что делает совершенно очевидным, что вы делаете что-то совершенно ненужное в first месте.

Остальная часть кода приправлена ​​тем же типом ошибки, используя echo излишне, ошибочно или и то, и другое, или не в состоянии правильно цитировать. Вам также следует убедиться в правильности отступа вашего кода в будущем как для потенциальных ответчиков, так и для вашего собственного здравого смысла при отладке.

...