[code:3rjesfhb]
#!/bin/sh
get_status() {
url="$1"
scheme="${url%%://}"
if [ "$scheme" = "$url" ]; then
scheme=""
port="${url#:}"
[ "$port" = "$url" ] && port="$2"
if [ -z "$port" ]; then
echo "port number not specified" 1>&2
exit 1
fi
else
url="${url#://}"
port="${url#:}"
[ "$port" = "$url" ] && port="" || port="${port%%/}"
if [ "$port" = "" ]; then
case "$scheme" in
http|https) port=80;;
) echo ‘unsupported url scheme’ 1>&2; exit 1
esac
fi
fi
host="${url%%/}"
host="${host%%:}"
path="${url#*/}"
[ "$path" = "$url" ] && path="/" || path="/$path"
if [ "$port" -eq 80 ]; then
printf "HEAD $path HTTP/1.0\r\n\r\n"| netcat "$host" $port |head -1|cut -d " " -f2|tr -d ‘\n’
else
netcat -w 1 -z "$host" $port
if [ $? -eq 0 ]; then
echo ‘200’|tr -d ‘\n’ 1>&2
return 0
else
echo ‘404’|tr -d ‘\n’ 1>&2
return 1
fi
fi
}
repo=
update=
usage() {
echo "
Usage $0 [OPTIONS] [URL|HOST] [PORT]
OPTIONS
-r, --repo Check ppa repoitories
-u, --update update repositories
-h, --help Display help
"
exit 0
}
params=$#
eval set – $(getopt -l help,repo,update -o hru – "$@")
while true; do
case "$1" in
-r|–repo)
repo=1;;
-u|–update)
update=1;;
-h|–help)
usage;;
–)
shift
break
;;
esac
shift
done
[ "$params" -eq 0 ] && usage
if [ -n "$repo" ]; then
IFS=’
’
codename="$(lsb_release -s -c)"
for f in $(grep ‘^deb’ /etc/apt/sources.list.d/.list|sed ‘s/:deb / /’|cut -d ’ ’ -f-3); do
file="${f%% }"
url="${f# }"
dist="${url# }"
url="${url%% *}"
[ "$dist" = "$codename" ] && continue
STATUS=$(get_status "${url%/}/dists/$codename")
[ "$STATUS" -eq 404 ] && continue
if [ -n "$update" ]; then
sudo sed -ri ‘s/^(deb\s+\S+\s+)\S+/\1’$codename’/’ "$file"
echo "repository changed $codename: $file"
else
echo "detected old repository: $file"
fi
done
if [ -n "$update" ]; then
sudo apt-get update
fi
#curl "$URL" -sI |head -1|cut -d ’ ’ -f2
else
URL="$1"
shift
get_status "${URL%/}" "$@"
echo " $URL $@"
fi
[/code:3rjesfhb]
** 사용법 **
-r, --repo PPA레포지토리 체크
-u, --update 레포지토리 업데이트
-h, --help 도움말 출력
결과는 상태코드 입력값
상태코드 404는 존재하지 않는 링크이거나, 포트가 열리지 않은 경우입니다.
상태코드 200은 성공적으로 연결된 경우이거나, 포트가 열려있는 경우입니다.
** 예제 **
urlcheck http://www.google.com 777
==>
404 http://www.google.com 777
urlcheck http://www.google.com:900
==>
404 http://www.google.com:900
urlcheck http://www.ubuntu.com
==>
200 http://www.ubuntu.com
urlcheck ftp.daum.net 21
==>
200 ftp.daum.net 21
urlcheck http://www.google.com
==>
302 http://www.google.com
urlcheck -r
==>
detected old repository: /etc/apt/sources.list.d/noobslab-icons-saucy.list
detected old repository: /etc/apt/sources.list.d/noobslab-themes-saucy.list