PDA

Bekijk de volledige versie : Помогите написать скрипт



Cd_spb
19-09-2008, 21:29
Доброго времени.
Помогите, пожалуйста, написать скрипт.
Не могу понять как нужно эскейпить параметры(это моя персая попытка писать скрипты под линухом)


[admin@dtr_rout root]$ cat /opt/etc/cron.5mins/tr_load.sh
#!/bin/sh

load=`/bin/cat /proc/loadavg | /opt/bin/awk '{print $1}'`
time=`/bin/date | /opt/bin/awk '{print $2 " " $3 " " $4}'`
ntorrents=`/opt/bin/transmission-remote -l | /bin/grep -c ''`
i=1
while [ ${i} -lt $ntorrents ]; do
/bin/echo "${i}";
# tt="/opt/bin/transmission-remote -l | /bin/grep '^ ${i}' | /opt/bin/awk '{print \$4}'"
tt="/opt/bin/transmission-remote -l | /bin/grep '^ '"
/bin/echo "${tt}"
ttt=`${tt}`
/bin/echo "${ttt}"
let i=i+1;
done;
/opt/bin/transmission-remote -l | /bin/grep '^ 1' | /opt/bin/awk '{print "\t" $4 "\t" $5 "\t" $8}' >> /opt/var/log/load.log
/opt/bin/transmission-remote -l | /bin/grep '^ 2' | /opt/bin/awk '{print "\t" $4 "\t" $5 "\t" $8}' >> /opt/var/log/load.log
/bin/echo "${time}" "LOAD" "${load}" >> /opt/var/log/load.log
[admin@dtr_rout root]$ /opt/etc/cron.5mins/tr_load.sh
1
/opt/bin/transmission-remote -l | /bin/grep '^ '
Unknown option: |
Unknown option: /bin/grep
Unknown option: '^
Unknown option: '
ID Done ETA Up Down Ratio Status Name
1 100% Done 0.0 0.0 0.0 Stopped TraumLib2
2 100% Done 0.0 0.0 185.9 Stopped NarutoRip
2
/opt/bin/transmission-remote -l | /bin/grep '^ '
Unknown option: |
Unknown option: /bin/grep
Unknown option: '^
Unknown option: '
ID Done ETA Up Down Ratio Status Name
1 100% Done 0.0 0.0 0.0 Stopped TraumLib2
2 100% Done 0.0 0.0 185.9 Stopped NarutoRip
[admin@dtr_rout root]$ /opt/bin/transmission-remote -l | /bin/grep '^ '
1 100% Done 0.0 0.0 0.0 Stopped TraumLib2
2 100% Done 0.0 0.0 185.9 Stopped NarutoRip

al37919
19-09-2008, 21:54
а если так?:
tt=`/opt/bin/transmission-remote -l | /bin/grep '^ '`
или
tt=$(/opt/bin/transmission-remote -l | /bin/grep '^ ')

Cd_spb
20-09-2008, 05:52
а если так?:
tt=`/opt/bin/transmission-remote -l | /bin/grep '^ '`
или
tt=$(/opt/bin/transmission-remote -l | /bin/grep '^ ')
Это запросы на выполнение.
После их выполнения в tt записан "ответ", не команда. :-(

al37919
20-09-2008, 06:41
да, точно. А \' не помогает?

Cd_spb
20-09-2008, 18:51
Если честно, тоя не совсем понимаю, но у меня получилось.


[admin@dtr_rout root]$ vi /opt/etc/cron.5mins/tr_load.sh
#!/bin/sh

load=`/bin/cat /proc/loadavg | /opt/bin/awk '{print $1}'`
time=`/bin/date | /opt/bin/awk '{print $2 " " $3 " " $4}'`
ntorrents=`/opt/bin/transmission-remote -l | /bin/grep -c ''`
i=1
while [ ${i} -lt $ntorrents ]; do
/bin/echo "${i}";
tt=`/opt/bin/transmission-remote -l | /bin/grep "^ $i" | /opt/bin/awk '{print \$8}')`
/bin/echo "$tt"
let i=i+1;
done;
/opt/bin/transmission-remote -l | /bin/grep '^ 1' | /opt/bin/awk '{print "\t" $4 "\t" $5 "\t" $8}' >> /opt/var/log/load.log
/opt/bin/transmission-remote -l | /bin/grep '^ 2' | /opt/bin/awk '{print "\t" $4 "\t" $5 "\t" $8}' >> /opt/var/log/load.log
/bin/echo "${time}" "LOAD" "${load}" >> /opt/var/log/load.log

[admin@dtr_rout root]$ /opt/etc/cron.5mins/tr_load.sh
1
TraumLib2
2
NarutoRip


В выделеной строке обратите внимание на апостроф(`), одинарные кавычки('), двойные кавычки (") и обратный слеш(\) перед $.
Для сравнения


[admin@dtr_rout root]$ /opt/bin/transmission-remote -l | /bin/grep "^ 1" | /opt/bin/awk '{print $8}'
TraumLib2


http://www.opennet.ru/docs/RUS/bash_scripting_guide/