День добрый.
Учу потихоньку баш, и возникло желание создать для работы небольшой универсальный скрипт по установке\копированию одного приложения на компах пользователей.
В идеале скрипт запускается с одним или двумя параметрами в виде username реального пользователя и в зависимости от количества параметров выполняется та или иная часть скрипта.
Что я хочу от скрипта:
0. При запуске без параметров - выдавать ошибку, что не указан username
1. При запуске с 1-м параметром - проверять существует ли такой юзер и если всё нормально, то ему ставится программа.
2. При запуске с 2-мя параметрами - проверяется наличие обоих пользователей, если хоть одного нет, то скрипт выходит с ошибкой, если оба есть, то от пользователя1 к пользователю2 эта программа копируется.
Получилось пока набросать вот такой вот скрипт.
#!/bin/bash
if [ $# -eq "0" ]; then
echo "Не указано имя пользователя...."
else
if [ ! $# -gt "1" ]; then
grep $1 /etc/passwd > /dev/null 2>&1
if [ ! $? -eq "0" ]; then
echo "Пользователь $1 не существует"
else
echo "app будет установлен для пользователя $1"
fi
else
for i in $1 $2; do
grep $i /etc/passwd > /dev/null 2>&1
if [ $? -ne "0" ]; then
echo "Пользователя $i не существует"
exit 1
fi
done
if [ $? -eq "0" ]; then
echo "Копируем app $1 -> $2"
else
echo "Выход с ошибкой"
fi
fi
fi
echo "Выход"
Для проверки запускаю его по очереди с правильными и НЕ правильными параметрами (для удобства просто из второго скрипта).
echo -e "\nNo username"
./t1.sh
echo -e "\nUser 1"
./t1.sh teacher
echo -e "\nWrong user 1"
./t1.sh wronguser1
echo -e "\nuser 1 -> 2"
./t1.sh teacher crew
echo -e "\nWrong user 1 -> 2"
./t1.sh teacher wronguser2
./t1.sh wronguser1 crew
Вот вывод от второго скрипта:
./t2.sh
No username
Не указано имя пользователя....
Выход
User 1
app будет установлен для пользователя teacher
Выход
Wrong user 1
Пользователь wronguser1 не существует
Выход
user 1 -> 2
Копируем app teacher -> crew
Выход
Wrong user 1 -> 2
Пользователя wronguser2 не существует
Пользователя wronguser1 не существует
Собственно вопрос такой - почему после последней ошибки\проверки я не вижу ни сообщения "выход", ни "выход с ошибкой"? Где я ошибся?