Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.13;
Скачать: CL | DM;

Вниз

Оцените пожалуйста срикпт. Насколько он "нормальный"?   Найти похожие ветки 

 
@!!ex_   (2008-05-27 09:50) [0]

#!/bin/sh

proj_name="sasassault"
title="Sea&Sky Assault"

all_data="/usr/local/share/$proj_name"
all_bin="/usr/local/bin/$proj_name"
all_config="/home/$USER/.$proj_name"

cur_data="/home/$USER/.$proj_name"
cur_bin="/home/$USER/.$proj_name"
cur_config="/home/$USER/.$proj_name"

#функции выхода из скрипта

function exit_by_user()
{
 echo "
Установка преравана пользователем" >&2
 exit 0
}

function exit_by_file_not_exists_error()
{
 echo "
Установка преравана скриптом из-за ошибки(файл не существует)" >&2
 exit 1
}

function exit_by_you_are_not_root_error()
{
 echo "
Установка преравана скриптом из-за ошибки(необходимы права рута)" >&2
 exit 1
}

function exit_by_io_error()
{
 echo "
Установка преравана скриптом из-за ошибки(ошибка доступа к файлу)" >&2
 exit 1
}

#функции проверки состояний

function file_exists
{
if [ -e "$1" ] ; then
 echo "$1 : существует" >&2
 return 0
else
 echo "$1 : не существует" >&2
 return 1
fi
}

function ask
{
 local result=
 echo "$1" >&2
 while [ "$result" = "" ]; do
 read input_value
 if [ $input_value = "exit" ]; then
   exit_by_user
   result=0
 else
   if [ $input_value = $2 ]; then
     result=0
   else
     if [ $input_value = $3 ]; then
        result=1
     else
       echo "Ввод не корректен, пожалуйста введите корректное значение(или exit для выхода):" >&2
       result=
     fi
   fi
 fi
 done
 return $result
}

function test_exists
{
if file_exists $1; then
 return 0
else
 echo "Проверка провалилась." >&2
 exit_by_file_not_exists_error
 return 1
fi
}

#функции разных установок

function try_make
{
 if [ -e "$1" ]; then
   echo "Путь существует $1" >&2
 else
   echo "Пытаемся создать $1" >&2
   if mkdir $1; then
     echo "$1 успешно создан" >&2
   else
     exit_by_io_error
   fi
 fi
}

function try_copy
{
 echo "Пытаемся скопировать $2 в $1/$2" >&2
 if cp $2 "$1/$2"; then
   echo "$2 успешно скопирован" >&2
 else
   exit_by_io_error
 fi
}

function try_set_exec
{
 echo "Пытаемся установить полные права на $1" >&2
 if chmod 755 $1; then
   echo "$1 права успешно установленны" >&2
 else
   exit_by_io_error
 fi

}

function install_to
{
 install_bin=$1
 install_data=$2
 install_config=$3
 echo "" >&2
 echo "Проверяем пути установки" >&2
 try_make $install_bin
 try_make $install_data
 try_make $install_config
 echo "Копируем файлы" >&2
 try_copy $install_bin "Engine"
 try_copy $install_data "Data.dpg"
 echo "Устанавливаем права на запуск" >&2
 try_set_exec "$install_bin/Engine"
 echo "Создаем файл конфига" >&2
 if [ -e "$install_config/paths.cfg" ]; then
   rm "$install_config/paths.cfg"
 fi  
 echo "$install_bin
$install_data
$install_config" >"$install_config/paths.cfg"
 echo "Установка успешно завершена" >&2
 if ask "Создать ярлык на рабочем столе для текущего пользователя?(y/n)" "y" "n"; then
   ln -s "$install_bin/Engine" "/home/$USER/Desktop/$title"
 fi
}

function install_for_all_users()
{
if [ $(id -u) != "0" ]; then
   echo "Вы должны быть рутом, для этого типа установки" >&2
   exit_by_you_are_not_root_error
fi
echo "Установка игры для всех пользователей." >&2
echo "Исполняемый файл игры будет установлен в $all_bin" >&2
echo "Данные игры будут установлены в $all_data" >&2
echo "Конфиг игры будут установлен всем пользователям" >&2
if ask "Продолжить?(y/n)" "y" "n"; then
 install_to $all_bin $all_data $all_config
else
 exit_by_user
fi
}

function install_for_current_user()
{
echo "Установка игры только для текущего пользователя." >&2
echo "Исполняемый файл игры будет установлен в $cur_bin" >&2
echo "Данные игры будут установлены в $cur_data" >&2
echo "Конфиг игры будут установлен в $cur_config" >&2
if ask "Продолжить?(y/n)" "y" "n"; then
 install_to $cur_bin $cur_data $cur_config
else
 exit_by_user
fi
}

echo "

Вы запустили программу установки игры $title.
Программа установки задаст несколько простых вопросов, и установит игру автоматически.
Вы всегде можете набрать exit для выхода из программы устанвоки.

" >&2

#Тестирование архива
echo "Тестирование архива." >&2
test_exists "Engine"
test_exists "Data.dpg"
#

echo "
Выберите тип установки:" >&2
echo "1 - для текущего пользователя" >&2
echo "2 - для всех пользователей(рекомендуется)" >&2

if ask "Введите 1 или 2" "1" "2"; then
 install_for_current_user
else
 install_for_all_users
fi


 
DiamondShark ©   (2008-05-27 11:19) [1]

На таком угребанском языке не может быть "нормальных" скриптов по определению.


 
Style ©   (2008-05-27 11:25) [2]

это не изыг - это shell-скрипт.
Только че тут оценивать - йа не понял.
Ладна оценил - 3 бакса, не больше.


 
__mirage   (2008-05-27 14:48) [3]

>[0] @!!ex_ (2008-05-27 09:50:00)
во-первых, во-вторых и далее по всем числам: никакого русского в скриптах быть НЕ ДОЛЖНО. нигде и никогда.

далее. unix-way — не вякать, если не просят. а у тебя оно вякает на каждом шагу. непорядок. сделать опцию «-v», по умолчанию выводить только вопросы.

дальше не читал. %-)

---
Understanding is not required. Only obedience.


 
@!!ex_   (2008-05-27 20:55) [4]


> DiamondShark ©   (27.05.08 11:19) [1]
>
> На таком угребанском языке не может быть "нормальных" скриптов
> по определению.

А куда деватся? Какие варианты....


> Style ©   (27.05.08 11:25) [2]
>
> это не изыг - это shell-скрипт.
> Только че тут оценивать - йа не понял.

НАсколько он корректен. Я о том, как писать скрипыт у3знал только вчера... Поэтому есть сомнения.


> никакого русского в скриптах быть НЕ ДОЛЖНО. нигде и никогда.

Понял. Исправлю.


> алее. unix-way — не вякать, если не просят. а у тебя оно
> вякает на каждом шагу. непорядок.

В смысле? То что текста много выводит? Так hp-lip при установке тоже дофига комментариев показывает.


> сделать опцию «-v», по умолчанию выводить только вопросы.

А что должна эта опция делать?


 
Ослик   (2008-05-27 21:14) [5]

[4] @!!ex_   (27.05.08 20:55)

> В смысле? То что текста много выводит?

Ссылка не совсем в тему, но, во-первых интересно, во-вторых небольшой кусочек оттуда как-раз в тему:

Возьмём один простой пример, существует основная ценность в культуре Unix, которую Рэймонд назвал "Молчание - золото", что означает, что программа которая сделала точно то, что вы сказали ей сделать успешно, не должна выдавать никаких выходных данных. Это не имеет значения, что вы набрали 300 символов в командной строке, чтобы создать файловую систему, или скомпилировать и установить сложный кусок программы, или послать ракету ракету с космонавтами на Луну. Если это получилось, то общепринято просто ничего не выводить. Пользователь должен заключить из появления следующего приглашения в командной строке, что все должно быть в порядке.
http://russian.joelonsoftware.com/Articles/Biculturalism.html


 
@!!ex_   (2008-05-27 21:23) [6]


> Ослик   (27.05.08 21:14) [5]

понял....



Страницы: 1 вся ветка

Текущий архив: 2008.07.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1211871564
Desdechado
2008-05-27 10:59
2008.07.13
Вот интересно


15-1212392855
Nous Mellon_
2008-06-02 11:47
2008.07.13
Срочная халтурка для С++ кодера


2-1213435120
Kaer
2008-06-14 13:18
2008.07.13
Как избавиться от "Out of memory"?


15-1211789451
i
2008-05-26 12:10
2008.07.13
Перехват печати на принтере


2-1213166267
Amid
2008-06-11 10:37
2008.07.13
Веб Сервис на Делфи 7, клиент на С++Буилдер 6 ?????