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?

uzytkownikubunt napisał(-a):

Jeśli robisz plik ze skryptem to rozpisz to na więcej, krótszych linii z wcięciami i bez tych `

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!
Zespół Adwokacki Dyskrecja

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

ethanak napisał(-a):

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?

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!
Zespół Adwokacki Dyskrecja

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?

ethanak napisał(-a):

Może być? :)

Czemu nie - będę bawił się dalej :D

arecki napisał(-a):

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

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?

Pavlo950 napisał(-a):

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

Pierwsza pętla jest nieskończona.

Pavlo950 napisał(-a):

Kod:

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

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!
Zespół Adwokacki Dyskrecja

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?

ethanak napisał(-a):

przecież z założenia ma być nieskończona!

W jego założeniach ta zamknięta pętla ma się skończyć po 5 minutach, a w rzeczywistości jest nieskończona !

Pavlo950 napisał(-a):

... O ile jedna musi być zamknięta, bo musi się skończyć np po 5 minutach

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!
Zespół Adwokacki Dyskrecja

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?

arecki napisał(-a):

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.

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!
Zespół Adwokacki Dyskrecja

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)