Hej, @Airikr. Nu har jag hunnit gå igenom din kod.
För det första håller jag med @CrazyFerret att det du gör i ditt script är en perfekt match för Ansible, och att många av de synpunkterna jag kommer med här kommer lösas automatiskt om du skriver det hela som en Ansible-playbook istället.
Men nu är ju syftet att lära sig och öva på shell-scriptning och få feedback på detta snarare än att lösa ett specifikt problem, så vi släpper Ansible nu och fokuserar på scriptet.
Du lägger in ett onödigt beroende på sudo. Det finns många sätt att bli root på en Linuxburk, och sudo är bara ett av dessa sätt. Om du t.ex. redan är root så är det helt onödigt att anropa sudo. Du förlitar dig också på sudo:s beteende att inte be om lösenord varje gång man kör sudo, detta kan vara konfigurerat annorlunda och det kan sluta med att användaren får mata in sitt eget lösenord flera gånger. Bättre lösning är att ta bort alla anrop till "sudo" och istället i början av scriptet kolla om du är root, och förvänta dig att användaren själv istället kör hela scriptet som root.
Du utför noll felhantering i själva scriptet. Om t.ex. en apt-get update
misslyckas av någon anledning kommer scriptet bara gå vidare till nästa steg, och eventuellt felmeddelande kommer bara dränkas av en massa rader av text från nästa kommando etc. Här bör du kolla att ett kommando lyckats köra innan du kör nästa.
Ditt script är inte effektivt med att ställa alla frågor först. Istället för att ställa en fråga om "vill du göra A", sedan gå och göra A, sedan gå tillbaka och fråga om du ska göra B, och sedan göra det. Mer effektivt vore att börja med att fråga vad användaren vill i början, och sedan göra allt i ett svep. Då kan användaren effektivt svara på alla frågorna och sedan koka en kopp kaffe, och komma tillbaks till en färdig installation.
Ditt script anropar t.ex. apt-get install så att det ställer frågor. Samma som ovan, när apt-get install kör så kommer den fråga om du vill installera paketen i fråga. Kanske inte önskvärt i ett automatiskt script. Kolla om apt-get har en flagga för att skippa denna frågan, och även andra interaktiva frågor.
Om användaren skriver fel på ett svar kraschar scriptet. Om användaren skriver till t.ex. "Hej" som svar på en ja/nej fråga så bör scriptet fråga igen, inte bara avsluta scriptet.
Scriptet i sig är inte scriptbart. Istället för en massa ja/nej-frågor interkativt, fundera på att lägga på lite flaggor till scriptet istället, eller iaf ha den möjligheten. Då kan du lätt skriva ett oneliner-script som installerar allt du vill ha precis som du vill ha det istället för att svara på en massa j/n-frågor.
Ditt script anropar apt-get alldeles för många gånger i onödan. Du kör en apt-get update många gånger i scriptet vilket bara tar en massa tid i onödan, sen kör du apt-get install flera gånger med olika listor på paket. Mycket smartare att bygga en lista på paket först och sedan installera allt på en gång. Men det värsta är ändå nästan längst ner i scriptet:
sudo apt-get --purge remove chromium
sudo apt-get --purge remove chromium-browser
sudo apt-get --purge remove chrome
sudo apt-get --purge remove google-chrome
sudo apt-get --purge remove firefox
sudo apt-get --purge remove mozilla
sudo apt-get --purge remove iceweasel
sudo apt-get --purge remove seamonkey
sudo apt-get --purge remove lynx
sudo apt-get --purge remove www-browser
sudo apt-get --purge remove links
sudo apt-get --purge remove links2
sudo apt-get --purge remove w3m
sudo apt-get --purge remove elinks
sudo apt-get --purge remove epiphany
sudo apt-get --purge remove konqueror
Det här bör bara vara en rad.