Автор Тема: Отпимизация Bash-скриптов  (Прочитано 1080 раз)

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

Оффлайн Zerocool

  • Свирепый и кровожадный черепах
  • Старейшина
  • Общительный человек
  • *****
  • Сообщений: 1 503
  • Карма: 19
  • Пол: Мужской
  • ArchLinux User
    • Торрент-Трекер для Волгателеком Оренбург
Отпимизация Bash-скриптов
« : 19 Августа 2013, 12:05:29 »
Собсна, есть у меня три скриптика связанных, они маленькие, и делают всего пару вещей, но мне, как и большинству линуксоидов, всё время кажется, что их можно было бы сделать лучше (эдакий перфекционизм)

Так что, комрады, мб кто поможет мне их оптимизировать, ибо они монструозны и костыльны ...
Итак, суть и последовательность действий
Некая софтина вызывает скрипт sendsms.sh, передавая в него номер телефона через +7 и строку с несколькими словами, который сверяет время и, если время позднее, сохраняет переданную ему пачку слов в файл, если же время нормальное, то вызывает скрипт sender.sh
Выглядит скрипт sendsms.sh так
Код: (sendsms.sh) [Выделить]
#!/bin/bash
datesec=`/bin/date +%s`
hour=`/bin/date +%H`
if (( $hour < 8 || $hour > 22 )); then
 echo ${*##+*} > /tmp/sendsms/messages/$1.$datesec
else
 /tmp/sendsms/sender.sh $1 ${*##+*}
fi

Код: (sender.sh) [Выделить]
#!/bin/bash
#Sleep, until running another sender process
while [ -f /tmp/sendsms ]; do sleep 10
done
text=`echo ${*##+*}|sed 's/^[ \t]*//'`
echo $text
#Create run flag
/usr/bin/touch /tmp/sendsms
#Message mode
/bin/echo -e "AT+CMGF=1\n"> /dev/ttyS0
sleep 2
#Phone number
/bin/echo -e "AT+CMGS=$1\n"> /dev/ttyS0
sleep 2
#Text
/bin/echo -e "$text\032\n"> /dev/ttyS0
sleep 2
#Remote run flag
/bin/rm -f /tmp/sendsms

Ну и по крону в 8 утра происходит считывание всех файликов, и оправка их скриптом defsms.sh
Код: (defsms.sh) [Выделить]
#!/bin/bash
#Count the messages. If no messages - exit
PWD=/tmp/sendsms
count=`/usr/bin/find $PWD/messages/ -type f|/usr/bin/wc -l`
if [ $count != 0 ]; then
#Create list of files (костыль)
`/bin/ls -1 $PWD/messages/ > /tmp/filelist`
index=0
while read line; do
 #Send current message
 $PWD/sender.sh  ${line%.*} $(< $PWD/messages/$line)
 #Remove sended message
 /bin/rm  $PWD/messages/$line
done < /tmp/filelist
fi

P.S> не надо предлагать переписать это на си или чём-либо другом, скрипт был на bash, и на нём должен остаться
Если есть варианты, как оптимизировать сиекостылестроение, прошу скинуть варианты :)
Все, что мне нужно - это теплая постель, доброе слово и неограниченная власть...
Я неадекватен по определению, так что не ждите, что я буду себя хорошо вести ;)