@AmdInDrive

Ubuntu- bash скрипты и вставка в них команд?

Привет, тем кто заинтересовался этим вопросом. После двух дней, проведенных в войне с bash'em, я так и не смог понять. что и как делать. Суть заключается в следующим, у меня есть задание написать код в file.sh, который будет проверять пользователя по каталогу /etc/passwd, если он есть, то написать об этом, а если нет, то написать, что его нет, следовательно создать его и задать ему пароль. Дальше необходимо, чтобы была команда проверки домашнего каталога этого пользователя(/home/наш_пользователь), если она существует то написать об этом, если же нет, то создать её и назначить ей владельца в лице нашего нового юзера.
Мои проблемы которые возникли при запуске этого скрипта, кстати запускал я его через команду sudo bash file.sh. И у меня есть предположение, что это немного неправильно.
1)У меня постоянно выдает, что файла /etc/passwd нету. Хотя у меня вопрос как такое может быть, если в нем хранится информация о всех пользователях.
2)Команда с переменной пользователя не всегда работает, и я вообще не понимаю синтаксис её написания, так как стандартный вид $команда не работает, и почему так непонятно.
3)При переходе на пользователя, которого должен создать скрипт, мне выдает просто значок $ и все, предполагаю потому что ему не назначена директория.
Картинку с кодом прикладываю, пожалуйста, если кому не трудно, разберите его полностью, где ошибки есть и как их исправить, мне очень важно понять, где я неправ. И небольшая просьба объяснить это простым языком, так как даже с синтаксисом Ubuntu(Linux) я знаком плохо, уж промолчу про команды.
Вот сам код:
#!/bin/bash
user=dan
    if 
grep $user /etc/passwd/
    then 
echo "The user $user Exists"
else 
echo "The user $user does not Exists"
useradd $user -m
passwd $user
fi
     if 
grep $user /home/$user
     then 
echo "The directory $user Exists"
     else 
echo "The directory user $user  home dont Exists"
mkdir /home/$user
chown $user:$user /home/$user
fi
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Ладно, не поленюсь, напишу ответ, хотя обычно на такие вопросы не отвечаю.

Это не код.
Это не скрипт.
Это не bash.

Это какая-то бредовая каша из непонятно чего. Хотя задачка довольно простая. Но проблемы у Вас начинаются прямо с постановки.
- Домашний каталог - не обязательно в /home, он указывается в записи юзера в /etc/passwd
- Права на домашний каталог - не обязательно $user:$user, как правило это $user:$usergroup

Cкрипт может выглядеть примерно так (использованные команды я обьяснять не буду - по каждой есть man, и более обьемные руководства). Да, я всегда использую Bash версии 1.х
#!/bin/sh

user=$1 # Это некорректно, здесь нужна проверка на то, передан ли аргумент, только для примера
  uinfo=`getent passwd $user`
  bla=`echo $uinfo | awk 'BEGIN {FS=":"} \
        {printf "uname=%s;uid=%s;ugid=%s;uhome=%s",$1,$3,$4,$6}'`
  eval $bla
# После этого блока у нас есть переменные uname, uid, ugid и uhome, которые
# если юзер есть, заполнены данными, а если нет - то пустые

if [ ${#uname} -ne 0 ]; then
  echo "Username exist"
  # Мы предположили, что uhome заполнен, но на самом деле это нужно проверять
 else
   echo "No username"
   # Здесь команды на создание юзера
fi

if [ -d $uhome ]; then
  echo "Homedir exist"
 else
   echo "No homedir"
   mkdir $uhome
   chown $uid:$ugid $uhome
fi
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы