Get Tool
Publicado por Lucas Allan 27/01/2007
[ Hits: 5.752 ]
O gtool é um simples script que serve para baixar e instalar pacotes no seu Slackware Linux. Por não usar apenas os mirrors oficiais, o gtool possui uma busca muito eficaz utilizando mirrors alternativos (linuxpackages.net).
;]
Espero que gostem!
#!/bin/sh
# FUNCOES
alternative() {
versao=$( dialog --stdout --backtitle "$programaMSG" --title "Alternative" \
--radiolist "Choose the slackware version" 8 60 0 \
"11.0" "Packages for Slackware 11.0" OFF \
"10.2" "Packages for Slackware 11.0" OFF \
"10.1" "Packages for Slackware 11.0" OFF \
"10.0" "Packages for Slackware 11.0" OFF \
"all" "For all version" OFF )
valor=`echo $versao | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Invalid Option" \
--infobox "You must choose an option from the list." 5 50
sleep 2
rm -f $linksArquivo
return 1
fi
busca=$( dialog --stdout --backtitle "$programaMSG" --title "Search"\
--inputbox "Enter the word to search" 8 60 )
valor=`echo $busca | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
elif [ $valor -gt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
fi
if [ $versao = all ]; then
url='http://www.linuxpackages.net/search_view.php?by=name&name='$busca'&ver='
else
url='http://www.linuxpackages.net/search_view.php?by=name&name='$busca'&ver='$versao
fi
# arquivo temporario para armazenar a lista de packs
listaArquivos=$TMP'/lista.'$$
# arquivo temporario para armazenar o log do Wget
logWget=$TMP'/wget.'$$
dialog --backtitle "$programaMSG" --title "Search" \
--infobox "Updating list of packages..." 5 50
wget -x -o $logWget -O $listaArquivos $url
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
rm -f $listaArquivos
return 1
fi
resultado=`cat $listaArquivos | grep "\">Download<\/a>" | sed "s/\(.*\)\"\(.*\)\"\(.*\)/\2/"`
rm -f $listaArquivos
valor=`echo $resultado | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Search Result"\
--msgbox "Package not found." 10 60
else
linksArquivo=$TMP'/links.'$$
(
echo 'dialog --backtitle "$programaMSG" --title\
"Search Result : $valor files" --radiolist "Choose the package"\
10 60 0 \'
while [ $valor -gt 0 ]; do
url=`echo $resultado | sed 's/\(\S*\)\s\(.*\)/\1/'`
resultado=`echo $resultado | sed 's/\(\S*\)\s//'`
pagina=`curl -s $url`
nome=`echo $pagina | sed 's/\(.*\)file: \(\S*\)<br>\(.*\)/\2/'`
tam=`echo $nome | wc -w`
if [ $tam -gt 0 ]; then
echo $nome '" " OFF \'
echo $nome >> $linksArquivo
echo $pagina | sed 's/\(.*\)<a href=\(\S*\)>HTTP<\(.*\)/\2/' >> $linksArquivo
fi
valor=`expr $valor '-' 1`
done
echo "2>$TMP/retorno.$$"
) > $TMP'/tela.$$'
. $TMP'/tela.$$'
rm -f $TMP'/tela.$$'
opcao="`cat $TMP/retorno.$$`"
rm -f $TMP'/retorno.$$'
valor=`echo $opcao | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Invalid Option" \
--infobox "You must choose an option from the list." 5 50
sleep 2
rm -f $linksArquivo
return 1
fi
tarefa=$( dialog --stdout --backtitle "$programaMSG" --title\
"Task" --radiolist "Choose an option"\
10 60 0 "Download" "Download a package" OFF\
"Install" "Install a package" OFF\
"Exit" "Go back to the menu" OFF )
valor=`echo $tarefa | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Invalid Option" \
--infobox "You must choose an option from the list." 5 50
sleep 2
rm -f $linksArquivo
return 1
fi
link=`cat $linksArquivo | grep $opcao | sed 's/\(^http:\)\(.*\)/\1\2/'`
rm -f $linksArquivo
if [ $tarefa = "Download" ]; then
diretorio=$( dialog --stdout --backtitle "$programaMSG" --title "Download"\
--inputbox "Enter the destination directory" 8 60 "`pwd`")
if [ ! -d $diretorio ]; then
dialog --backtitle "$programaMSG" --title "Invalid Directory" \
--infobox "The following directory does not exist." 5 50
sleep 2
return 1
fi
diretorio=$diretorio'/'$opcao
dialog --backtitle "$programaMSG" --title "Download" \
--infobox "Downloading $opcao..." 5 50
sleep 1
wget -x -o $logWget -O $diretorio $link
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
return 1
fi
dialog --backtitle "$programaMSG" --title "Download" \
--infobox "Download successful." 5 50
sleep 2
elif [ $tarefa = "Install" ]; then
diretorio=$TMP'/'$opcao
dialog --backtitle "$programaMSG" --title "Download" \
--infobox "Downloading $opcao..." 5 50
sleep 1
wget -x -o $logWget -O $diretorio $link
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
return 1
fi
dialog --backtitle "$programaMSG" --title "Download" \
--infobox "Download successful." 5 50
sleep 1
dialog --backtitle "$programaMSG" --title "Install" \
--infobox "Installing package data..." 5 50
/sbin/installpkg $diretorio > /dev/null
dialog --backtitle "$programaMSG" --title "Install" \
--infobox "Install successful." 5 50
sleep 1
rm -f $diretorio
elif [ $tarefa = "Exit" ]; then
return 1
fi
fi
return 0
}
credits(){
dialog --msgbox "Credits: \n\n\n Roque Pinel <repinel[a]gmail.com \n\n Lucas Allan <lucas.allan[a]gmail.com\n\n www.got2think.org\n\n" 15 60
}
search() {
busca=$( dialog --stdout --backtitle "$programaMSG" --title "Search"\
--inputbox "Enter the word to search" 8 60 )
valor=`echo $busca | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
elif [ $valor -gt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
fi
# arquivo temporario para armazenar a lista de packs
listaArquivos=$TMP'/lista.'$$
# arquivo temporario para armazenar o log do Wget
logWget=$TMP'/wget.'$$
dialog --backtitle "$programaMSG" --title "Search" \
--infobox "Updating list of packages..." 5 50
wget -x -o $logWget -O $listaArquivos ftp://ftp.slackware-brasil.com.br/slackware-current/FILELIST.TXT
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error 530" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
rm -f $listaArquivos
return 1
fi
resultado=`cat $listaArquivos | grep -i $busca | grep -i 'tgz$' | sed "s/\(.*\)\($busca.*\)/\2/I"`
rm -f $listaArquivos
valor=`echo $resultado | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Search Result"\
--msgbox "Package not found." 10 60
else
dialog --backtitle "$programaMSG" --title "Search Result: $valor files"\
--msgbox "`echo $resultado | sed "s/\s/\n/g" | sort`" 10 60
fi
return 0
}
sizeof() { du -s "$1" | cut -f1; }
running(){ ps $1 | grep $1 >/dev/null; }
download() {
busca=$( dialog --stdout --backtitle "$programaMSG" --title "Download"\
--inputbox "Enter the program name" 8 60 )
valor=`echo $busca | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
elif [ $valor -gt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
fi
# arquivo temporario para armazenar a lista de packs
listaArquivos=$TMP'/lista.'$$
# arquivo temporario para armazenar o log do Wget
logWget=$TMP'/wget.'$$
dialog --backtitle "$programaMSG" --title "Search" \
--infobox "Updating list of packages..." 5 50
wget -x -o $logWget -O $listaArquivos ftp://ftp.slackware-brasil.com.br/slackware-current/FILELIST.TXT
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error 530" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
rm -f $listaArquivos
return 1
fi
resultado=`cat $listaArquivos | grep -i $busca | grep -i 'tgz$' | sed "s/\(.*\)\($busca.*\)/\2/I"`
valor=`echo $resultado | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Search Result"\
--msgbox "Package not found." 10 60
rm -f $listaArquivos
else
(
echo 'dialog --backtitle "$programaMSG" --title\
"Search Result : $valor files" --radiolist "Choose the package"\
10 60 0 \'
echo $resultado | sed 's/ / " " OFF /g;s/\(.$\)/\1 " " OFF \\/g'
echo "2>$TMP/retorno.$$"
) > $TMP'/tela.$$'
. $TMP'/tela.$$'
rm -f $TMP'/tela.$$'
opcao="`cat $TMP/retorno.$$`"
rm -f '$TMP/retorno.$$'
valor=`echo $opcao | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Invalid Option" \
--infobox "You must choose an option from the list." 5 50
sleep 2
rm -f $listaArquivos
return 1
fi
diretorio=$( dialog --stdout --backtitle "$programaMSG" --title "Download"\
--inputbox "Enter the destination directory" 8 60 "`pwd`")
if [ ! -d $diretorio ]; then
dialog --backtitle "$programaMSG" --title "Invalid Directory" \
--infobox "The following directory does not exist." 5 50
sleep 2
rm -f $listaArquivos
return 1
fi
urlArquivo=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)\(\.\/.*\)/\2/I" | sed "s/\.\///"`
TOTAL=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)root\( *\)\([0-9]*\)\(.*\)/\3/"`
rm -f $listaArquivos
diretorio=$diretorio'/'$opcao
wget -x -o $logWget -O $diretorio ftp://ftp.slackware-brasil.com.br/slackware-current/$urlArquivo &
### barra de progresso para download INICIO
CPPID=$!
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error 530" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
return 1
fi
TOTAL=`expr $TOTAL '/' 1024`
EXP=0
# caso o usuário cancele, interrompe a cópia
trap "kill $CPPID" 2 15
# loop de checagem de status da cópia
(
# enquanto o processo de cópia estiver rodando
while running $CPPID; do
# quanto já foi copiado?
COPIADO=$(sizeof $diretorio)
# qual a porcentagem do total?
EXP=`expr $COPIADO '*' 100 '/' $TOTAL`
# envia a porcentagem para o dialog
echo "$EXP"
# aguarda até a próxima checagem
sleep $INTERVALO
done
# cópia finalizada, mostra a porcentagem final
echo 100
) | dialog --backtitle "$programaMSG" --title "Download..."\
--gauge "Downloading $opcao" 8 40 0
### barra de progresso para download FIM
fi
return 0
}
install() {
busca=$( dialog --stdout --backtitle "$programaMSG" --title "Install"\
--inputbox "Enter the program name" 8 60 )
valor=`echo $busca | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
elif [ $valor -gt 1 ]; then
dialog --backtitle "$programaMSG" --title "Syntax Error" \
--infobox "The value must be just one word." 5 50
sleep 2
return 1
fi
# arquivo temporario para armazenar a lista de packs
listaArquivos=$TMP'/lista.'$$
listaArquivos='./FILELIST.TXT'
# arquivo temporario para armazenar o log do Wget
logWget=$TMP'/wget.'$$
dialog --backtitle "$programaMSG" --title "Search" \
--infobox "Updating list of packages..." 5 50
wget -x -o $logWget -O $listaArquivos ftp://ftp.slackware-brasil.com.br/slackware-current/FILELIST.TXT
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
rm -f $listaArquivos
dialog --backtitle "$programaMSG" --title "Connection Error 530" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
return 1
fi
resultado=`cat $listaArquivos | grep -i $busca | grep -i 'tgz$' | sed "s/\(.*\)\($busca.*\)/\2/I"`
valor=`echo $resultado | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Search Result"\
--msgbox "Package not found." 10 60
else
(
echo 'dialog --backtitle "$programaMSG" --title\
"Search Result : $valor files" --radiolist "Choose the package"\
10 60 0 \'
echo $resultado | sed 's/ / " " OFF /g;s/\(.$\)/\1 " " OFF \\/g'
echo "2>$TMP/retorno.$$"
) > $TMP'/tela.$$'
. $TMP'/tela.$$'
rm -f $TMP'/tela.$$'
opcao="`cat $TMP/retorno.$$`"
rm -f $TMP'/retorno.$$'
valor=`echo $opcao | wc -w`
if [ $valor -lt 1 ]; then
dialog --backtitle "$programaMSG" --title "Invalid Option" \
--infobox "You must choose an option from the list." 5 50
sleep 2
rm -f $listaArquivos
return 1
fi
urlArquivo=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)\(\.\/.*\)/\2/I" | sed "s/\.\///"`
TOTAL=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)root\( *\)\([0-9]*\)\(.*\)/\3/"`
rm -f $listaArquivos
diretorio=$TMP'/'$opcao
wget -x -o $logWget -O $diretorio ftp://ftp.slackware-brasil.com.br/slackware-current/$urlArquivo &
### barra de progresso para download INICIO
CPPID=$!
valor=`cat "$logWget" | grep "Login incorrect"`
rm -f $logWget
valor=`echo $valor | wc -w`
if [ $valor -gt 0 ]; then
dialog --backtitle "$programaMSG" --title "Connection Error 530" \
--msgbox "Sorry, the maximum number of clients (32) from\
your class are already connected. Press any key. . ." 9 50
return 1
fi
TOTAL=`expr $TOTAL '/' 1024`
EXP=0
# caso o usuário cancele, interrompe a cópia
trap "kill $CPPID" 2 15
# loop de checagem de status da cópia
(
# enquanto o processo de cópia estiver rodando
while running $CPPID; do
# quanto já foi copiado?
COPIADO=$(sizeof $diretorio)
# qual a porcentagem do total?
EXP=`expr $COPIADO '*' 100 '/' $TOTAL`
# envia a porcentagem para o dialog
echo "$EXP"
# aguarda até a próxima checagem
sleep $INTERVALO
done
# cópia finalizada, mostra a porcentagem final
echo 100
) | dialog --backtitle "$programaMSG" --title "Download..."\
--gauge "Downloading $opcao" 8 40 0
### barra de progresso para download FIM
dialog --backtitle "$programaMSG" --title "Install" \
--infobox "Installing package data..." 5 50
/sbin/installpkg $diretorio > /dev/null
dialog --backtitle "$programaMSG" --title "Install" \
--infobox "Install successful." 5 50
sleep 1
rm -f $diretorio
fi
return 0
}
# STARTING MAIN
# titulo dialog
programaMSG="Get Tool Program"
# diretorio para arquivos temporarios
TMP='/tmp'
# tempo para atualizacao da barra de download
INTERVALO=1
while [ 0 ]; do
dialog --backtitle "$programaMSG" --title \
"Main Menu" --menu\
"Welcome to Get Tool Program"\
8 60 0\
Download "Download the package" \
Install "Install the package" \
Search "Search for a package" \
Alternative "Search in alternative mirror" \
Credits "Credits"\
Exit "Exit program" 2>/tmp/menuitem.$$
if [ ! $? = 0 ]; then
dialog --clear
exit
fi
menuitem=`cat /tmp/menuitem.$$`
rm -f /tmp/menuitem.$$
case $menuitem in
Download) download ;;
Install) install ;;
Search) search ;;
Alternative) alternative ;;
Credits) credits;;
Exit) dialog --clear; exit;;
esac
done
dialog --clear
exit
#END OF THE SOURCE
Extrair arquivos pelo Nautilus com 7z e Yad
Backup simples com log de resultado
Papéis de parede aleatórios direto da internet
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Preciso recuperar videos *.mp4 corrompidos (10)
É normal não gostar de KDE? (11)
Secure boot, artigo interessante, nada técnico. (2)









