Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Как устранить несоответствие типов в shell?  (Прочитано 2424 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн maskimko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
есть скрипт:
#!/bin/sh
#This is a program for traffic logging
traftrans()
{
kbn=1024
mbn=`expr $kbn * 1024`
#gbn=`expr $mbn * 1024`
echo $traffic | grep "[^0-9]" > /dev/null 2>&1
if [ "$?" -eq "0" ]; then
echo "$traffic in not number"
fi
#if [ "$traffic" -le "$kbn" ]
#then
# trnf=`expr $traffic / $kbn`
# trafshow = "$trnf Kb"
#fi
#if [ "$traffic" -le "$mbn" ]
#then
# trnf=`expr $traffic / $mbn`
# trafshow = "$trnf Mb"
#fi
#if [ "$traffic" -le "$gbn" ]
#then
# trnf=`expr $traffic / $gbn`
# trafshow = "$trnf Gb"
#fi
}
lines=`cat /etc/ppp/chap-secrets | wc -l`
i=2
while [ "$i" -le "$lines" ]
do
login=`cat /etc/ppp/chap-secrets | head -n $i | tail -n 1 | awk '{ print $1 }'`
traffic=`iptables -L $login -v -x | grep RETURN | awk '{ print $2 }'`
echo "$login has $traffic of traffic."
traftrans
echo "$trafshow"
i=`expr $i + 1`
done
traffic=`iptables -L room -v | grep RETURN | awk '{ print $2 }'`
echo "room has $traffic of traffic."
echo "You have $lines users."

и ошибка
expr: syntax error
а если еще и условия раскоментить
то пишет что ожидается переменная integer.

Как же это все уладить.


Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #1 : 13 Апреля 2010, 10:46:54 »
Вставьте перед expr
echo $i
для понимания проблемы.
Дэвид Тинсли рекомендует для устранения таких проблем выполнять эту операцию с пересылкой в /dev/null
и затем проанализировать результат $?
Если все ок, то выполнить.
« Последнее редактирование: 13 Апреля 2010, 10:56:32 от alexander.pronin »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #2 : 13 Апреля 2010, 11:03:46 »
Похоже, kbn считается строкой, а не числом.
Попробуйте
let kbn=1024
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн maskimko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #3 : 13 Апреля 2010, 15:19:14 »
Вот новый текст программы и навая ошибка ???
#!/bin/sh
#This is a program for traffic logging
traftrans()
{
let kbn=1024
mbn=`expr $kbn * 1024`
gbn=`expr $mbn * 1024`
echo $traffic | grep "[^0-9]" > /dev/null 2>&1
if [ "$?" -eq "0" ]; then
echo "$traffic in not number"
fi
if [ "$traffic" -le "$kbn" ]
then
trnf=`expr $traffic / $kbn`
trafshow = "$trnf Kb"
fi
if [ "$traffic" -le "$mbn" ]
then
trnf=`expr $traffic / $mbn`
trafshow = "$trnf Mb"
fi
if [ "$traffic" -le "$gbn" ]
then
trnf=`expr $traffic / $gbn`
trafshow = "$trnf Gb"
fi
}

lines=`cat /etc/ppp/chap-secrets | wc -l`
let i=2
while [ "$i" -le "$lines" ]
do
login=`cat /etc/ppp/chap-secrets | head -n $i | tail -n 1 | awk '{ print $1 }'`
traffic=`iptables -L $login -v -x | grep RETURN | awk '{ print $2 }'`
echo "$login has $traffic of traffic."
traftrans
echo "$trafshow"
i=`expr $i + 1`
done
traffic=`iptables -L room -v | grep RETURN | awk '{ print $2 }'`
echo "room has $traffic of traffic."
echo "You have $lines users."

./counter: 30: let: not found
[: 39: Illegal number:
room has 40M of traffic.
You have 22 users.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #4 : 13 Апреля 2010, 15:24:23 »
У Вас лог жалуется на запись
let i=2
Он не знает, что такое let.
Я тоже не знаю. :idiot2:
М.б. просто
i=2
« Последнее редактирование: 13 Апреля 2010, 15:27:05 от alexander.pronin »

Оффлайн maskimko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #5 : 13 Апреля 2010, 15:29:22 »
Похоже, kbn считается строкой, а не числом.
Попробуйте
let kbn=1024

Так это я wl послушал...

Пользователь решил продолжить мысль 13 Апреля 2010, 15:32:13:
если let убрать то вот что имеем
homeserver has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

suseserver has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

maskimko has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

olya has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

den has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

rexman has 7710600 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

gon4ar has 25448786 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

vitalik1002 has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

igor has 5427385 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

stormelius has 9433 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

sveta has 6815634 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

komnata has 5188864 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

salatika has 5933 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

ylenka has 283614 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

solomaha has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

tolik has 4894820 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

donbassik has 0 of traffic.
expr: syntax error
expr: syntax error
./counter: 39: trafshow: not found
[: 39: Illegal number:
[: 39: Illegal number:

leno_Ok has 8230256 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

kesha has 14900651 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

losos has 5352265 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

lena has 1314135 of traffic.
expr: syntax error
expr: syntax error
[: 39: Illegal number:
[: 39: Illegal number:

room has 41M of traffic.
You have 22 users.
« Последнее редактирование: 13 Апреля 2010, 15:32:13 от maskimko »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #6 : 13 Апреля 2010, 15:32:34 »
Это из других фенек, друг Горацио. ;D
Может tcl.
« Последнее редактирование: 13 Апреля 2010, 15:48:44 от alexander.pronin »

Оффлайн maskimko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #7 : 13 Апреля 2010, 15:33:24 »
Особенно смущает: expr: syntax error

Оффлайн RandomNT

  • Любитель
  • *
  • Сообщений: 80
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #8 : 13 Апреля 2010, 15:36:57 »
Звездочку надо заэскейпить
mbn=`expr $kbn * 1024`

Пользователь решил продолжить мысль 13 Апреля 2010, 15:37:37:
она заменяется на список файлов в текущей папке

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #9 : 13 Апреля 2010, 15:42:34 »
Выполнил в терминале. Все съело и не подавилось.
al@ubuntu-desktop1:~$ i=1
al@ubuntu-desktop1:~$ echo $i
1
al@ubuntu-desktop1:~$ i=`expr $i + 1`
al@ubuntu-desktop1:~$ echo $i
2
al@ubuntu-desktop1:~$

Оффлайн maskimko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #10 : 13 Апреля 2010, 17:40:56 »
Звездочку надо заэскейпить
mbn=`expr $kbn * 1024`

Пользователь решил продолжить мысль 13 Апреля 2010, 15:37:37:
она заменяется на список файлов в текущей папке

А как ее ескейпить  в таком выражении?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #11 : 13 Апреля 2010, 17:59:39 »
У Вас лог жалуется на запись
let i=2
Он не знает, что такое let.
Я тоже не знаю. :idiot2:
М.б. просто
i=2

Надо учить матчасть.
http://ss64.com/bash/let.html

Либо let, либо expr

А звездочку можно взять в апострофы.
$ h=6
$ expr $h '*' 5
30
« Последнее редактирование: 13 Апреля 2010, 18:05:31 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн RandomNT

  • Любитель
  • *
  • Сообщений: 80
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #12 : 13 Апреля 2010, 18:05:43 »
Недописал что-то месажку, обратный слеш перед ней поставить хотел
mbn=`expr $kbn \* 1024`

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #13 : 13 Апреля 2010, 18:07:03 »
А еще надо бы trafshow поставить.

Цитировать
./counter: 39: trafshow: not found
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
Re: Как устранить несоответствие типов в shell?
« Ответ #14 : 13 Апреля 2010, 18:48:12 »
А если запускать не через sh, а через bash?

 

Страница сгенерирована за 0.064 секунд. Запросов: 25.