Hjälp i bashscript...

Support och diskussioner om allt som berör programmering.
Användarvisningsbild
ChiLLabiS
Inlägg: 12
Blev medlem: 05 feb 2020, 10:29

Hjälp i bashscript...

Inlägg av ChiLLabiS »

Tjena!

Har gjort ett installations-script i bash för Ubuntu och Debian, grejjen är den att jag skulle vilja få till det så att om ett paket failar i 'apt install paket' att hela scriptet avbryts. Just nu drar den igenom hela scriptet även om apt inte kan installera ett paket, i och med det så installeras inte de andra paketen.

Scriptet ser ut ungefär så här:

Kod: Markera allt

#!/bin/bash
apt update
apt install -y irssi screen ssh

wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
Ganska simpelt, men det är det enda jag kan i dagsläget. Har ni någon bra lösning på detta?
EDIT: Och går det att göra så med andra kommandon i scriptet också ifall de inte skulle fungera?
ChiLLabiS@ChiLL-PC:~$ sudo apt install trevlig

Debian / Musik / Snus

Användarvisningsbild
ChiLLabiS
Inlägg: 12
Blev medlem: 05 feb 2020, 10:29

Re: Hjälp i bashscript...

Inlägg av ChiLLabiS »

Fick hjälp på IRC, ni kan tabort den här tråden därför jag löste problemet!

Skriver jag:

Kod: Markera allt

if [ $? -ne 0 ]; then { echo "Failed, aborting!" ; exit 1; } fi
Efter varje kommando så gör scriptet som jag ville!

Typ:

Kod: Markera allt

#!/bin/bash
apt update
apt install -y irssi screen ssh
if [ $? -ne 0 ]; then { echo "Failed, aborting!" ; exit 1; } fi

wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
if [ $? -ne 0 ]; then { echo "Failed, aborting!" ; exit 1; } fi
chmod a+rx /usr/local/bin/youtube-dl
Där det står "echo" Kan man välja själv vad det ska stå där. Ganska smidigt!
ChiLLabiS@ChiLL-PC:~$ sudo apt install trevlig

Debian / Musik / Snus

Barre
Inlägg: 9
Blev medlem: 05 feb 2020, 14:51

Re: Hjälp i bashscript...

Inlägg av Barre »

ChiLLabiS skrev:
16 maj 2020, 19:16
Tjena!

Har gjort ett installations-script i bash för Ubuntu och Debian, grejjen är den att jag skulle vilja få till det så att om ett paket failar i 'apt install paket' att hela scriptet avbryts.
ChiLLabiS skrev:
16 maj 2020, 20:22
Fick hjälp på IRC, ni kan tabort den här tråden därför jag löste problemet!

Skriver jag:

Kod: Markera allt

if [ $? -ne 0 ]; then { echo "Failed, aborting!" ; exit 1; } fi
Efter varje kommando så gör scriptet som jag ville!
Det är ett sätt att göra det på, men det finns fler sätt att skala en lök :)

Personligen föredrar jag att sätta lite options i scriptet.
Om du vill ett script skall sluta att exekvera när ett kommando "failar" så kan du börja skriptet med att sätta optionen

Kod: Markera allt

set -e

Kod: Markera allt

#!/bin/bash
set -e
#!/bin/bash
apt update
apt install -y irssi screen ssh
wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
Då kommer scriptet att avslutas om något av kommandona skulle misslyckas.

Det finns fler optioner som är bra att använda (tycker jag personligen) Scriptet kommer då att avslutas om scriptet försöker expandera en osatt variabel

Som ett exempel för det, ponera att du har dumt skript som heter script.sh och ser ut så här

Kod: Markera allt

#!/bin/bash
TARGET="$1"
ls -l "/$TARGET"
så skulle du köra det scriptet så här

Kod: Markera allt

./script.sh tmp
så skulle den lista filerna i /tmp katalogen.
MEN om du kör skriptet utan parametrar,

Kod: Markera allt

./script.sh
så kommer den lista filerna i / katalogen. Det i sig är ju inte så farligt, men om scriptet hade kört

Kod: Markera allt

rm -rf "/$TARGET
så hade all data försvunnit på datorn, istället för bara i /tmp.
Så det är god praxis att även sätta i dina script

Sista är exit-koder när man kör pipe, exempelvis när du skall köra grep, sed eller awk mot output från föregående kommando, det behöver man också fånga och då finns

Kod: Markera allt

-o pipefail
som option.

Så med detta sagt så skulle scriptet kunna se ut så här

Kod: Markera allt

#!/bin/bash
set -euo pipefail
apt update
apt install -y irssi screen ssh

wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
Mvh
Barre - Din Mandel i Cybergröten

Kod: Markera allt

echo 4a612c206a616720c3a472206ec3b6726469672c206475206f636b73c3a5210a | xxd -p -r

Skriv svar