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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.



 człowiek pasjonat :D
	#!/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:
./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



 Użytkownik
	



Po co zamykasz te pętle w backquotach?
Offline




 Zbanowany
	




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



 człowiek pasjonat :D
	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



 Użytkownik
	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?
Offline



 człowiek pasjonat :D
	Koncowo:
#!/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; $
fiethanak 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



 Użytkownik
	



Dalej jakiś bezsens.
Brak łamania lini.
Nie zamknięta druga pętla.
Ostatnio edytowany przez arecki (2016-05-30 21:26:22)
Offline




 Zbanowany
	




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



 Użytkownik
	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:
#!/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
fiale na dobrą sprawę dwie pętle też są brzydkie, a więc zrobimy z niej jedną:
for ((li=1 ; ile == 0 || li <= ile; li++)) ; do
        przebieg $li
doneJeszcze 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:
re='^[0-9]+$'
i po sprawdzeniu czy jest to liczba wymusić konwersję dziesiętną:
ile=((10#$ile))
Może być? :)
Offline



 człowiek pasjonat :D
	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



 Użytkownik
	



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



 Użytkownik
	


 Użytkownik
	



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



 Użytkownik
	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...
Offline



 Użytkownik
	



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



 człowiek pasjonat :D
	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



 człowiek pasjonat :D
	Wątek sobie chyba przemianuję na "moje problemy z bashem" XD
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
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



 Użytkownik
	można inaczej - przeczytać wreszcie mana od finda i użyć -exec.
ale po co czytać, lepiej pozawracać dupę na forum;)
Offline