Basit bir özel apt-get / config betiği oluşturma


0

Ubuntu ile gittikçe daha fazla oynadığımda, işletim sistemini yeniden yüklediğimde gerçekleştirdiğim yinelenen komutların çoğunu nasıl otomatikleştirebileceğimi görmeye başlıyorum. Şimdiye kadar, sadece bir devasa Düzinelerce & amp; & amp; ile bağlı apt-get script / terminal komut listesi semboller.

Python'da iyi davranırdım ama çok şey unuttum. İşte apt-get komutum şu anda nasıl görünüyor: (sadece yapıştırıp girip basarım):

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

Biliyorum, tam olarak temiz değil. Bu şekilde yapmaya devam etmek istemiyorum ve güncellemesi, bakımı ve okuması benim için daha kolay olacak bir senaryoya dönüştürmek istiyorum. İşte yapmak istediğim şeyi yazdığım bazı sahte kodlar.

#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
')

Temel olarak, bir tür çalıştırılabilir komut dosyası olarak kaydedebilmeyi ve sadece terminalde çalıştırmayı ve işini yapmasını istiyorum. Java, C ++ ve Python hakkında bilgim var, ancak kodladığımdan bu yana çok zaman geçti.

Oyuna geri dönmeye çalışan biri için herhangi bir öneri çok takdir edilecektir! Lütfen dikkat: Kimsenin benim için tüm işleri yapmasını istemiyorum. Kendi başıma çözdüğüm gibi denemeyi ve başarısız olmayı dört gözle bekliyorum, nasıl başlayacağınız, hangi dili kullanacağınız, kurumsal düzenler ve başlamak için diğer yararlı ipuçlarından bazı bilgiler istiyorum.

Yanıtlar:


1

Bir kabuk betiği kullanın (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"

Alternatif olarak, tercihlerinizin değişeceğini biliyorsanız, bir giriş dosyasına okuyan bir komut dosyası yazabilirsiniz:

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

Bir giriş dosyasını okuma

#!/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,

Yazdığım birçok komut dosyalarında okunur. Bu cevapta özetlememi istiyorsan, yapabilirim.
Wally

Eğer yapabilseydin bu harika olurdu! Komut dosyasını güncellemem gerektiğinde yeni bir paket eklemeyi çok daha kolay hale getirirdi.
Harsha K

Ping. "Bir giriş dosyasını okuma" ekledim.
Wally

Geç cevap verdiğim için özür dilerim. Bu harika ~ Şimdi onunla oynuyorum ve çalışmasını dört gözle bekliyorum. Teşekkür ederim!
Harsha K

1

Sadece bu satırı kaydet adlı bir dosyaya kaydet. do_stuff.sh. Ve bu şekilde koş . path/to/do_stuff.sh.

Gerçekten doğru yapmak istiyorsanız, sadece ekleyin #!/bin/bash ilk satır olarak ve chmod +x path/to/do_stuff.sh. Sonra çalıştırılabilir olarak çalıştırabilirsiniz.

Python - bash öğrenmek (yeniden) gerek yok olduğu bir betik dili.


İlginç! Bass senaryosunun o kadar kolay olduğunu bilmiyordum.
Harsha K

Bash scriptleri, ilk satır bittiğinde bir sonraki satırı nasıl yürüteceğini biliyor? Bunu biliyorum ; önceki komuttan bağımsız olarak yürütmek anlamına gelir; oysa & amp; & amp; sadece önceki komut başarılı olursa çalıştırılacaktır. Peki bash hangi varsayılanı seçer?
Harsha K

newline noktalı virgül eşdeğeri
Alex Zeffertt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.