Задать вопрос
@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
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Простой 19 комментариев
Решения вопроса 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы