Автор Тема: BASH въпрос  (Прочетена 3992 пъти)

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: BASH въпрос
« Отговор #45 -: Dec 02, 2010, 16:42 »
Код:
if [ `id -u` != "0" ]; then
Код:
if [ `id -u` -ne 0 ]; then
Активен

0x2B|~0x2B

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: BASH въпрос
« Отговор #46 -: Dec 02, 2010, 17:04 »
# Проверка за администраторски права
if [ `id -u` != "0" ]; then
echo "Добре дошли в инсталатора на Gentoo Linux"
echo "За да изпълните този скрипт ви трябва root."
echo "Моля стартирайте скрипта като root."
fi
Сложи и еxit, за да прекъснеш скрипта при изпълнение на условието. В противен случай на потребителя ще се изпише, че трябва да е root, но скриптът ще продължи изпълнението си.

echo "Изберете дял за SWAP (Допълнителна виртуална памет)"
read SWAP
Всички подобни комплекти от echo и read по-добре да бъдат комплект от printf и read. Пример
Код
GeSHi (Bash):
  1. printf "Изберете дял за SWAP (Допълнителна виртуална памет): "
  2. read SWAP
  3.  

echo "Изберете дял за root (/)"
echo "Например : /dev/sda1"
read BOOTPART
echo "Изберете дял за SWAP (Допълнителна виртуална памет)"
read SWAP

mkswap $SWAP
swapon $SWAP
Ами ако потребителят въведе невалидно или несъществуващо устройство? Добави проверка за валидност на данните и коректност на изпълнението към всяко действие в скрипта. В зависимост от получените резултати (или твоите предпочитания) за действието, скриптът може да пита отново за данни или направо да спре изпълнението си.

4. Изнеси всякакви текстове и линкове като променливи в началото на скрипта, или по-добре в отделни файлове, от които да ги четеш. Гледай в кода да имаш възможно най-малко неща, които може да претърпят промяна в даден момент.

5. Оправи си печатните и граматическите грешки.

Не съм гледал за синтактични грешки в кода ти, но ако има такива, ще си проличи. Опитай се да проиграеш всички варианти, които ти хрумнат, за да провериш максимално скрипта си за бъгове.

P.S.: Едно допълнение към ядовете ти от предните страници на темата. Никъде и никога не слагай имена на твои променливи, започващи с цифра. Имената на променливите трябва да започват с буква. Иначе ще има много да си скубеш косата ;)
« Последна редакция: Dec 02, 2010, 17:07 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #47 -: Dec 02, 2010, 18:30 »
Дай пример за това съм публикувал тук целия скрипт за допълнителни идей
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #48 -: Dec 02, 2010, 18:58 »
[ `id -u` != "0" ] && printf "\e[0;31mНямате администраторски права. Моля стартирайте скрипта като администратор (root)\n" && sleep 5s; exit 1
printf "\e[0;32mНапред (Enter)\n"
read key

Така дали ще се хареса на господата и госпожиците (и госпожите :D)
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: BASH въпрос
« Отговор #49 -: Dec 02, 2010, 19:16 »
[ `id -u` != "0" ] && printf "\e[0;31mНямате администраторски права. Моля стартирайте скрипта като администратор (root)\n" && sleep 5s; exit 1
printf "\e[0;32mНапред (Enter)\n"
read key

Така дали ще се хареса на господата и госпожиците (и госпожите :D)
пак сравняваш числа, пробвай с -ne вместо !=
Активен

0x2B|~0x2B

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH въпрос
« Отговор #50 -: Dec 02, 2010, 19:32 »
Роко, имаш
Код
GeSHi (Bash):
  1. [ `id -u` != "0" ] && printf "...." && sleep 5s; exit 1
  2. printf "...."
  3. read key
Мислиш ли, че това ще стигне до 2рото printf и до read??
Активен

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #51 -: Dec 02, 2010, 20:46 »
Аз го оправих вече това ^^ Но сега малко почивка
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: BASH въпрос
« Отговор #52 -: Dec 03, 2010, 14:00 »
Дай пример за това съм публикувал тук целия скрипт за допълнителни идей
Нямам много време да се занимавам с това сега, но ето някои насочващи примери:

# Проверка за администраторски права
if [ `id -u` != "0" ]; then
echo "Добре дошли в инсталатора на Gentoo Linux"
echo "За да изпълните този скрипт ви трябва root."
echo "Моля стартирайте скрипта като root."
fi
Това става така
# Проверка за администраторски права
if [ `id -u` -ne 0 ]; then
echo "Добре дошли в инсталатора на Gentoo Linux"
echo "За да изпълните този скрипт ви трябва root."
echo "Моля стартирайте скрипта като root."
exit 1
fi

За изнесените стрингове и url-та във външни файлове, става с командата source. Тя изчита подадения файл и вмъква описаните променливи и техните стойности в твоя скрипт. Данните във външните файлове се описват така:
Цитат
var1="value1"
var2="value2"
var3="value3"
След това в началото на скрипта (за да са достъпни за целия скрипт, иначе не е задължително да седи в началото) слагаш подобен ред:
Код
GeSHi (Bash):
  1. source ВЪНШНИЯТ_ФАЙЛ
В скрипта викаш променливите с техните имена ($var1, $var2, $var3). Препоръчвам ти да си направиш два отделни файла за стринговете и за url-тата (информацията да се раздели смислово).

Проверките за валидност и коректност на изпълнението са строго специфични за всяко проверявано действие. Прояви въображение, когато мислиш проверките. За пример, може това
echo "Изберете дял за root (/)"
echo "Например : /dev/sda1"
read BOOTPART
да стане така
Код
GeSHi (Bash):
  1. while ! fdisk -s $BOOTPART &>/dev/null; do
  2.    printf "Въведете съществуващ дял, който да се използва за root (/) [например: /dev/sda1]: "
  3.    read BOOTPART
  4. done
Проверяваме с fdisk дали зададеният дял съществува (флагът "-s" връща размера на дяла, ако съществува), и ако потребителят е въвел невалиден или несъществуващ дял, то цикълът ще се завърти отново и отново ще се даде предложение на потребителя да въведе (това не е списък за избор, така че думата "изберете" не пасва) нужния дял. Може да ползваш същата проверка и за $SWAP.
Давай нататък ;)
« Последна редакция: Dec 03, 2010, 14:03 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #53 -: Dec 03, 2010, 14:19 »
Дай пример за това съм публикувал тук целия скрипт за допълнителни идей
Нямам много време да се занимавам с това сега, но ето някои насочващи примери:

# Проверка за администраторски права
if [ `id -u` != "0" ]; then
echo "Добре дошли в инсталатора на Gentoo Linux"
echo "За да изпълните този скрипт ви трябва root."
echo "Моля стартирайте скрипта като root."
fi
Това става така
# Проверка за администраторски права
if [ `id -u` -ne 0 ]; then
echo "Добре дошли в инсталатора на Gentoo Linux"
echo "За да изпълните този скрипт ви трябва root."
echo "Моля стартирайте скрипта като root."
exit 1
fi

За изнесените стрингове и url-та във външни файлове, става с командата source. Тя изчита подадения файл и вмъква описаните променливи и техните стойности в твоя скрипт. Данните във външните файлове се описват така:
Цитат
var1="value1"
var2="value2"
var3="value3"
След това в началото на скрипта (за да са достъпни за целия скрипт, иначе не е задължително да седи в началото) слагаш подобен ред:
Код
GeSHi (Bash):
  1. source ВЪНШНИЯТ_ФАЙЛ
В скрипта викаш променливите с техните имена ($var1, $var2, $var3). Препоръчвам ти да си направиш два отделни файла за стринговете и за url-тата (информацията да се раздели смислово).

Проверките за валидност и коректност на изпълнението са строго специфични за всяко проверявано действие. Прояви въображение, когато мислиш проверките. За пример, може това
echo "Изберете дял за root (/)"
echo "Например : /dev/sda1"
read BOOTPART
да стане така
Код
GeSHi (Bash):
  1. while ! fdisk -s $BOOTPART &>/dev/null; do
  2.    printf "Въведете съществуващ дял, който да се използва за root (/) [например: /dev/sda1]: "
  3.    read BOOTPART
  4. done
Проверяваме с fdisk дали зададеният дял съществува (флагът "-s" връща размера на дяла, ако съществува), и ако потребителят е въвел невалиден или несъществуващ дял, то цикълът ще се завърти отново и отново ще се даде предложение на потребителя да въведе (това не е списък за избор, така че думата "изберете" не пасва) нужния дял. Може да ползваш същата проверка и за $SWAP.
Давай нататък ;)

Благодаря за информацията, после ще публикувам целия скрипт (може да представлява за някого интерес)
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
BASH: Как да поддържам една програма работеща
Общ форум
Regia 1 7300 Последна публикация Feb 16, 2005, 08:51
от
bash
Настройка на програми
tuxi 7 2572 Последна публикация Jun 11, 2005, 19:12
от tuxi
Моля за малко помощ за BASH
Настройка на програми
bonbon 3 1554 Последна публикация Dec 04, 2005, 16:37
от bonbon
BASH
Общ форум
Dean79 3 1740 Последна публикация Jan 13, 2006, 00:24
от Dean79
Bash присвояване на стойност от файл
Общ форум
Pulear 6 2235 Последна публикация May 21, 2006, 17:20
от Pulear