Get Tool
Publicado por Lucas Allan 27/01/2007
[ Hits: 5.747 ]
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
Instalação do Telegram Desktop via shell script
Mostrando informações sobre conexões ppp dos clientes
Script para Gerenciamento de Pacotes no Slackware
ob-install: um novo jeito de se configurar o Openbox
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?









