Отправка длинных сообщений

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

$ ./senderscript likegeeks welcome to shell scripting

Попытка отправки длинного сообщения

Как видно, отправлено было лишь первое слово. Всё дело в том, что каждое слово сообщения воспринимается внутри скрипта как отдельная позиционная переменная. Для того, чтобы получить возможность отправки длинных сообщений, обработаем параметры командной строки, переданные сценарию, воспользовавшись командой shift и циклом while.

shift

while [ -n "$1" ]

do

whole_message=$whole_message' '$1

shift

done

После этого, в команде отправки сообщения, воспользуемся, вместо применяемой ранее позиционной переменной $2, переменной whole_message:

echo $whole_message | write $logged_on $terminal

Вот полный текст сценария:

#!/bin/bash

logged_on=$(who | grep -i -m 1 $1 | awk '{print $1}')

if [ -z $logged_on ]

then

echo "$1 is not logged on."

echo "Exit"

exit

fi

allowed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')

if [ $allowed != "+" ]

then

echo "$1 does not allowing messaging."

echo "Exit"

exit

fi

if [ -z $2 ]

then

echo "No message parameter included."

echo "Exit"

exit

fi

terminal=$(who | grep -i -m 1 $1 | awk '{print $2}')

shift

while [ -n "$1" ]

do

whole_message=$whole_message' '$1

shift

done

echo $whole_message | write $logged_on $terminal

Испытаем его:

$ ./senderscript likegeeks welcome to shell scripting

Успешная отправка длинного сообщения:

Длинное сообщение успешно дошло до адресата.

Теперь рассмотрим следующий пример.

Больше книг — больше знаний!

Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом

ПОЛУЧИТЬ СКИДКУ