Skip to content

Instantly share code, notes, and snippets.

@Snawoot
Created March 12, 2013 20:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Snawoot/5146540 to your computer and use it in GitHub Desktop.
Save Snawoot/5146540 to your computer and use it in GitHub Desktop.
#!/bin/sh
## не имеет большого смысла. классический шелл (или что его в системе заменяет не даёт никакой существенной экономии, только лишь проёбы производительности из-за того что в баше большинство важных команд являются встроенными, а в шелле - нет)
#cleanup 2
#Root needed
LOG_DIR=/var/log
ROOT_UID=0 # Only root had $UID 0
LINES=50 # Number of strings we save
E_XCD=66 # We cannot enter to the dir?
E_NOTROOT=67 # Not a root
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Для работы сценария требуются права root."
exit $E_NOTROOT
fi
E_WRONGARGS=65
case "$1" in
"" ) lines=50;;
*[!0-9]*) echo "Использование: `basename $0` [количество строк]"; exit $E_WRONGARGS;;
* ) lines=$1;;
esac
## с опциями принято работать через getopts. оно встроено в баш. http://habrahabr.ru/post/133860/
if [ -n "$1" ]
# Проверка наличия аргумента командной строки
## я бы лучше проверял, что это положительное число. от задачи, конечно, зависит
then
lines=$1
else
lines=$LINES # Значение по умолчанию, если не задано в кoмандной строке
fi
#cd $LOG_DIR
#if [ `pwd` != "$LOG_DIR" ] # или if [ "$PWD" != "$LOG_DIR" ]
#then
# echo "Невозможно перейти в каталог $LOG_DIR."
# exit $E_XCD
#fi
# более лучше:
## для этого случая есть встроенный [[ -d /dir ]]
cd $LOG_DIR || {
echo "Невозможно найти каталог." >$2
## может ты имел в виду >&2 ?
exit $E_XCD;
}
## в баше принято экранировать все подстановки, если не предполагается развёртывание переменной в несколько аргументов, иначе переменная $lines будет развёрнута, если содержит разделители. из-за этого вылезают противные косяки вплоть до выполнения того, что не нужно. то есть хорошо бы этому коду выглядеть так: tail -"$lines" messages > mesg.temp
tail -$lines messages > mesg.temp # сохранить последние строки в лог-файле
mv mesg.temp messages
echo "Лог-файлы очищены"
exit 0 # 0 - успешное завершение
## он итак выйдет с кодом последней команды, то есть с нулём в случае эхо
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment