Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Конзолни решения

Featured Replies

1. Е, да има разлика, в крайна сметка реших да ги добавя всички.

2. Може, ще по мисля още малко, пък ще видя.

4. Премахнато

5. Тук не ви разбирам нещо капитане.

5. Идеята ми е потребителя да получи някакво друго съобщение, а не стандартното за операционната система че файла липсва. За това и споменах че е разумна идея да се анализират повече екзит кодове

И без да ми се засягаш, но конструкцията:

-* | --* | *)

е безсмислена, защото само

*)

покрива и другите два случая :)

  • Отговори 438
  • Прегледи 63,5k
  • Създадено
  • Последен отговор

5. Идеята ми е потребителя да получи някакво друго съобщение, а не стандартното за операционната система че файла липсва. За това и споменах че е разумна идея да се анализират повече екзит кодове

И без да ми се засягаш, но конструкцията:

-* | --* | *)

е безсмислена, защото само

*)

покрива и другите два случая :)

5. 100% сте прав, но аз съм инат и така ми харесва :), не смятам да се задълбочавам за сега.

*) Хм да вярно, елементарно! не се засягам от такива грешки :P

Да не забравяме, че идва коледа :)

Весели празници на всички!

 

Нужните програми - bash, notify-send, xsnow

 

h_1419177163_3820212_61105402f8.png

#!/bin/bash
# Брояч на дните до Коледа!!

TODAY="$(date +%j)"
XMAS="$(date -d "25-Dec" +%j)"
DAYS_UNTIL="$((XMAS - TODAY))"
ICON_PATH="/usr/share/icons/gnome/32x32/emotes/face-angel.png"

if [ "$DAYS_UNTIL" -eq 0 ]; then
        echo "Весела Коледа!"
        notify-send -t 5000 'Весела Коледа!' &>/dev/null
        xsnow &>/dev/null
else
        echo "Оставащо време до Коледа"
        echo "$DAYS_UNTIL дни"
        notify-send -u critical -i "$ICON_PATH" "Оставащо време до Коледа" \
                    "$DAYS_UNTIL дни" -t 5000 &>/dev/null
fi

Редактирано от ivoarch (преглед на промените)

DAYS_UNTIL="$((XMAS - TODAY))"

е добре да стане

DAYS_UNTIL="$(($XMAS - $TODAY))"

и това

if [[ "$DAYS_UNTIL" == 0 ]]; then

да стане така:

if [ "$DAYS_UNTIL" -eq 0 ]; then

Редактирано от capnemo (преглед на промените)

DAYS_UNTIL="$((XMAS - TODAY))"

е добре да стане

DAYS_UNTIL="$(($XMAS - $TODAY))"

и това

if [[ "$DAYS_UNTIL" == 0 ]]; then

да стане така:

if [ "$DAYS_UNTIL" -eq 0 ]; then

1. аз знам че това е излишно в променливите

 

$/${} is unnecessary on arithmetic variables.

 

Пример:

 

Грешно

echo $(($n+1))

Правилно

echo $((n+1))

 

2. Също въпрос на стил дали ще използваш [] [[]] или = ==

 

по принцип [[]] е по добре също == от [] и =

 

http://tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS

Редактирано от ivoarch (преглед на промените)

1. аз знам че това е излишно в променливите

 

$/${} is unnecessary on arithmetic variables.

 

Пример:

 

Грешно

echo $(($n+1))

Правилно

echo $((n+1))

 

2. Също въпрос на стил дали ще използваш [] [[]] или = ==

 

по принцип [[]] е по добре също == от [] и =

 

http://tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS

Аз ползвам DAYS_UNTIL="$[$XMAS - $TODAY]

еднакво е с корн шел

За второто си изпуснал идеята. Когато се сравняват цифрови стойности се ползва -eq, lt, le, gt, ge, а не = > <

Ода за второто сега забелязах, мислих че говорим за двойните скоби, да може би -eq е по добрия вариант.

Ода за второто сега забелязах, мислих че говорим за двойните скоби, да може би -eq е по добрия вариант.

не. -eq е правилния вариант!

➤ if [ "0" == "0 " ] ;then echo 1;else echo 2;fi
2

 ➤ if [ "0" -eq "0 " ] ;then echo 1;else echo 2;fi
1

 

 

не. -eq е правилния вариант!

➤ if [ "0" == "0 " ] ;then echo 1;else echo 2;fi
2

 ➤ if [ "0" -eq "0 " ] ;then echo 1;else echo 2;fi
1

Може би ще е по правилно да го замените така :P

➤ if [ "0" == "0" ] ;then echo 1;else echo 2;fi
2

 ➤ if [ "0" -eq "0" ] ;then echo 1;else echo 2;fi
1

 

Може би ще е по правилно да го замените така :P

➤ if [ "0" == "0" ] ;then echo 1;else echo 2;fi
2

 ➤ if [ "0" -eq "0" ] ;then echo 1;else echo 2;fi
1

Не. КОгато сравняваш цифрови стойности, които са резултат от изпълнение на команда никога не можеш да си сигурен че няма падинг със спейсове или нещо друго. Освен това при някои върнати резултати слага и водеща нула (примерно на час и дата) които кожеш доста да оплетеш със = т.е. символно сравняване

Не. КОгато сравняваш цифрови стойности, които са резултат от изпълнение на команда никога не можеш да си сигурен че няма падинг със спейсове или нещо друго. Освен това при някои върнати резултати слага и водеща нула (примерно на час и дата) които кожеш доста да оплетеш със = т.е. символно сравняване

Наистина може, не знам но във zsh ми даваше грешка  [: integer expression expected: 0 докато сега пробвах във bash няма подобен проблем със тези команди и празното място "0 " .

 

Моя грешка,  сори!

 

edit2 Относно = и -eq бяхте прав, когато се сравняват цифри се използва -eq ... а когато това са string-ове или редове се ползва = , == 

 

сега прочетох по добре ръководството

 

man test

Редактирано от ivoarch (преглед на промените)

Наистина може, не знам но във zsh ми даваше грешка  [: integer expression expected: 0 докато сега пробвах във bash няма подобен проблем със тези команди и празното място "0 " .

 

Баш експлицитно конвертира при цифрово сравняване. Но това сравняване може да има понякога странна логика :)

Сега прочетох , че не е хубаво ползването на [[ при сравняване на числа

 

пример if [[ "$DAYS_UNTIL" -eq 0 ]]; then

 

а да се ползва само една скоба [ или (( двойни скоби

Сега прочетох , че не е хубаво ползването на [[ при сравняване на числа

 

пример if [[ "$DAYS_UNTIL" -eq 0 ]]; then

 

а да се ползва само една скоба [ или (( двойни скоби

ползвай само единични, квадратни. Така ще постигнеш максимална съвместимост :)

  • 2 седмици по-късно...

Честита нова 2015 година!

 

Ето няколко полезни инструмента, които правят живота ми по лесен :P.

 

(1) Конзолно решение за аларма през линукс терминала.

#!/bin/env bash
# Конзолна аларма използвайки mplayer.

# изчакване до алармата във sleep формат (s) за секунди, (m) за минути, (h) за часове
waits="60m"

echo "Конзолна аларма!"
echo "Изчакване до алармата във sleep формат."
echo "(s) за секунди, (m) за минути, (h) за часове."
echo "==================================================="
echo -n "Кога да ни алармира? (по подразбиране след 60 мин.): "
read waits

sleep "${waits}"; \
mplayer -really-quiet -nolirc -loop 0 \
        "/usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga"

(2) Конвертира hex във RGB  и RGB  във HEX.

#!/bin/env bash

usage() {
    echo ""
    echo "$0 - Convert hex color code to RGB and RGB to HEX (Hexadecimal)"
    echo ""
    echo "Usage: $0 [HEX] or [RGB] color value"
    echo ""
    echo "Example HEX to RGB: $0 0000ff"
    echo "Example RGB to HEX: $0 0,0,255"
    echo ""
    exit 1
}

if [ $# -eq 0 ]; then
    echo 'Invalid color value!';
    usage;
fi

if [[ $1 =~ ([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2}) ]]; then
    printf "(%d, %d, %d)\n" \
           0x"${BASH_REMATCH[1]}" 0x"${BASH_REMATCH[2]}" 0x"${BASH_REMATCH[3]}"
elif [[ $1 =~ ([[:digit:]]{1,3}),([[:digit:]]{1,3}),([[:digit:]]{1,3}) ]]; then
    printf "#%02x%02x%02x\n" \
           "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
fi

Винаги е добре да слушате чичо ви Немо за шел скриптове ;-)

Винаги е добре да слушате чичо ви Немо за шел скриптове ;-)

Нещо не ви разбирам, сори?

Нещо не ви разбирам, сори?

Опита, опита, аз имам 20 г стаж, но колко пъти ми е отварял очите. Можеш да ги научиш триковете и как работят в действителност нещата, като действаш с опит-грешка, но отнема време и може да се обезкуражиш.

А специално за така скриптове, трябва да мислиш за унифициране, а не после да обясняваш „ама при мен работи„ само защото е на друг шел ;-) тук помага мн опита, който чичо ви Немо има в изобилие !

Добре ясно :), трябва да има един тест за точно тази цел.

Ще го шарна по късно, защото имам нови идеи, как да стане по майсторски изпипано, та да ви хареса ;D.

Добре ясно :), трябва да има един тест за точно тази цел.

Ще го шарна по късно, защото имам нови идеи, как да стане по майсторски изпипано, та да ви хареса ;D.

Хм, не е важно на мен да ми хареса. Важното е да има логика и (това го знаят всички добри девелопери) да проверяваш потребителските данни на входа. Не разчитай че той ще въведе нещо, което е правилно :) ТО за това има специални тестове, които QA изпълняват, които ползват размити и/или модифицирани данни

Добре дано сега да е по добре!

 

Скрипта използва стандартните музикални звуци от freedesktop, така че не би трябвало да има нужда да променяте нищо по скрипта. Просто изпълнявате, въвеждате времето желано от вас до алармата, и това е...

 

Забележка! Времето трябва да е във (1)sleep формат, на пример: 10s за 10 секунди, 10m за 10 минути, 10h за 10 часа.

 

edit: Добавена е проверка на втори характер.

Благодаря капитане!

 

konzolna-alarma

#!/bin/env bash
# Конзолна аларма използвайки mplayer.

PROG="${0##*/}"
VERSION="0.1"
BANNER="${PROG} ${VERSION}"

red=$'\e[0;31m'
green=$'\e[0;32m'
ylw=$'\e[0;33m'
blue=$'\e[0;34m'
pur=$'\e[0;35m'
end=$'\e[0m'
greenb=$'\e[1;32m'

clear;

echo -e "${greenb}$BANNER${end}"
echo -e "${blue}Изчакване до алармата във sleep формат.${end}"
echo -e "${ylw}(s)${blue} за секунди, ${ylw}(m)${blue} за минути, ${ylw}(h)${blue} за часове.${end}"
echo -en "${pur}Въведете след колко време да алармира:?${end} "
read waits

while [ -z "$waits" ]; do
    echo -e "${red}Моля, въведете нещо, вместо просто да натиснете ENTER. Благодарим ви!${end}"
    read waits
done

if [[ "$waits" = [0-9]*[shm] ]]; then
    echo -e "${blue}Натиснете ${ylw}'Control + C'${blue} за да спрете алармата.${end}"
    sleep "${waits}"&& \
    mplayer -really-quiet -nolirc -loop 0 \
            "/usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga"
else
    echo -e "${red}${waits} е грешно! Моля въведете правилно желаното време до алармата!${end}"
    exit 1
fi
echo -e "${green}До виждане!${end}"

Благодарности на колегите, които помагат със опита си!

Редактирано от ivoarch (преглед на промените)

..... ...

Благодарности на колегите, които помагат със опита си!

Една дребна корекция. Вместо

if [[ "$waits" = [0-9]* ]]; then

Ще е по-добре да е нещо такова

if [[ "$waits" = [0-9]*[smh] ]]; then

защото

# sleep 1r
sleep: invalid number '1r'

И като предохранителна мярка вместо това:

sleep "${waits}"; \

да е това:

sleep "${waits}"&& \

                           

 

Една дребна корекция. Вместо

if [[ "$waits" = [0-9]* ]]; then

Ще е по-добре да е нещо такова

if [[ "$waits" = [0-9]*[smh] ]]; then

защото

# sleep 1r
sleep: invalid number '1r'

И като предохранителна мярка вместо това:

sleep "${waits}"; \

да е това:

sleep "${waits}"&& \

Супер сте :)

Забравих за тези варианти на грешка!!

Редактирано от ivoarch (преглед на промените)

Супер сте :)

Забравих за тези варианти на грешка!!

Това обаче при мен не помага?

if [[ "$waits" = [0-9]*[smh] ]]; then

 

Пак плюе # sleep 1r

sleep: invalid number '1r'

тогава нещо такова

if [ $(echo $waits|grep  "[0-9]*[smh]" ) != "" ]

И не ползвайте тези двойни скоби :)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.