URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6633
[ Назад ]

Исходное сообщение
"Присвоение переменной результата выполнения скрипта"

Отправлено animator , 27-Июл-07 14:12 
Добрый день.
Купил и читаю книгу редерика Смита "Полный справочник по FreeBSD".
Глава - Написание сценариев.

Там пример :

   iface='ifconfig | grep flags | cut -f 1 -d ":"'
   iface='echo $iface  | cut -f 1 -d " "'
   echo "$iface"

по книге должен выдать что-то типа  rl0 - например.

а выдает

   echo $iface | cut -f 1 -d " "

Подскажите где ошибка?


Содержание

Сообщения в этом обсуждении
"кавычки"
Отправлено pasha , 27-Июл-07 14:25 
>Подскажите где ошибка?
>   iface='echo $iface  | cut -f 1 -d "

по видимому на до было  писать так iface=`echo $iface  | cut -f 1 -d `
обратная одиночная кавычка а не прямая.


"кавычки"
Отправлено animator , 27-Июл-07 15:01 
>>Подскажите где ошибка?
>>   iface='echo $iface  | cut -f 1 -d "
>
>по видимому на до было  писать так iface=`echo $iface  |
>cut -f 1 -d `
>обратная одиночная кавычка а не прямая.

Спасибо!

Можно еще вопрос?

у меня в папке /var/mail - файлы с письмами пользователей.

Если этот файл сильно вырос я его руками обнуляю.

   /bin/cat /dev/null > /var/mail/user1
   /bin/cat /dev/null > /var/mail/user2 ... и т.д.

хотел написать скриптик для перебора всех файлов в папке о выполнения операции над каждым

Получилось что-то типа

#!/bin/sh
#
# тут я выделяю чистое имя пользователя user1, user2, ...
user=`/bin/ls -l /var/mail | grep mail | cut -f 4 -d " " `
/bin/cat /dev/null > /var/mail/$user
exit 0

так он мне создал файлы с длинными именами
А хотел просто выполнить над всеми файлами операцию

/bin/cat /dev/null > /var/mail/user1
/bin/cat /dev/null > /var/mail/user2 ...

Подскажите пожалуйста ...


"кавычки"
Отправлено Vlad , 27-Июл-07 16:55 
>[оверквотинг удален]
>
>так он мне создал файлы с длинными именами
>А хотел просто выполнить над всеми файлами операцию
>
>/bin/cat /dev/null > /var/mail/user1
>/bin/cat /dev/null > /var/mail/user2 ...
>
>Подскажите пожалуйста ...
>
>

Не очень понятно....что пользователи сами не могут стереть почту?

Обнулить файл можно через: "echo > filename"
или же стереть и создать файл заново (но здесь проблема, нужно определить права пользователей на файл):
"rm /var/mail/user1"
"touch /var/mail/user1"
"chown user1:user1 /var/mail/user1"


"кавычки"
Отправлено animator , 27-Июл-07 17:00 
>[оверквотинг удален]
>>
>
>Не очень понятно....что пользователи сами не могут стереть почту?
>
>Обнулить файл можно через: "echo > filename"
>или же стереть и создать файл заново (но здесь проблема, нужно определить
>права пользователей на файл):
>"rm /var/mail/user1"
>"touch /var/mail/user1"
>"chown user1:user1 /var/mail/user1"

Да просто это майловый сервер.
Ящик user1 на отдел  - user1.
Все хотят копировать почту из ящика, а удалять не хотят.
Так мне приходится принудительно обнулять, в субботу например, все ящики всех отделов.



"кавычки"
Отправлено Mikhail , 27-Июл-07 18:53 
cd /var/mail/; for i in `ls`; do /bin/cat /dev/null > /var/mail/$i; done

- смысл, думается, понятен. могут потребоваться доп. фильтры и проверки.


"кавычки"
Отправлено L0n3R4ng3r , 31-Июл-07 17:47 
>[оверквотинг удален]
>
>так он мне создал файлы с длинными именами
>А хотел просто выполнить над всеми файлами операцию
>
>/bin/cat /dev/null > /var/mail/user1
>/bin/cat /dev/null > /var/mail/user2 ...
>
>Подскажите пожалуйста ...
>
>

cd /var/mail && for i in `ls -l |grep ^- | awk -F " " '{print $9}'`; do echo > $i ; done;


"Присвоение переменной результата выполнения скрипта"
Отправлено elvenic , 27-Июл-07 18:30 

>   iface='ifconfig | grep flags | cut -f 1 -d ":"'
>   iface='echo $iface  | cut -f 1 -d " "'
>   echo "$iface"

Нужно использовать "обратные одиночные кавычки" (`) вместо прямыx ('):

iface=`ifconfig | grep flags | cut -f 1 -d ":"`
iface=`echo $iface  | cut -f 1 -d " "`

Различие между ", ' и `:
Использование (') - это строка символов где не подставлются переменные;
использование (") - это строка символов где подставлются переменные;
а вот использование (`) - это вызов команды которой является строка, и стандартный вывод этой команды будет результируюшим значением (т.е, е нащем случае, то что присвоится переменной iface)


"Присвоение переменной результата выполнения скрипта"
Отправлено anonymous , 27-Июл-07 23:32 
>Нужно использовать "обратные одиночные кавычки" (`) вместо прямыx ('):

А ещё лучше использовать $()

iface=$(ifconfig | grep flags | cut -f 1 -d ":")
iface=$(echo $iface  | cut -f 1 -d " ")