Професионална програма
Loading...
+ Нов въпрос
vladislav.karamfilov avatar vladislav.karamfilov 1123 Точки
Best Answer

Крайният срок е удължен до 12:00 часа на 2 декември 2014 г. ;)

5
Kibork avatar Kibork 87 Точки

Благодаря, Владо, за труда и бързият отговор!

Поздрави,

Димитър!

1
MartinDachev avatar MartinDachev 30 Точки

Мерси, пуснах го точно в 23:59 :)

1
MartinDachev avatar MartinDachev 30 Точки

Здравейте, когато още нямаше домашно, ми казаха, че като го качат ще удължат срока до 1/12/2014, и аз също съм готов, но пише, че срока е изтекъл. Ето и линк към отговора на въпроса ми - https://softuni.bg/forum/2658/Linux-System-Administation-pak-nyama-domashno-nyama-i-screen-capture

1
quickben avatar quickben 974 Точки

по това време на "деня" се съмнявам, че някой ще го промени, но след като от екипа са казали най-вероятно утре сутринта срока ще бъде удължен до 2.12.2014

1
Yulia avatar Yulia 1343 Точки

Мда, и аз бях изненадана :D Успях да си кача домашното много по-рано де, но се заиграх доста с bash-а сега и исках да кача по-добра версия ^^

Едит: Благодаря за бързата реакция!

btw, ще се радвам ако някой тества скрипта ми на своята машина, защото не знам дали проверките за съществуването на даден package работят. Понеже ми се е налагало на ръка да променям резолюците на десетки снимки, реших да избера именно този проблем за решаване, а изисква определен package... Та малко прекалих... явно сис-админ не е моята професия - скрипта ми има повече от 10 реда код :D 

Това е първият ми bash скрипт (след "Hello World", разбира се), та всякакъв feedback е добре дошъл. Ровейки из нета попаднах на коренно различен синтаксис, обяснения... та съвсем се обърках с тези единични/двойни кавички и скоби :D И мисленето тук трябва да е съвсем различно. Бих искала да го науча добре, но за момента нямам необходимото време... (а и се изкушавам да постигна същият резултат с node.js. С JavaScript всичко е възможно вече!)

Внимание: Ако имате вече инсталиран imagemagick и ако скриптът работи, той по-подразбиране ще смали всичките .jpg изображения в текущата директория до 1024 пиксела по ширина. Желателно е да го execute-нете в отделна директория.

А като бонус - ако си инсталирате imagemagick все пак, може да подадете аргументи за това какви изображения искате да смалите и до каква ширина ^^ Току-виж, има даже някаква полза от този код за вас xD

Пример:
./resize-images.sh png 600

GitHub: resize-images.sh

PS. А ако ви е много много много скучно, а и ви мързи да тествоте скрипта, напишете sl в терминала и дишайте дълбоко докато влакчето мине ^^ Придава сили ;)

2
02/12/2014 00:42:33
byclops avatar byclops 126 Точки

Пробвах срипта ти на debian със следния резултат:

 

- в debian bash се намира в /usr/bin, така че за да тръгне скрипта, първия ред тряба да е :

#!/bin/bash

или може би по-добре:

#!/usr/bin/env bash

 

- след горната корекция скрипта тръгва и резултата е очаквания, но

- след деинсталация а imagemagick се оказа че проверката за наличността на пакета не сработва (ri-orig.sh: line 18: convert: command not found). Оказва се следната проверка връща винаги true:

if $pkg_available == false;

За да връща коректен резултат го преработих на:

if [[ $pkg_available == false ]];

 

Трябва да призная че и мен синтаксиса на bash скриптовете доста ме обърква. Оказа се че същото нещо може да се напише поне по още няколко начина:

 if [[ $pkg_available = false ]];

 if [ "$pkg_available" == false ];

 if [ "$pkg_available" = false ];

За сега не откривам достатъчно пълно, ясно и систематизирано описание на синтаксиса на bash особено що се отнася до всички варианти на изпозлване на if

- след тази поправка всичко е наред при липса на пакета, но след като го инсталирах наново продължавам да получавам "Error - Imagemagick package didn't found."

Тук се оказа че блока, който проверява наличието на пакета в debian не сработва, но по каква причина още не мога да кажа:)

 

 

 

1
04/12/2014 10:34:47
Yulia avatar Yulia 1343 Точки

О, благодаря за коментара!

Наистина с тези квадратни скобички се обърках доста - изпробвах всички варианти, но явно не съм се спряла на точният :D В тази дискусия в StackOverflow са дадени десетки примери и уж всички работят... хаха

#!/usr/bin/env bash наистина е по-добре - универсално.

За проверките - странно е наистина как първо работи при теб, а после не. Аз пък не успях дори да де-инсталирам пакета, за да проверя как работи при мен. Тази магия не иска да се трие xD Но nevermind...

И тази тема в stack-а е интересна. При някои dpkg -s връща статус код 0 при true и 1 при false. Мистерия за мен. Ти като напишеш dpkg -s imagemagick - какво ти връща като резултат? 

0
04/12/2014 13:31:26
byclops avatar byclops 126 Точки

В крайна сметка намерих добро описание на квадратните скоби (цък) и разбрах защо не се получават проверките. 

Първия if от проверката за debian никога не се изпълнява, понеже командата type интерпретира "dpkg" и "-l" като отделни команди и понеже команда "-l"  няма, проверката винаги fail-ва. Така че го махнах това "-l" и if-a проработи:

(original):

if type "dpkg -l" >/dev/null 2>&1; then

(modified):

if type dpkg >/dev/null 2>&1; then

или може и без type:

if dpkg -l >/dev/null 2>&1; then

 

В слеващия if командата не трябва да е в скоби, така че го модифицирах от:

if ["dpkg -s $pkg"]; then

на:

if /usr/bin/dpkg -s $pkg > /dev/null 2>&1; then

 

Тук се намеси странното поведение на dpkg -s, което ми дава изход 0, незавизимо дали пакета е инсталиран или не. Единствената разлика е в output-a в единия случай ми даава Status: install , а в другия Status: deinstall. Явно има разлика между пакети, които никога не са били инсталирани ( за такива получавам статус 1 ), и такива, които са били деинсталирани. В крайна сметка взех проверката за наличност на инсталиран пакет, описана тук и така нещата потръгнаха:

if dpkg-query -Wf'${db:Status-abbrev}' $pkg 2>/dev/null | grep -q '^i'; then

 

Понеже станаха много промени, това е patch-а, след който проверките вървят правино на моята машина:

@@ -1,4 +1,4 @@
-#!/usr/bin/bash
+#!/usr/bin/env bash

# Using imagemagick package, this script resizes all images in current folder to desired size
# By default, script resizes all jpg images to 1024x768
@@ -35,8 +35,8 @@

function find_package {
# Debian / Ubuntu Linux
- if type "dpkg -l" >/dev/null 2>&1; then
- if ["dpkg -s $pkg"]; then
+ if dpkg -l >/dev/null 2>&1; then
+ if dpkg-query -Wf'${db:Status-abbrev}' $pkg 2>/dev/null | grep -q '^i'; then
pkg_available=true #1
fi
fi
@@ -56,7 +56,7 @@
fi

# At least - the "command not found" errors are not visible ^^
- if $pkg_available == false; then
+ if [[ $pkg_available = false ]]; then
echo "Error - Imagemagick package didn't found."
exit;
else

 

Според мен и проверките за другите дистрибуции трябва да се променят по подобен начин за да работят. Ако искаш да тестваш без да деинсталираш imagemagick, можеш да смениш съдържанието на $pkg на imagemagick1 например и готово :)

  

1