Премини към съдържанието
  • Добре дошли!

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

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

     

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


tux

Препоръчан отговор

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

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

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

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

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

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

-* | --* | *)

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

*)

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

Линк към коментара
Сподели в други сайтове

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

Потребители с най-много отговори

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]" ) != "" ]

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

Линк към коментара
Сподели в други сайтове

Добавете отговор

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

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...

Информация

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