Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
@!!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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1213120133
Riply
2008-06-10 21:48
2008.07.13
Warning, которого быть не должно.


2-1213628343
Viktor198
2008-06-16 18:59
2008.07.13
Как привязаь компонент ProgressBar


15-1211874362
версия для печати
2008-05-27 11:46
2008.07.13
Замена множества компонент в проекте


4-1192792391
GreyWolf
2007-10-19 15:13
2008.07.13
Определение виртуальности com-порта


4-1192974092
ilopX
2007-10-21 17:41
2008.07.13
Недокументированная функция SetShellWindow





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский