simonw skrev:
Jag gissar att det jag skrivit inte är helt optimerat

, men hur tycker ni att det ser ut?
Wow, kommentarerna gör att det ser proffsigt ut.
Jag har några synpunkter dock. Formaliterer, har inte testkört. Generellt verkar scriptet pratigt. Jag tror inte insprängda
sleep gör det lättare att läsa det det skriver.
Varning långt inlägg. Bara för intresserade. Scriptet plus mina kommentarer.
#!/bin/bash
#This script installs several repositories and and shit load of software.
#To run you must cd to the folder in which this script is located.
#Logs are created in ./LOG
clear
Jag är inte så förtjust i
clear. Man förlorar lita av tidigare kommandon och deras output när man rullar bakåt i terminalen. Tycker det borde funka minst lika bra utan clear.
echo -n "Checking privileges . . . "
if [ $USER != root ]; then
echo "Error: must be root"
echo "Exiting . . ."
exit 1
fi
sleep 1
echo "[OK]"
Varken sleep eller echo OK behövs (utom kanske under debug-fasen). Om du tar bort echo ska du förstås ta bort -n i echo-satsen 8 rader upp.
echo "New repositories will now be added and software installed on your system."
echo "For safety reasons, only run this script on fresh installs of Ubuntu 8.10."
echo "Make sure Your in the right folder (where I'm located)."
sleep 2
Onödig sleep.
I stället för att fråga om jag står i rätt mapp så kan du sätta rätt mapp med "cd". Kommandot
cd $(dirname "$0") går till mappen som scriptet ligger i.
# Continue?
echo -n "Do You want to continue? [Y/n] "
read REPLY
case "$REPLY" in
[JjYy]*)
clear
echo "Continuing!"
;;
*)
echo "Exiting . . ."
exit 1
;;
esac
# System Control
echo -n "Checking Ubuntu version . . . "
if test $(lsb_release -rs) != "8.10"; then
echo "Error: system must be Ubuntu 8.10"
echo "Exiting . . ."
exit 1
fi
sleep 1
echo "[OK]"
Onödig sleep och OK.
# Create dirs ./LOG and ./LOG/install
mkdir ./LOG/install
# Source.list editing
echo -n "sources.list will now be replaced . . . "
cp sources_list_new.txt /etc/apt/sources.list
Har du funderat på att spara en kopia av originalfilen ifall nåt går fel? Det kanske inte är alldeles nödvändigt eftersom förutsättningen är att det är en fräsh installation av Ubuntu och man kan installera om igen.
sleep 1
echo "[OK]"
Onödig sleep och OK igen.
Onödig sleep igen. Ett ord om echo OK här. Den är inte bara onödig. Den kan vara felaktig. Här görs rätt komplicerade saker som kan gå fel. Internet kan vara nere, apt-get kan misslyckas av mystiska orsaker, etc. Det görs ingen kontroll om det gick okej, ändå skriver scriptet OK. Det är det värsta jag vet, program som ljuger. Bättre att inte skriva OK, men ännu bättre att testa innan man går vidare (om det kan bli allvarliga följdfel). Skriv isåfall felmeddelande och stanna om det gick fel, och fortsätt tyst om det gick bra.
#Update
echo -n "Updating APT package information . . . "
sudo apt-get -y --force-yes update > LOG/LOG_update2.txt
sleep 1
echo "[OK]"
echo -n "Updating packages . . . "
sudo apt-get -y --force-yes upgrade > LOG/LOG_upgrade.txt
sleep 1
echo "[OK]"
# Clean System
echo -n "Cleaning apt cache . . . "
apt-get autoclean > LOG/LOG_autoclean.txt
echo "[OK]"
echo -n "Remove orphans . . . "
apt-get autoremove > LOG/LOG_autoremove.txt
echo "[OK]"
echo -n "Emptying all trashcans . . . "
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
rm -rf /root/.local/share/Trash/*/** &> /dev/null
echo "[OK]"
Varför tömma papperskorgen? Finns det ett logiskt beroende att gamla saker i papperskorgen stör, eller är det bara för att få mer diskspace utifallatt? Jag såg inte att det varnas för att papperskorgen töms vid "want to continue?", så det finns risk att det blir en obehaglig överraskning.
#Installation
echo "Time to install software!"
echo -n "Do You want to continue? [Y/n] "
read REPLY
case "$REPLY" in
[JjYy]*)
clear
echo "Continuing!"
;;
*)
echo "Exiting . . ."
exit 1
;;
esac
echo -n "Installing full Swedish language support . . . "
sudo apt-get -y --force-yes install language-support-sv language-pack-sv wswedish > LOG/install/LOG_swedish.txt
echo "[OK]"
echo -n "Installing internet related software"
sudo apt-get -y --force-yes install emesene skype > LOG/install/LOG_internet.text
echo "[OK]"
echo -n "Installing Graphics related software"
sudo apt-get -y --force-yes install scribus incscape > LOG/install/LOG_graphics.txt
echo "[OK]"
echo -n "Installing office related software"
sudo apt-get -y --force-yes install openoffice.org-base hplip > LOG/install/LOG_programming.txt
echo "[OK]"
echo -n "Installing media related software"
sudo apt-get -y --force-yes install mozilla-plugin-vlc vlc-plugin-esd vlc-data soundconverter tagtool flashplugin-nonfree gecko-mediaplayer ubuntu-restricted-extras w32codecs > LOG/install/LOG_media.txt
echo "[OK]"
echo -n "Installing programming related software"
sudo apt-get -y --force-yes install eclipse-cdt > LOG/install/LOG_programming.txt
echo "[OK]"
echo -n "Installing systemtool related software"
sudo apt-get -y --force-yes install gmountiso htop virtualbox-2.0 gparted rar gnome-art compizconfig-settings-manager > LOG/install/LOG_systemtool.txt
echo "[OK]"
echo -n "Installing miscelaneous software"
sudo apt-get -y --force-yes install cowsay cmatrix > LOG/install/LOG_miscelaneous.txt
echo "[OK]"
I stället för att göra
>LOG/LOG_ditt.txt och
>LOG/LOG_datt.txt till olika loggfiler kan du samla allt i en logg fil med
>>LOG/LOG_all.txt på alla ställen. >> betyder append. Börja i så fall med att ta bort ev gammal LOG/LOG_all.txt eller använd bara > på första kommandot, för att skriva över ev gammal logg.