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