AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1171462
Accepted
GNULinuxOnboard
GNULinuxOnboard
Asked: 2019-09-07 22:15:16 +0800 CST2019-09-07 22:15:16 +0800 CST 2019-09-07 22:15:16 +0800 CST

Faça um comando ser executado se a saída do comando anterior tiver um valor específico

  • 772

Estou escrevendo um shell script que me perguntará se eu gostaria de verificar meu sistema quanto a atualizações quando eu efetuar login. Se eu disser que sim, ele verifica e lista os pacotes a serem atualizados. Então, ele me pergunta se eu gostaria de atualizar esses pacotes. Eu gostaria que o comando que me pergunta se eu gostaria de atualizar os pacotes seja executado apenas quando houver um ou mais pacotes que precisem ser atualizados que foram listados após sudo apt update && apt list --upgradeable. Como posso fazer isso? Aqui está o meu script até agora:

read -r -p "Would you like to check your system for updates? [Y/n] " input
case $input in
[yY][eE][sS]|[yY])
sudo apt update && apt list --upgradeable 
read -r -p "Would you like to update your system? [Y/n] " input
case $input in
[yY][eE][sS]|[yY])
sudo apt upgrade && sudo apt autoremove && sudo apt autoclean
;;
[nN][oO]|[nN])
clear
;;
*)
clear && echo "Invalid input..."
;;
esac
;;
[nN][oO]|[nN])
clear
;;
*)
clear && echo "Invalid input..."
;;
esac

Basicamente, precisa ser assim: se esse pedaço de texto estiver na saída do comando anterior, execute o próximo comando.

Qualquer ajuda é muito apreciada. Obrigado!

scripts command-line updates upgrade
  • 2 2 respostas
  • 128 Views

2 respostas

  • Voted
  1. cmak.fr
    2019-09-07T22:43:29+08:002019-09-07T22:43:29+08:00

    Obtenha o número de atualizações disponíveis com:

    /usr/lib/update-notifier/apt-check
    # returns (for example) 12;4
    
    /usr/lib/update-notifier/apt-check --human-readable
    # returns (for example)
      12 packages can be updated.
      4 updates are security updates.
    
    /usr/lib/update-notifier/apt-check |& cut -d";" -f1
    # returns (for example) 12
    

    Para testar se há atualizações disponíveis, use o último comando e teste sua saída em relação a 0.

    Aqui está um script simples que fará suas coisas
    . Observe que ele não lida com entradas ruins, apenas captura '', 'yes', 'YeS', 'y', 'Y' para continuar. Se não houver entrada 'sim', simplesmente saia do script.

    #!/bin/bash
    
    read -r -p "Would you like to check your system for updates? [Y/n] " response
      response=${response,,} # tolower
      if ! ([[ $response =~ ^(yes|y| ) ]] || [[ -z $response ]]); then
        exit
      fi
    sudo apt update > /dev/null 2>&1
    nUpgradables=$(/usr/lib/update-notifier/apt-check |& cut -d";" -f1)
    
    if [ $nUpgradables -gt 0 ]; then
      echo ${nUpgradables}" packages can be updated"
      read -r -p "Would you like to update your system? [Y/n] " input
      response=${response,,} # tolower
      if ! ([[ $response =~ ^(yes|y| ) ]] || [[ -z $response ]]); then
        exit
      fi
      sudo apt-get -f install # that is good to do too
      sudo apt upgrade        # upgrade, not 'upgrades'
      sudo apt autoremove
      sudo apt autoclean
    else
      echo "No upgrade available"
    fi
    
    • 2
  2. Best Answer
    user986805
    2019-09-22T07:54:43+08:002019-09-22T07:54:43+08:00
    #!/bin/bash
    
    # update package list.
    aptitude --quiet=2 update
    
    # count upgradeable packages.
    read -r c < <(aptitude --quiet=2 search '?narrow(?upgradable, ?not(?action(hold)))' | wc -l)
    
    while true; do
        (( $c <= 0 )) && break
        read -r -p "You have $c upgradable packages, would you like to upgrade? [Y/n] " i
        case ${i,,} in
            [y]|[yes])
                aptitude upgrade # --assume-yes --quiet=2
                break
                ;;
            [n]|[no])
                echo "No action taken..."
                break
                ;;
            *)
                echo "Invalid input..."
                continue
                ;;
        esac
    done
    
    exit 0
    

    Versão 2

    #!/bin/bash
    
    # update package list.
    apt-get --quiet=2 update
    
    # count upgradeable packages.
    read -r c < <(apt-get --no-act --quiet=2 upgrade | grep -c '^Inst')
    
    while true; do
        (( $c <= 0 )) && break
        read -r -p "You have $c upgradable packages, would you like to upgrade? [Y/n] " i
        case ${i,,} in
            [y]|[yes])
                apt-get upgrade # --assume-yes --quiet=2
                break
                ;;
            [n]|[no])
                echo "No action taken..."
                break
                ;;
            *)
                echo "Invalid input..."
                continue
                ;;
        esac
    done
    
    exit 0
    
    • 1

relate perguntas

  • Como posso fazer com que o Ubuntu verifique se há atualizações com menos frequência?

  • Como habilito as atualizações automáticas?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve