Sida 1 av 1

frågor till mitt första script

Postat: 25 nov 2008, 23:52
av simonw
Visserligen ganska låg nivå på dessa frågor men kanske nån som kan svara iaf? ::)

Tänkte göra ett litet bash-skript som när jag installerar Ubuntu på en dator bara är att dra igång så har jag lagt in Medibuntu m.fl. reposar och installerat (och avinstallerat) "allt" jag vill. Än så länge har jag lyckats pilla fram en lösning för att kontrollera att skriptet körs som root, och det är allt det gör än så länge.

Frågan jag nu har är hur jag ska göra för att flytta en ersättande sources.list till /etc/apt/ från den mapp skriptet ligger i? har testat med

Kod: Markera allt

mv sources_list_new.txt /etc/apt/sources.list
och

Kod: Markera allt

mv ./sources_list_new.txt /etc/apt/sources.list
men det funkar inte. Misstänker att skript körs i home snarare än från den mapp de initieras?

Hur ska jag göra?

Tack!!!

Re: frågor till mitt första script

Postat: 26 nov 2008, 00:54
av simonw
ok, det första alternativet funkar om jag står med terminalen i mappen för skriptet. Nu vill jag dock veta hur jag ska få till en "vill du fortsätta" fråga.

Funkar det att skriva

Kod: Markera allt

echo "fortsätta?"
if [ ??? ]
exit 0
fi
om jag byter ut ??? mot något lämpligt? isf vad?

Re: frågor till mitt första script

Postat: 26 nov 2008, 01:15
av Konservburk

Kod: Markera allt

printf "Vill du fortsätta? "
read REPLY
case "$REPLY" in [JjYy]*) ;; *) exit ;; esac

Re: frågor till mitt första script

Postat: 26 nov 2008, 01:57
av David Andersson
simonw skrev: Tänkte göra ett litet bash-skript som när jag installerar Ubuntu på en dator bara är att dra igång så har jag lagt in Medibuntu m.fl. reposar och installerat (och avinstallerat) "allt" jag vill. Än så länge har jag lyckats pilla fram en lösning för att kontrollera att skriptet körs som root, och det är allt det gör än så länge.

Frågan jag nu har är hur jag ska göra för att flytta en ersättande sources.list till /etc/apt/ från den mapp skriptet ligger i? har testat med

Kod: Markera allt

mv sources_list_new.txt /etc/apt/sources.list
och

Kod: Markera allt

mv ./sources_list_new.txt /etc/apt/sources.list
men det funkar inte. Misstänker att skript körs i home snarare än från den mapp de initieras?

Hur ska jag göra?
Om det är säkert att textfilen alltid finns i samma mapp som scriptet. Scriptets fulla filnamn finns i variabel $0. Mappen kan fås med dirname "$0". Textfilen därmed med $(dirname "$0")/sources_list_new.txt.

I stället för mv kan du använda cp så att ditt script inte "förstör" sin egen installation när den körs.

Som du gör nu måste du veta att din sources_list_new.txt alltid innehåller det som redan finns i /etc/apt/sources.list (utöver de nya repositorna). Ett alternativ är att inte skriva över /etc/apt/sources.list utan bara lägga till saker i slutet på den. Det kan göras med cat $(dirname "$0")/sources_list_add.txt >> /etc/apt/sources.list. (Alltså varken cp eller mv.) Det funkar en gång. Om man kör skriptet en gång till läggs samma sak till igen. Det kanske man inte vill. Det kan man lösa genom att antingen ta bort det man tänkt lägga till, innan man lägger till det, eller kolla om det redan finns i filen och i så fall låta bli att lägga till.

(Finns det nåt apt-kommando för att hantera /etc/apt/sources.list ?)

Re: frågor till mitt första script

Postat: 26 nov 2008, 02:10
av simonw
@Konservburk: Det funkade Perfekt!! Tack och bock

@David: cp är ju bättre förståss ;P funderar på att tvinga alla filer att ligga i samma mapp och terminalen att stå där i innan man kan köra skriptet så fullöser jag det problemet :D

Testade att skriva apt i terminalen och trycka på tab 2 ggr, fick

Kod: Markera allt

simon@simon-laptop:~$ apt
apt                           aptitude
apt-cache                     aptitude-create-state-bundle
apt-cdrom                     aptitude-run-state-bundle
apt-config                    apt-key
apt-extracttemplates          apt-mark
apt-ftparchive                apt-sortpkgs
apt-get                       apturl
så om nått ska kunna styra sources.list ska det väl vara en av dem. Men det kollar jag en annan dag, trött nu...

Re: frågor till mitt första script

Postat: 26 nov 2008, 07:21
av dmz
Hm. Är det inte lättare att bara använda >> för att appenda URL'er till en befintlig sources.lst?

Re: frågor till mitt första script

Postat: 27 nov 2008, 03:41
av simonw
Nästa fråga då!

Vilka filer är det som saknas för fullt svenskt språkstöd efter en nyinstallation?

Såg i kommentaren till en språkfil att language-support-sv skulle installeras för detta, sökte reda på den i synaptic och den var inte installerad. Vid installation drog den inte med några fler filer, så allt var väl installerat, Men räcker det med

Kod: Markera allt

apt-get -y install language-support-sv
för att fixa språket då?

Re: frågor till mitt första script

Postat: 27 nov 2008, 05:27
av David Andersson
simonw skrev: Men räcker det med

Kod: Markera allt

apt-get -y install language-support-sv
för att fixa språket då?
Det är nog så att du måste välja det nya språket när du loggar in. Det finns en knapp options eller alternativ i nåt av hörnen på login-skärmen. Välj språk svenska. Sen ska den komma ihåg vad du valt nästa gång du loggar in (tills du ändrar till nåt annat språk).

Re: frågor till mitt första script

Postat: 27 nov 2008, 05:36
av David Andersson
simonw skrev:Men räcker det med

Kod: Markera allt

apt-get -y install language-support-sv
för att fixa språket då?
Såg just att language-support-sv har language-pack-sv som "rekommenderat" beroende. Om den inte installeras automatiskt så ska du nog installera den också för att få så mycket svenska som möjligt.

Re: frågor till mitt första script

Postat: 05 dec 2008, 03:19
av simonw
Så där. Inte gjort så mycket på ett tag, men nu ska det effektiviseras lite mer!

Nu vill jag få outputen från en apt-get upgrade att loggas men även visas i lagom mån. dvs jag vill ha en rad där det senaste som apt-get spottar ur sig visas, när nästa sak kommer ska den raden bytas ut. jag vill inte tömma hela fönstret utan bara en rad. Antingen det eller nått som visar hur långt uppgraderingen kommit.

Jag gissar att det jag skrivit inte är helt optimerat :P , men hur tycker ni att det ser ut?

Kod: Markera allt

#!/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
echo -n "Checking privileges . . . "
if [ $USER != root ]; then
  echo "Error: must be root"
  echo "Exiting . . ."
  exit 1
fi
sleep 1
echo "[OK]"

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

# 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]"

# 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
sleep 1
echo "[OK]"
echo "Adding Medibuntu and other keys. . . "

#Virtualbox
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -

#Cairo-Dock
wget -q http://repository.cairo-dock.org/ubuntu/cairo-dock.gpg -O- | sudo apt-key add -

#Medibuntu
wget http://www.medibuntu.org/sources.list.d/intrepid.list --output-document=/etc/apt/sources.list.d/medibuntu.list > LOG/LOG_medibuntu_wget.txt
sudo apt-get -y --force-yes update > LOG/LOG_update1.txt && sudo apt-get -y --force-yes install medibuntu-keyring > LOG/LOG_medi_key.txt
sleep 1
echo "[OK]"


#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]"


#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]"
Jag har snott raderna för rengöring från ubucleaner skriptet. kvar är avinstallationen av allt jag inte vill ha kvar. Tack till er som hjälpt!

Re: frågor till mitt första script

Postat: 05 dec 2008, 19:40
av David Andersson
simonw skrev: Jag gissar att det jag skrivit inte är helt optimerat :P , 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.
echo "Adding Medibuntu and other keys. . . "

#Virtualbox
wget -q http://download.virtualbox.org/virtualb ... n_vbox.asc -O- | sudo apt-key add -

#Cairo-Dock
wget -q http://repository.cairo-dock.org/ubuntu/cairo-dock.gpg -O- | sudo apt-key add -

#Medibuntu
wget http://www.medibuntu.org/sources.list.d/intrepid.list --output-document=/etc/apt/sources.list.d/medibuntu.list > LOG/LOG_medibuntu_wget.txt
sudo apt-get -y --force-yes update > LOG/LOG_update1.txt && sudo apt-get -y --force-yes install medibuntu-keyring > LOG/LOG_medi_key.txt
sleep 1
echo "[OK]"
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.

Re: frågor till mitt första script

Postat: 05 dec 2008, 23:15
av Konservburk
simonw skrev:Jag gissar att det jag skrivit inte är helt optimerat :P , men hur tycker ni att det ser ut?

Kod: Markera allt

# Continue?
echo -n "Do You want to continue? [Y/n] "
read REPLY
case "$REPLY" in 
 [JjYy]*)
 	clear
 	echo "Continuing!"
	;;
	
 *)
	echo "Exiting . . ."
	exit 1
	;;
esac
Eftersom du kör med engelska så bör du byta ut [JjYy]*) mot bara [Yy]*), men ännu viktigare... du indikerar att Y-valet är standard, vilket inte stämmer (det kommer bli n om du bara trycker enter). Antingen ändrar du till "Do You want to continue? [y/N] " eller så ändrar du så att enter faktiskt blir Y:

Kod: Markera allt

''|[Yy]*)

Re: frågor till mitt första script

Postat: 06 dec 2008, 04:01
av simonw
@Daniel Andersson:
Daniel Andersson skrev:Generellt verkar scriptet pratigt
;D gör att jag vet vad som händer, effektivisering kommer sist.
Daniel Andersson skrev:cd $(dirname "$0")
Den låg på min önskelista. Tackar!
Daniel Andersson skrev:
simonw skrev: sleep 1
echo "[OK]"
Onödig sleep och OK igen.
Förstår din tanke, tar bort det tills jag har en bätre lösning på lite grejer..
Daniel Andersson skrev: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.
:P testar den i VBox med jämna mellanrum för att se hur det funkar.

@Konservburk:
Konservburk skrev:Eftersom du kör med engelska så bör du byta ut [JjYy]*) mot bara [Yy]*), men ännu viktigare... du indikerar att Y-valet är standard, vilket inte stämmer (det kommer bli n om du bara trycker enter). Antingen ändrar du till "Do You want to continue? [y/N] " eller så ändrar du så att enter faktiskt blir Y:

Kod: Markera allt

''|[Yy]*)
Bra att du påpekade det. Infört båda grejerna.

Tack Daniel och Konservburk för inputen! Gör det mycket lättare att komma igång med terminalen efter ett liv i den grafiska leta-peka-klicka dimman!