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/.
#!/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
Po co zamykasz te pętle w backquotach?
Offline
3036
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:20)
Offline
[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
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
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; $ 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
Dalej jakiś bezsens.
Brak łamania lini.
Nie zamknięta druga pętla.
Ostatnio edytowany przez arecki (2016-05-30 21:26:22)
Offline
3038
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:23)
Offline
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 fi
ale 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 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:
re='^[0-9]+$'
i po sprawdzeniu czy jest to liczba wymusić konwersję dziesiętną:
ile=((10#$ile))
Może być? :)
Offline
[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
[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]
if [ $ileprzebiegow -eq 0 ]; then for ((i=1; i=i; i++)); do ....; done
[/quote]
Reszty nie skomentuję bo argumenty z czapy.
Offline
[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
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
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
[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
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
można inaczej - przeczytać wreszcie mana od finda i użyć -exec.
ale po co czytać, lepiej pozawracać dupę na forum;)
Offline
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00006 | SET NAMES latin2 |
0.00141 | 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.185.180' WHERE u.id=1 |
0.00096 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.137.185.180', 1713854252) |
0.00052 | SELECT * FROM punbb_online WHERE logged<1713853952 |
0.00071 | DELETE FROM punbb_online WHERE ident='3.141.24.134' |
0.00063 | DELETE FROM punbb_online WHERE ident='47.128.116.142' |
0.00079 | DELETE FROM punbb_online WHERE ident='47.128.21.68' |
0.00077 | DELETE FROM punbb_online WHERE ident='85.208.96.205' |
0.00069 | SELECT topic_id FROM punbb_posts WHERE id=302043 |
0.00109 | SELECT id FROM punbb_posts WHERE topic_id=28666 ORDER BY posted |
0.00059 | 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.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00092 | 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.00090 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28666 |
Total query time: 0.01024 s |