Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2016-05-29 23:12:35

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Bash pętle w ifie?

Kod:

#!/bin/bash
clear; echo podaj j; read j clear;

if [ $j -eq 0 ]; then
`while true; do clear; echo; echo "                     PRZEBIEG $i                     "; echo; date; echo; acpi -b; echo; lscpu | grep "CPU M"; echo; sensors; sleep 1 done`
else
`for ((i=1; i<=j; i++)); do clear; echo; echo "                 PRZEBIEG $i z $j                        "; echo; date; echo; acpi -b; echo; lscpu | grep "CPU M"; echo; sensors; sleep 1; done`
fi

Zdaje się, że prosta rzecz. Podaję j np 5 i:

Kod:

./sns.sh: linia 12: $'\E[3;J\E[H\E[2J': nie znaleziono polecenia

Co zrobiłem źle?

Dopisek:
Póki co, to zrobiłem obejście, bo tam gdzie mam pętle for i whie to wrzuciłem je do oddzielnych plików odpowiednio nazwanych i ładuję je sobie poprzez source i działa. Ale pytanie pozostaje aktualne :D

Ostatnio edytowany przez Pavlo950 (2016-05-29 23:23:54)

Offline

 

#2  2016-05-29 23:49:12

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Bash pętle w ifie?

Po co zamykasz te pętle w backquotach?

Offline

 

#3  2016-05-30 07:19:48

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Bash pętle w ifie?

3036

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:20)

Offline

 

#4  2016-05-30 09:24:37

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Re: Bash pętle w ifie?

[quote=uzytkownikubunt]Jeśli robisz plik ze skryptem to rozpisz to na więcej, krótszych linii z wcięciami i bez tych `[/quote]
Szczerze? Nigdy bym nie pomyślał, że przez tak głupią błahostkę skrypt może nie działać.... Dzięki.

Offline

 

#5  2016-05-30 13:40:06

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Bash pętle w ifie?

to teraz zamiast bezmyślnie wstawiać różne fajne znaczki do skryptu coby ślicznie wyglądał zapoznaj się z Wielką Xięgą Proroka Manuala o bashu traktującą, ze szczególnym uwzględnieniem działu o operatorach wszelakich z backtickiem na czele.
jak wypełniasz pita i wstawisz przecinek w kwocie (bo ładniej) to też będzie drobna błahostka? skarbówce to powiesz?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#6  2016-05-30 19:44:19

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Re: Bash pętle w ifie?

Koncowo:

Kod:

#!/bin/bash
clear; echo ile przebiegow?; read ileprzebiegow; clear;

if [ $ileprzebiegow -eq 0 ];
        then
                for ((i=1; i=i; i++)); do clear; echo -e "\n            PRZEBIEG $i \n\n `date` \n\n `acpi -b` \n\n `lscpu | grep 'CPU M'` \n\n `sensors` \n\n `sudo hddtemp /dev/sda`"; sleep 1; done
        else
                for ((i=1; i<=ileprzebiegow; i++)); do clear; echo -e "\n               PRZEBIEG $i z $ileprzebiegow\n\n `date` \n\n `acpi -b` \n\n `lscpu | grep 'CPU M'` \n\n `sensors` \n\n `sudo hddtemp /dev/sda`"; sleep 1; $
fi

[quote=ethanak]to teraz zamiast bezmyślnie wstawiać różne fajne znaczki do skryptu coby ślicznie wyglądał zapoznaj się z Wielką Xięgą Proroka Manuala o bashu traktującą, ze szczególnym uwzględnieniem działu o operatorach wszelakich z backtickiem na czele.
jak wypełniasz pita i wstawisz przecinek w kwocie (bo ładniej) to też będzie drobna błahostka? skarbówce to powiesz?[/quote]
OK. A pita nie ja wypełnia, tylko daję to komuś innemu :D

Ostatnio edytowany przez Pavlo950 (2016-05-30 19:46:12)

Offline

 

#7  2016-05-30 21:25:37

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Bash pętle w ifie?

Dalej jakiś bezsens.
Brak łamania lini.
Nie zamknięta druga pętla.

Ostatnio edytowany przez arecki (2016-05-30 21:26:22)

Offline

 

#8  2016-05-30 22:39:03

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Bash pętle w ifie?

3038

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:23)

Offline

 

#9  2016-05-31 03:55:09

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Bash pętle w ifie?

A mi się powielenie kodu w ogóle nie podoba. Takoż sprzątanie pod dywan błędnie wprowadzanych danych poprzez typeset/declare.
Teoretycznie można by tak:

Kod:

#!/bin/bash

if [ -n "$1" ] ; then
    ile=$1
else
    echo -n "Ile przebiegów? "
    read ile
fi
re='^(0|[1-9][0-9]*)$'
[[ $ile =~ $re ]] || {
    echo "To nie jest liczba"
    exit 1
}

function przebieg {
    echo "Przebieg $1"
    #tu wszystkie acpi, sensorsy i inne
    echo "Coś robię"
    
    if [ $ile -eq 0 ] || [ $1 -lt $ile ] ; then
        sleep 1
    fi
}

clear

if [ $ile -eq 0 ]; then
    for ((li=1 ; ; li++)) ; do
        przebieg $li
    done
else
    for ((li = 1 ; li <= ile ; li++)) ; do
        przebieg $li
    done
fi

ale na dobrą sprawę dwie pętle też są brzydkie, a więc zrobimy z niej jedną:

Kod:

for ((li=1 ; ile == 0 || li <= ile; li++)) ; do
        przebieg $li
done

Jeszcze drobna uwaga.
Nie dopuszczam tu zapisu liczbowego rozpoczynającego się od zera - bash traktuje to jako zapis ósemkowy.
Oczywiście można inaczej - uprościć regexpa:

Kod:

re='^[0-9]+$'

i po sprawdzeniu czy jest to liczba wymusić konwersję dziesiętną:

Kod:

ile=((10#$ile))

Może być? :)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#10  2016-05-31 10:19:48

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Re: Bash pętle w ifie?

[quote=ethanak]Może być? :)[/quote]
Czemu nie - będę bawił się dalej :D

[quote=arecki]Dalej jakiś bezsens.
Brak łamania lini.
Nie zamknięta druga pętla.[/quote]
W tej jednej pętli tak ma być. O ile jedna musi być zamknięta, bo musi się skończyć np po 5 minutach, o tyle drugą sobie kiedyś wykorzystam, jak wrzucę do autostartu - a skąd ja będę wiedział, ile czasu będzie chodził włączony komp? XD

Offline

 

#11  2016-05-31 11:43:49

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Bash pętle w ifie?

[quote=Pavlo950]W tej jednej pętli tak ma być. O ile jedna musi być zamknięta, bo musi się skończyć np po 5 minutach, o tyle drugą sobie kiedyś wykorzystam, jak wrzucę do autostartu - a skąd ja będę wiedział, ile czasu będzie chodził włączony komp? XD[/quote]
Pierwsza pętla jest nieskończona.
[quote=Pavlo950]

Kod:

if [ $ileprzebiegow -eq 0 ];
        then
                for ((i=1; i=i; i++)); do ....; done

[/quote]
Reszty nie skomentuję bo argumenty z czapy.

Offline

 

#12  2016-05-31 13:15:14

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Bash pętle w ifie?

przecież z założenia ma być nieskończona!
pomijam bezsensowne wyrażenie.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#13  2016-05-31 13:35:24

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Bash pętle w ifie?

[quote=ethanak]przecież z założenia ma być nieskończona![/quote]
W jego założeniach ta zamknięta pętla ma się skończyć po 5 minutach, a w rzeczywistości jest nieskończona !
[quote=Pavlo950]... O ile jedna musi być zamknięta, bo musi się skończyć np po 5 minutach[/quote]
Widzisz teraz bezsens ? :D

Offline

 

#14  2016-05-31 13:41:28

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Bash pętle w ifie?

dalej nie wiem gdzie widzisz problem. jedna pętla się kończy po iluś tam przebiegach, druga nie. co ci przeszkadza? to że pavlo programistym nie jest i (jak sam twierdzi) nigdy nie będzie? czy może brak estetyki w skrypcie?
ciekawe do czego się doczepisz w mojej wersji...


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#15  2016-05-31 13:44:38

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Bash pętle w ifie?

Ja tu nie widzę w wątku aby autor twierdził, że nie jest programistą.
Widzę, za to herezje w stylu zamykania pętli w backquotach i późniejsze określanie tego błahostką.
Jakby na początku wątku określił, że się nie zna to nie byłoby tematu.

Offline

 

#16  2016-05-31 14:51:55

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Re: Bash pętle w ifie?

[quote=arecki]Ja tu nie widzę w wątku aby autor twierdził, że nie jest programistą.
Widzę, za to herezje w stylu zamykania pętli w backquotach i późniejsze określanie tego błahostką.
Jakby na początku wątku określił, że się nie zna to nie byłoby tematu.[/quote]
Powtórzę, nie jestem programistą i nie planuję być.

Offline

 

#17  2016-06-01 12:50:17

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Re: Bash pętle w ifie?

Wątek sobie chyba przemianuję na "moje problemy z bashem" XD

Kod:

for i in `find | grep -e jpg`; do
mv "$i" "`date +%y%m%d%H%M%S%N`.jpg";
done

Jak poradzić sobie z plikami ze spacją w nazwie?

Wiem, że można to zrobić inaczej, ale chodziło mi o powiedzmy jako taką numerację.

Dopisek:

Dobra, mam.
https://forum.dug.net.pl/viewtopic.php?id=10583

Kod:

find | grep -e jpg -e jpeg | while read i; do
mv "$i" "`date +%y%m%d%H%M%S%N`.jpg";
done

Ostatnio edytowany przez Pavlo950 (2016-06-01 13:13:36)

Offline

 

#18  2016-06-01 13:21:12

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Bash pętle w ifie?

można inaczej - przeczytać wreszcie mana od finda i użyć -exec.

ale po co czytać, lepiej pozawracać dupę na forum;)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)

[ Generated in 0.018 seconds, 12 queries executed ]

Informacje debugowania

Time (s) Query
0.00028 SET CHARSET latin2
0.00016 SET NAMES latin2
0.00167 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.137.175.224' WHERE u.id=1
0.00107 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.137.175.224', 1713463569)
0.00098 SELECT * FROM punbb_online WHERE logged<1713463269
0.00149 DELETE FROM punbb_online WHERE ident='47.128.35.235'
0.00129 DELETE FROM punbb_online WHERE ident='54.36.148.143'
0.00113 DELETE FROM punbb_online WHERE ident='54.36.148.164'
0.00117 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28666 AND t.moved_to IS NULL
0.00017 SELECT search_for, replace_with FROM punbb_censoring
0.00278 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28666 ORDER BY p.id LIMIT 0,25
0.00105 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28666
Total query time: 0.01324 s