- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−352
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
example usage:
./sleepsort.bash 5 3 6 3 6 3 1 4 7
Метод сортировки :)
Взято с:
http://dis.4chan.org/read/prog/1295544154
−127
type="${(@j::M)${(@)tmp#-}#?}"
if (( $tmp[(I)-g*] )); then
glob="${${${${(@M)tmp:#-g*}#-g}##[[:blank:]]#}%%[[:blank:]]#}"
[[ "$glob" = *[^\\][[:blank:]]* ]] &&
glob="{${glob//(#b)([^\\])[[:blank:]]##/${match[1]},}}"
# add `#q' to the beginning of any glob qualifier if not there already
[[ "$glob" = (#b)(*\()([^\|\~]##\)) && $match[2] != \#q* ]] &&
glob="${match[1]}#q${match[2]}"
fi
zsh, избранное из _files: остальное чуть лучше.
Зато... хм, портабельно (в смысле между не оболочками, а платформами).
−130
Request() {
Info "Добро пожаловать в VKSearch $sys_version!"
Info "Загрузка списка треков..."
vkapi_signature=$(echo -n "${vkapi_id}api_id=1696393count=${cfg_search_count}method=audio.searchq=${query}test_mode=1v=2.0${vkapi_secret}"|md5sum|awk '{print $1}')
wget "http://api.vkontakte.ru/api.php?api_id=1696393&count=${cfg_search_count}&v=2.0&method=audio.search&sig=${vkapi_signature}&test_mode=1&q=$query" -qO "${sys_temp}/vksearch.out"
found=$(cat ${sys_temp}/vksearch.out | sed -ne 's,<count>\([^<]*\)</count>,\1,p'|sed 's/^[ \t]*//')
error_msg="$(cat ${sys_temp}/vksearch.out | sed -n 's|<error_msg>\(.*\)</error_msg>|\1|p'|sed 's/^[ \t]*//'|head -n1 )"
error_code="$(cat ${sys_temp}/vksearch.out | sed -n 's|<error_code>\(.*\)</error_code>|\1|p'|sed 's/^[ \t]*//'|head -n1)"
[ -n "$error_msg" ] && Info "Ошибка: $error_msg (Код $error_code)" die
song_count=$(cat ${sys_temp}/vksearch.out | grep '<url>'|wc -l )
[ $song_count -eq 0 ] && Info "По запросу ${query} не найдено ни одного трека..." die || Info "По запросу ${query} найдено ${found} композиций. Обработка первых ${song_count}."
}
Parse() {
OLD_IFS=$IFS
IFS=$'\n'
song_urls=( `cat ${sys_temp}/vksearch.out | sed -n 's|<url>\(.*\)</url>|\1|p'|sed 's/^[ \t]*//' ` )
song_artists=( `cat ${sys_temp}/vksearch.out | sed -n 's|<artist>\(.*\)</artist>|\1|p'|sed 's/^[ \t]*//' ` )
song_titles=( `cat ${sys_temp}/vksearch.out | sed -n 's|<title>\(.*\)</title>|\1|p'|sed 's/^ //' ` )
song_durations=( `cat ${sys_temp}/vksearch.out |sed -n 's|<duration>\(.*\)</duration>|\1|p'|sed 's/^[ \t]*//' ` )
song_counts=$(( ${#song_urls[@]} - 1 ))
IFS=$OLD_IFS
}
RemoveDoubles() {
rm ${sys_temp}/vksearch.pars* 2>&-
Info "Начинаю удаление треков с одинаковой длительностью..."
for i in `seq 0 $song_counts`
do
echo "<1>${song_durations[$i]}<2>${song_artists[$i]}<3>${song_titles[$i]}<4>${song_urls[$i]}<5>" >> ${sys_temp}/vksearch.parsing
done
cat ${sys_temp}/vksearch.parsing | sort -n | uniq -w 6 > ${sys_temp}/vksearch.parsed
cat ${sys_temp}/vksearch.parsing | sort -n | uniq -w 6 -d > ${sys_temp}/vksearch.doubles
OLD_IFS=$IFS
IFS=$'\n'
song_urls=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<4>\([^<]*\)<5>.*,\1,p' ` )
song_artists=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<2>\([^<]*\)<3>.*,\1,p' ` )
song_titles=( `cat ${sys_temp}/vksearch.parsed | sed -ne 's,.*<3>\([^<]*\)<4>.*,\1,p' ` )
song_durations=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<1>\([^<]*\)<2>.*,\1,p' ` )
song_counts=$(( ${#song_urls[@]} - 1 ))
IFS=$OLD_IFS
Info "В плейлисте осталось ${#song_urls[@]} треков."
}
парочка функций из моего проекта VKSearch - поиск и сохранение музыки ВКонтакте на shell... -_-
−144
#! /bin/sh
# some code
daemon1="/usr/home/daemon1.sh"
daemon2="/home/daemon2.sh"
# some code with variables
Скрипт на BSD. Хомяк находится в /usr/home, а /home симлинк на него
−129
#!/bin/bash
EMAIL="Your email"
PASSWORD="your password"
USERAGENT="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110529 Firefox/4.0"
curl -A "$USERAGENT" -c /tmp/vklogin.cookie -d "pass=$PASSWORD&email=$EMAIL" http://login.vk.com/?act=login -L | iconv -f cp1251 > /tmp/vklogin
perl -e "while(<STDIN>) {\$a=\$_; if(\$a =~ /^\s*<input[^>]*?name='([^']*)'[^>]*?value='([^']*)'\s*\/>/i) {print \"\$1=\$2&\";}}" < /tmp/vklogin > /tmp/vklogin.postdata
POSTDATA="$(cat /tmp/vklogin.postdata)"
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vkontakte.ru/login.php -L -v 2>&1 | iconv -f cp1251 &> /dev/null
echo 1 > /tmp/vklogin.mailid
echo 1 > /tmp/vklogin.mailoutid
while [ `cat /tmp/vklogin.mailid | wc -l` -gt 0 ]; do
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/mail -L | iconv -f cp1251 > /tmp/vklogin.mail
cat /tmp/vklogin.mail | perl -e "while(<STDIN>) {if (\$_ =~ /.*mail.deleteMsg\((\d*)/) {print \"\$1\n\";} }" > /tmp/vklogin.mailid
for i in $(cat /tmp/vklogin.mailid); do
curl -A "$USERAGENT" -d "act=a_delete&al=1&from=inbox&hash=1309098903_0eefa6ea250675f38e&id=$i" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/al_mail.php -L | iconv -f cp1251
done
done
while [ `cat /tmp/vklogin.mailoutid | wc -l` -gt 0 ]; do
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/mail?section=outbox -L | iconv -f cp1251 > /tmp/vklogin.mailout
cat /tmp/vklogin.mailout | perl -e "while(<STDIN>) {if (\$_ =~ /.*mail.deleteMsg\((\d*)/) {print \"\$1\n\";} }" > /tmp/vklogin.mailoutid
for i in $(cat /tmp/vklogin.mailoutid); do
curl -A "$USERAGENT" -d "act=a_delete&al=1&from=outbox&hash=1309103621_59302e5e1b1a924a70&id=$i" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/al_mail.php -L | iconv -f cp1251
done
done
rm /tmp/vklogin*
Удаляет все сообщения на vk.com
Наверное hash надо будет заменить.
−127
am=`cat $file | wc -l`
for ((i=1;i<=$am;i++))
do
read z
imsi=`echo $z | sed -e "s/^[0-9]*[ ]*//" `
done < $file
−134
# Fallback static file handler, now with XSendfile support.
if not if(test -f $local_path) {
if(! ~ $#xsendfile 0) {
if(! ~ $#xsendfile_alternate 0)
XSendfileHeader='X-Accel-Redirect'
if not
XSendfileHeader='X-Sendfile'
echo $XSendfileHeader': '`{pwd}^'/'$local_path
}
if not
static_file $local_path
}
if not if(~ $req_path /pub/* && test -f .$req_path) {
if(! ~ $#xsendfile 0) {
if(! ~ $#xsendfile_alternate 0)
XSendfileHeader='X-Accel-Redirect'
if not
XSendfileHeader='X-Sendfile'
echo $XSendfileHeader': '`{pwd}^'/'$req_path
}
if not
static_file .$req_path
}
−133
#!/bin/bash
cat -b $1 > file.txt
sed -e 's/^/<br>/g' -i file.txt
curl --data-urlencode [email protected] netelis.hmsite.net/upload.php | head -n1
Аналог wgetpaste
−139
#!/bin/bash
export cpx=0
export cpy=0
cf=0
export xf=0
export yf=0
while :
do
tput reset
xp=`cat /tmp/X.txt`
yp=`cat /tmp/Y.txt`
echo "xp $xp yp $yp"
clear
if [ $cpx -eq $xp ]
then
echo "x coincided"
xf=1
elif [ $cpx -gt $xp ]
then
let cpx--
else
let cpx++
fi
if [ $cpy -eq $yp ]
then
echo "y coincided"
yf=1
elif [ $cpy -gt $yp ]
then
let cpy--
else
let cpy++
fi
tput cup 45 130
echo px $xp py $yp
tput cup 46 130
echo x $cpx y $cpy
tput cup $cpx $cpy
sleep 0.5s
if [ $xf -eq 1 ]
then
if [ $yf -eq 1 ]
then
echo "Point coincide"
exit
fi
fi
done
Move cursor in right place.
−132
#!/bin/bash
export k=1
export g=0
export i=1
export j=1
handle_terminatem() {
let k=-1
let g=0
}
handle_terminatep() {
let k=1
let g=0
}
handle_terminategp() {
let g=1
let k=0
}
handle_terminategm() {
let g=-1
let k=0
}
echo pid $$
trap handle_terminatem 2 3
trap handle_terminatep 20 19 9
trap handle_terminategp 31
trap handle_terminategm 1
while :
do
tput clear
tput cup $i $j
echo "$1 $k $g"
if [ $j -gt 0 ]
then
let "j+=k"
else
let j=1
fi
if [ $i -gt 0 ]
then
let "i+=g"
else
let i=1
fi
sleep 0.1s
done
Управляет сигналами положением слова курсора на экране.