Created
March 12, 2013 20:09
-
-
Save Snawoot/5146540 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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