Criando um simples script personalizado apt-get / config

0

À medida que jogo mais e mais com o Ubuntu, começo a ver como posso automatizar a maioria dos comandos repetitivos que executo sempre que eu reinstalo o sistema operacional. Até agora, é apenas uma lista de comandos gigantescos apt-get script / terminal conectados por dezenas de & & símbolos.

Eu costumava ser decente em python, mas já me esqueci bastante. Aqui está o meu comando apt-get parece agora (que eu simplesmente colar e pressione enter):

sudo add-apt-repository -y ppa:numix/ppa && sudo add-apt-repository -y ppa:gwendal-lebihan-dev/hexchat-stable && sudo add-apt-repository -y ppa:webupd8team/nemo && sudo apt-get update && sudo apt-get install -y numix-icon-theme numix-gtk-theme docky hexchat nemo nemo-fileroller dconf-tools vlc unity-tweak-tool gnome-tweak-tool python-pip && sudo pip install speedtest-cli && gsettings set org.gnome.desktop.background show-desktop-icons false && xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search && gsettings set org.gnome.desktop.interface gtk-theme "Numix" && gsettings set org.gnome.desktop.interface icon-theme 'Numix-Circle' && gsettings set com.canonical.desktop.interface scrollbar-mode normal

Eu sei, não é exatamente limpo. Eu não quero continuar fazendo isso dessa maneira e gostaria de transformá-lo em um script que seria muito mais fácil para eu atualizar, manter e ler. Aqui está um pseudo código que eu digitei do que gostaria de fazer.

#Install/Config Script

#Add Repos
print ("Adding Numix, Hexchat, and Webupd8 Repositories...")
enter.line ('sudo add-apt-repository -y ppa:numix/ppa && sudo add-apt-repository -y ppa:gwendal-lebihan-dev/hexchat-stable && sudo add-apt-repository -y ppa:webupd8team/nemo')

#Update Repos
print ("Updating repostiory lists...")
enter.line ('sudo apt-get update')

#Install apps
print ("Installing Numix Icon Theme...")
enter.line ('sudo apt-get install -y numix-icon-theme')
print ("Installing etc etc...")

#Configure Nemo File Explorer
print ("Configuring Nemo as default file manager")
enter.line ('gsettings set org.gnome.desktop.background show-desktop-icons false')
enter.line ('xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search')

#Set Numix Theme and fix scrollbars
print ("Setting Numix GTK and Icon Set...")
enter.line ('gsettings set org.gnome.desktop.interface gtk-theme "Numix"')
enter.line ('gsettings set org.gnome.desktop.interface icon-theme 'Numix-Circle'')
enter.line ('gsettings set com.canonical.desktop.interface scrollbar-mode normal
')

Essencialmente, eu gostaria de poder salvá-lo como algum tipo de script executável, e simplesmente executá-lo no terminal e deixá-lo fazer o que ele quer. Estou familiarizado com Java, C ++ e Python, mas faz muito tempo desde que eu codifiquei.

Qualquer sugestão para alguém tentando voltar ao jogo seria muito apreciada! Por favor, note que eu não estou pedindo para alguém fazer todo o trabalho para mim. Eu estou ansioso para tentar e falhar como eu descobrir por conta própria, eu adoraria alguma informação sobre como iniciar, que idioma usar, layouts organizacionais e quaisquer outras dicas úteis para começar.

    
por Harsha K 14.03.2014 / 12:20

2 respostas

1

Use um script de shell (bash):

#!/bin/bash
#above line ensures it runs with bash because of the '#!'
sudo apt-get update
sudo apt-get install -y numix-icon-theme package2 package3 package4
sudo apt-get install -y package5 package6 package7 etc

gsettings set org.gnome.desktop.interface gtk-theme "Numix"

Como alternativa, se você souber que suas preferências serão alteradas, poderá escrever um script que leia um arquivo de entrada:

#newserver.in
install,numix-icon-theme,package2,package3
install,package4
custom,gsettings,"set org.gnome.desktop.interface gtk-theme \"Numix\""

Lendo um arquivo de entrada

#!/bin/bash
infile=foobar.in
thisserver=""

cat $infile | while read line
do
   case $line in
      "#"*) [ ];; #matches commented lines
      "") [ ]  ;; #matches empty lines
      *)          #matches the rest
         #echo $line 
         while IFS=, read val1 val2 val3 val4 val5 val6
         do
            #echo "val1=$val1   val2=$val2   val3=$val3   val4=$val4"
            #echo "$thisserver    $line"
            if [[ "$thisserver" == author* ]] && [ "$val1" != "SERVER" ];
            then
               echo "$val1 $val2 wrote during the $val3"
            elif [[ "$thisserver" == movies* ]] && [ "$val1" != "SERVER" ];
            then
               echo "$val1 ($val2) rates $val3 on imdb.com"
            fi
            if [ "$val1" = "SERVER" ];
            then
               echo "$val2"
               thisserver=$val2
            fi

         done <<< $line
         ;;
   esac

done

foobar.in

#foobar.in

# example comment
SERVER,authors.example.com,
alexandre,dumas,1700s
robert,heinlein,1900s,science fiction, nothing to see here, extra properties

timothy,zahn,1900s,
mark,twain,1800s,
SERVER,movies.example.com,
The Avengers,2012,8,
Star Wars,1997,9,
Ratatouille,2007,8,
    
por 14.03.2014 / 13:15
1

Basta salvar essa linha em um arquivo chamado, digamos, do_stuff.sh . E execute-o assim . path/to/do_stuff.sh .

Se você realmente quiser fazer isso corretamente, basta adicionar #!/bin/bash como primeira linha e chmod +x path/to/do_stuff.sh . Então você pode executá-lo como um executável.

Não há necessidade de (re) aprender python - bash é uma linguagem de script.

    
por 14.03.2014 / 13:12