
Как не трудно догадаться, перед вами моя собственная небольшая коллекция шелл-скриптов. Маленьких, но очень необходимых и весьма приятных вещей. Скрипты тестируются на Ubuntu Desktop (или Debian), CentOS или FreeBSD, в зависимости от целей конкретного скрипта. Разберетесь ;-)
Сохраняем не вывод, а его размер. Заметим только если он изменился. Иначе будут тревожить изменения даты (last DB update и т.д.). Правда и другие изменения в датах (paid-till и т.д.) тоже не увидим.
#!/bin/sh
# Copyright (c) 2006 Mihail Fedorov, http://mihailfedorov.ru
# $ ./whois.sh domain.tld whois.server.tld e@mail.ru
# change this
WORKDIR="/home/kolo/whoistory"
# thanks
NEWFILE="$WORKDIR/$1.$2"
OLDFILE="$WORKDIR/$1.$2.old"
mv $NEWFILE $OLDFILE 2> /dev/null
whois -h $2 $1 > $NEWFILE 2> /dev/null
oldsize=$(ls -l "$OLDFILE" 2> /dev/null | awk '{print $5}')
newsize=$(ls -l "$NEWFILE" | awk '{print $5}')
if [ "$oldsize" != "$newsize" ]; then
cat $NEWFILE | mail -s "[Whoistory] $1 updated!" $3
fi
Недавно нашел наконец времени, чтоб заставить его работать по базе-текстовику и быть лояльнее к ошибкам.
#!/bin/sh # Copyright (c) 2006-2010 Mihail Fedorov, http://mihailfedorov.ru # $ ./whois2.sh # DB file format: # domain.ru|whois.ripn.net|e@mail.ru| # domain.tel|whois.nic.tel|other@ema.il| # change this WORKDIR="/home/kolo/bots/whois" FILE="/home/kolo/bots/whois.db.txt" FS="|" # thanks while read line do # warZ DOMAIN=$(echo $line|cut -d$FS -f1) SERVER=$(echo $line|cut -d$FS -f2) MAIL=$(echo $line|cut -d$FS -f3) NEWFILE="$WORKDIR/$DOMAIN.$SERVER.$MAIL" OLDFILE="$WORKDIR/$DOMAIN.$SERVER.$MAIL.old" touch $NEWFILE mv $NEWFILE $OLDFILE 2> /dev/null whois -H -h $SERVER $DOMAIN > $NEWFILE 2> /dev/null oldsize=$(stat -c %s "$OLDFILE" 2> /dev/null) newsize=$(stat -c %s "$NEWFILE") if [ "$oldsize" != "$newsize" ] && [ -s $NEWFILE ] ; then cat /home/kolo/bots/before.txt $OLDFILE /home/kolo/bots/after.txt $NEWFILE | mail -s "[Whois2] $DOMAIN updated" $MAIL # here comes also notifying via Nabaztag API. # you don't need this ;) # but you can add SMS/Jabber/ICQ else mv $OLDFILE $NEWFILE 2> /dev/null fi done < $FILE
#!/bin/sh
AP=$(iwconfig wlan1 | grep 'ESSID:' | awk '{print $4}' | sed 's/ESSID://g' | sed 's/"//g')
echo $AP
Авторство принадлежит неизвестному с .
#!/bin/bash KUKU=`/bin/date +%I` while [ $KUKU -gt 0 ]; do cat /home/kolo/kuku.wav > /dev/dsp sleep 1 KUKU=$((KUKU-1)) done
Большинство новичков в первую очередь ищут именно этот скрипт…
#!/bin/bash x=0 for fname in *.jpg do mv $fname `printf "%s.jpg" $x` x=$(($x+1)) done
Даже слишком простенький backend для мониторинга серверов. Со своей задачей справляется, хотя можно еще много разного и умного накрутить. Идея держать "всегда доступную" информацию через inetd хороша, но в моей задаче не пригодилась.
#!/bin/sh # Copyright (c) 2008 Mihail Fedorov, http://mihailfedorov.ru # Severs Monitoring Backend v 0.1 PASS="god" # Pssssswd ;) PASSMD=`echo $PASS|md5` SERVER=`hostname` OS=`uname -a` RUNNING=`uptime` CODE="::$SERVER::$OS::$RUNNING::" CODE64=`echo $CODE|base64` # Passive way (example) - put this in inetd to some strange port # echo $CODE64 # Active way - report via crontab to frontend wget -O /dev/null -q "http://domain.tld/monitoring/frontend.php?p=$PASSMD&info=$CODE64"
Скрипт для отправки в спячку/побудки . Помимо работы из крона, так же, очень часто, бывает нужно отправить его в спячку немедленно. Для этого у меня в GNOME на панельке есть кнопка запускающая скрипт. Удобно, ага.
#!/bin/sh # XXXXX - serial number (mac) # YYYYY - token if [ -e "sleeping" ]; then wget -q -O /dev/null "http://api.nabaztag.com/vl/FR/api.jsp?sn=XXXXX&token=YYYYY&action=14" rm -f sleeping else wget -q -O /dev/null "http://api.nabaztag.com/vl/FR/api.jsp?sn=XXXXX&token=YYYYY&action=13" touch sleeping fi
Я страюсь уважать авторское право людей, написавших эти скрипты. В начале каждого указан автор (если он сам себя указал) и краткая лицензия. Уважайте и вы это.
Просто сайты имеют свойство умирать, а источники теряться. Если Вам вдруг нужен будет автор — проверьте имя автора в .