echo "vvedite gruppu: "
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a` #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
echo "date $P"
done
Помогите написать shell-процедуру
Надо для каждого пользователя вывести сообщение
Код:
У меня получается: выводится сообщение для первого пользователя, а для остальных только их логин.
Я не совсем понял, что делает твой скрипт, но попробуй поставить вместо
Код:
echo "date $P"
Код:
echo "date [$p]"
И скорее всего получится
Код:
date [user1
user2
user3]
user2
user3]
Можно попробовать сделать так:
Код:
:
echo -n "Введите группу: "
read a
case "$a" in
[0-9]*);;
*) gid=$(grep "^$a:" /etc/group | cut -f3 -d:)
if [ -z "$gid" ]; then
echo "Нет такой группы '$a'" 1>&2
exit 1
fi
a=$gid
;;
esac
if [ "$a" != "" ];
then
# for i in $(awk -v group="$a" 'BEGIN{ FS=":"; } { if ($4==group) {print $1;} }' < /etc/passwd); do
# echo "date $i"
# done
IFS=":"
while read user passwd uid gid gecos home shell
do
[ "$gid" = "$a" ] || continue
echo "user=$user uid=$uid gid=$gid gecos=$gecos home=$home shell=$shell"
done < /etc/passwd
fi
echo -n "Введите группу: "
read a
case "$a" in
[0-9]*);;
*) gid=$(grep "^$a:" /etc/group | cut -f3 -d:)
if [ -z "$gid" ]; then
echo "Нет такой группы '$a'" 1>&2
exit 1
fi
a=$gid
;;
esac
if [ "$a" != "" ];
then
# for i in $(awk -v group="$a" 'BEGIN{ FS=":"; } { if ($4==group) {print $1;} }' < /etc/passwd); do
# echo "date $i"
# done
IFS=":"
while read user passwd uid gid gecos home shell
do
[ "$gid" = "$a" ] || continue
echo "user=$user uid=$uid gid=$gid gecos=$gecos home=$home shell=$shell"
done < /etc/passwd
fi
В качестве бонуса можно вводить и номер группы, и имя группы.
Код:
echo "vvedite gruppu: "
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a` #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
echo "date $P"
done
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a` #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
echo "date $P"
done
Должно получиться так:
date "user1"
date "user2"
date "user3"
date "user4"
и т. д.
у меня получается щас так:
date "user1"
user2
user3
user4
и т. д.
Цитата: Panchos111
Код:
echo "vvedite gruppu: "
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a` #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
echo "date $P"
done
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a` #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
echo "date $P"
done
у вас вообще очень странный код. во-первых какую ГРУППУ вы ищите в /etc/passwd? второе - зачем нужен промежуточный файл news?
третье - что это за поле вы выбираете по разделителю /?
в четвертых - что у вас лежит в $*?
вы бы четко задание сформулировали... чтобы вывести для каждого пользователя то, что вы написали
Цитата:
date "user1"
date "user2"
date "user3"
date "user4"
date "user2"
date "user3"
date "user4"
достаточно сделать:
[highlight=bash]
for USER in `cat /etc/passwd | cut -f1 -d:`
do
echo "date ${USER}"
done
[/highlight]
Есть ли в shell команды которые вырезают или удаляут символы в параметре? Типа len или mid. Приведите пож пример
[highlight=bash]
echo abc | sed s/a/1/
1bc
[/highlight]
[highlight=bash]
echo "abcdf3rsdfasdf3fsafd123100abc" | tr -d [:digit:]
abcdfrsdfasdffsafdabc
[/highlight]
смысл я думаю ясен, остальное см. в соответствующих man pages
Спасибо, разобрался))))
вычисляет значение арифметического выражения, заданного первыми пятью
параметрами;
сравнивает полученное значение с числом, заданным вторым параметром;
при совпадении результатов сравнения выводит на экран заданное выражение и его
значение.
естественно не за спасибо)