shell-script i sh som ska kunna köras/exekveras i linux

Permalänk
Kontot avslutas

shell-script i sh som ska kunna köras/exekveras i linux

hej, pluggar en linux-kurs och har svårt att lösa en uppgift. Uppgiften går i stort sett ut på att man ska skriva ett shell-script i bash sh som har några mappar med filer och filinnehåll i. Jag bifogar uppgiften, teorien som ska lösa den och mitt försök med uppgiften i pdf:er, sh-fil och annan fil här under. Jag har försökt att lösa den men stöter på felmeddelandena "no such file or directory" eller "no such directory" oavsett om jag använder linux i virtualbox eller wsl:s debian, ubuntu och kali. Den enda sh-fil som har kunnat exekvera är en liten en som heter Stayhome.sh. Är nåt fel på koden i lab2.sh? Trots att jag har skapat lab2.sh så finns inte den och inte några andra mappar eller filer alls i sökvägen C/Users/username/Documents och när jag försöker att köra och hitta den sökvägen står det att den inte finns.
Jag är en noob i programmering och kan "bara" html, css och att kopiera vissa javscript rader från nätet, så saker måste kanske bokstaveras för mig. Läraren har uppmuntrar oss studenter att ta hjälp av varandra, så jag fuskar inte om jag tar hjälp. Sen har jag som sagt föröskt själv på olika sätt, vilket ni kan läsa i rapporten. Börjar att bli riktigt trött på uppgiften.

Fil lab2.sh:

#!/bin/sh
touch filett.txt
echo "fil ett." > filett.txt
mkdir -p laborationtva/katalog1
mkdir -p laborationtva/katalogtva

cd laborationtva
touch filtvaa.txt
echo "fil två." > filtvaa.txt
touch filtree.txt
echo "fil tre." > filtree.txt

cd katalog1
touch pgm.sh

cat >> pgm.sh <<EOL
#!/bin/sh
echo "Antal rader i $PWD/datafil.txt:"
wc -l < $PWD/datafil.txt
echo "Antal rader i $PWD/../katalogtva/datafil.txt:"
wc -l < $PWD/../katalogtva/datafil.txt
EOL

chmod +x pgm.sh

touch datafil.txt
echo "detta är datafil 1." > datafil.txt
cd ../katalogtva
touch datafil.txt
echo "detta är datafil 2." > datafil.txt
touch filfyra.txt
echo "fil fyra." > filfyra.txt

Uppgiftens rapport(om ni vill se lite hur jag har försökt att göra uppgiften, den är lång bara för att den tvunget skulle vara det)
:
"Innehållsförteckning

1.Inledning
1.1.Bakgrund
1.2.Syfte
2.Planering och genomförande
2.1.Planering
2.2.Genomförande
3.Beskrivning av slutresultat
4.Slutsatser
6.Referenser
I.Bilaga/-or

1. Inledning
Jag ska skriva om hur uppgiften med laborerande med kommandoraden( alltså kommandoskalet) genom ett skapande av en viss specifik typ av fil gick till och vad den resulterade i.
1.1. Bakgrund
Uppgiften gick ut på att man skulle laborera med kommandoskalets kommandorad. Man skulle öppna en texteditor och i den skriva ett skalprogram som heter lab2.sh i Linux kommandoskals programmeringsspråk Bourne Shell. Detta skalprogram skulle då sparas som en Bourne Shell- fil (fil som var skriven i programmeringsspråket Bourne Shell) och det genom att ge filen filändelsen -.sh då .sh är en förkortning för programmeringsspråket Bourne shell. I det här skalprogrammet skulle man då genom att skriva kommandon i programmerinsspråket Bourne shell(sh) göra följande: skapa en katalogstruktur samt även skapa några filer i vilka textinnehåll skulle skapas enligt en viss struktur, skapa en fil som skulle vara en annan Bourne Shell-fil (som skulle heta pgm.sh) och få skalprogrammet att skriva ut antalet rader i katalogerna katalog1:s och katalog2:s data.txt-filer. Avslutningsvis skulle man exekvera de två .sh filerna.
1.2. Syfte
Syftet med uppgiften har varit att lära sig att skriva och exekvera kommandon och skalprogram i programmeringsspråket och shell-script språket Bourne shell(sh) i linux operativsystems terminal och att kunna göra det i såväl Linux-terminalen(för där skriver man ett kommando för att köra .sh filer) och i en texteditor. Jag har velat få svar på frågorna: Hur skapar man en Bourne shell-fil? Hur skapar man kommandon och skalprogram i språket Bourne-shell? Hur exekverar man ett skalprogram eller kommandon som är skrivna i språket Bourne shell?
2. Planering och genomförande
2.1. Planering
Min planering var att genomföra uppgiften på följande sätt: läsa igenom den till uppgiften angivna F2-föreläsningens pdf och i synnerhet då den del där olika kommandon i Bourne Shell-språket listas i en tabell, skapa en Bourne-shell fil som heter lab2.sh och i den skriva kommandon i Bourne-shell programmeringsspråket i den för att skapa de sh-programmen som efterfrågas i uppgiften och till sist sedan exekvera genom att skriva in rätt kommandorad på rätt ställe, som då är i en texteditor eller i ett slags kommandoskal för Linux( i nån form utav linux-terminal).
Jag visste att min i virtualbox installerade debian distro(från inlämning 1) fungerade sådär då flera kommandon inte gick att köra i dess linux-terminal. Att flera kommandon inte gick att köra i debiandistrons linux-terminal och att debiandistron saknade en sudo-användare fick mig att tro att jag behövde en ny linuxmiljö för inlämningsuppgift 2 och fick mig att tro att jag måste föräkra mig om att den skulle fungera och kunna köra inläming 2:s skalprogram. Jag planerade därför att för att lösa inlämningsuppgift 2 installera ett multum av linuxmiljöer och typer av linuxmiljöer. Poängen med det var att försäkra mig om att på något sätt kunna framgångsrikt exekvera hela det skalprogram som jag skulle skriva och inte bara några av dess kommandon, för jag tänkte att åtminstone en av dessa linuxmiljör eller typer av linuxmiljöer måste kunna köra hela skalprogrammet lab2.sh och pgm.sh istället för bara delar av dessa.
Min planering för att skaffa dessa linuxmiljöer och typer av linuxmiljöer var dels att inför uppgiften gå in i Windows inställningar och där aktivera Windows subsystem for linux(wsl) och sedan gå in i Microsoft store och från Microsoft store installera apparna(och linux-distrorna) Debian, Kali, Ubuntu och linux-systemet wsl(windows subsystem for linux). Den var dels även att ladda ner och installera git-bash då jag hade läst på nätet att git-bash kan exekvera shell-scripts(skalprogram) och då alltså användas för att lösa uppgiften. Den var slutligen även att ladda ner en linux mint iso-fil och linuxdistron pop:s iso-fil och installera dessa två linuxdistros i virtualbox.
2.2. Genomförande
Jag började med att googla på hur man aktiverar och installerar wsl i Windows 10. Sedan följde jag instruktionerna genom att knappa in windows features i sökfältet bredvid Windows-startmenyn, klicka på ”Turn Windows features on or off” och sedan bocka i alternativet Windows subsystem for linux. Sedan startade jag om datorn då det behövdes för att inställningen skulle bli aktiv. Efter det läste jag att man skulle aktivera Windows developer mode för att aktivera wsl och gjorde då det genom att gå in i Windows 10:s settings-apps settings>Update & Security>For developers och där bläddra ner till och aktivera alternativ developer-mode. Sedan googlade jag för att se hur man installerar wsl, debian, ubuntu och kali som Windows 10-appar och följde instruktionerna genom att knappa in windows features i sökfältet bredvid Windows-startmenyn, klicka på ”Turn Windows features on or off” och sedan bocka i alternativet ”Virtual machine platform”, klicka på Windows-startmeny, bläddra ner till och öppna appen Microsoft store, söka i sökfältet efter wsl, debian, ubuntu och kali och sedan klicka på install. När linuxdistro- apparna var installerade dubbelklickade jag på deras appikoner för att få upp deras terminaler. I terminalerna läste jag något i stil med ”Installing, this may take a few minutes…”. Sedan kunde jag läsa att terminalerna bad mig att skapa ett unix konto, vilket jag gjorde. Sedan bad terminalerna mig att skapa lösenord, vilket jag gjorde. Då meddelade terminalerna att installationen hade lyckats och att jag kunde använda kommandot sudo för att köra kommandon som administratör.
Jag kollade efter det på en youtube-video för att se hur man kunde göra för att köra Bourne Shell-skalprogram( eller shell-scripts som det heter på engelska) i Windows 10. Videon visade att man med git-bash kunde köra .sh filer genom att dra dem in i git-bash terminal och den visade var man kunde ladda ner och installera gitbash. Videon visade även att man genom att skriva kommandot cd /mnt/c/Users/”username”/Documents och sedan sh filename.sh i Windows Microsoft stores linux-appars terminaler kunde exekvera skalprogram. Därför laddade jag ner och installerade gitbash då jag tänkte att git-bash kunde hjälpa mig att lösa inlämningsuppgift 2 då man skulle kunna köra dess skalprogram i gitbash. Jag testade att göra ett skalprogram innehållandes textinnehållet Stay Home precis som hon i videon gjorde och mycket riktigt exekverade både linux-appar och git-bash terminalerna skalprogrammet. Jag behöll gitbash, wsl och linux-apparna som alternativ att exekvera inlämningusppgift 2 via.
Som ett alternativ till att köra inlämningsuppgift 2:s skalprogram via skapade jag en virtuell maskin av linuxdistron linux mint i virtualbox med valda inställningar som linux, oracle linux(64-bit), 25 gb hårddiskstorlek, basminnets och videominnets och processorns grönfrägade område maxade, create a virtual hard disk now, vdi, empty>blå disklogga>choose a disk file och sedan väljande av linux mints iso-fil. Jag installerade linux mint i virtualbox, testade kommmandon som sudo apt update && full-upgrade -yyyyy i terminalen. De funkade och jag tänkte då att jag nu har flera fungerande linuxmiljöer och linuxtyper att exekvera inlämingsuppgift 2:s skalprogram i och med.
Efter detta öppnade jag filen F2.pdf, läste igenom den och läste igenom tabellen över de olika kommandona i bash- språket och Bourne shell- språket. Sen öppnade jag Notepad, skapade en fil med namnet lab2.sh och började att i den skriva in olika kommandon i språket Bourne shell(som till exempel #!/bin/sh för att markera att filen var en Bourneshell fil(sh-fil). Jag skapade sen en likadan fil med gedit-appen i linux mint i virtualbox. När jag var klar med filerna och tyckte att inlämingsuppgift 2 var löst testade jag att köra skalprogrammen lab2.sh och pgm.sh i alla mina typer av linuxmiljöer(det vill säga i linux mint i virtual box, i en linux-app( ubuntu) och i git-bash. Jag försökte att köra filerna med kommandona sh lab2.sh, ./katt.sh i terminalerna och genom att dra filen lab2.sh in i git-bash terminalen. Jag försökte även att köra filerna genom att först använda kommandona cd /mnt/c/Users/”username”/Documents, chmod +x pgm.sh och chmod +x lab2.sh innan jag körde kommandona sh lab2.sh och ./katt.sh eller drog in lab2.sh i git-bash-terminalen. Jag försökte även att köra de två sh- filerna med dessa kommandon efter att ha valt att öppna lab2.sh med Notepad, Emacs och Visual studio code och försökte även att köra de två sh-filerna efter att ha skapat genvägar av windows-mappen Documents mappar( i en av dessa låg min lab2.sh) och fört över dessa till lokal disk C>Users>”username”>Documents då jag såg att jag inte hade några mappar eller mappen med lab2-sh där men i Onedrive och This PC>Documents.
3. Beskrivning av slutresultat
Mitt första och lilla skalprogram StayHome.sh skapades som en Borune-shell fil då jag i Windows file explorer kunde utläsa SH Source File under kolumnen Type och då jag använde kommandot #!/bin/sh för att göra filen till en Bourne shell-fil. Det exekverades i Windows 10:s ubuntu-app med kommandona cd /mnt/c/Users/”username”/Documents, sh StayHome.sh, ./StayHome.sh och genom att man drog in filen i git-bash och tryckte på enter-knappen, för när dessa saker gjordes visades textinnehållet ”Stay Home” i terminalerna, vilket jag hade skrivit in med echo-kommandot echo ”Stay Home” i StayHome.sh-filen. Inlämingsuppgift 2:s skalprogram lab2.sh skapades som en Bourne-shell fil då jag i Windows file explorer kunde utläsa SH source File under kolumnen Type och då jag använde kommandot #!/bin/sh för att göra filen till en Bourne shell-fil. När jag använde kommandona chmod +x lab2.sh, chmod +x pgm.sh , cd /mnt/c/Users/”username”/Documents, sh lab2.sh, ./lab2.sh i linux mint i virtual box, linux-apparna och git-bash fick jag bara svar från terminalerna i form av meddelanden som ”command not found” och ”No such file or directory” och skalprogrammen lab2.sh och pgm.sh exekverades inte. I gedit lyste kommandona i olika färger som rött, grönt, blå och beige.
4. Slutsatser
Jag lyckades att skapa ett litet skalprogram i programmeringsspråket bourne shell då StayHome.sh skalprogrammet kördes då meddelandet ”Stay Home” poppade upp i terminalerna, medan inlämningsuppgift 2:s två mycket större skalprogram lab2.sh och pgm.sh inte gick att exekvera då bara felmeddelanden som ”command not found” och ”No such file or directory” poppade upp i terminalerna. Jag lyckades alltså att skapa ett mindre och större skalprogram i bourne shell-språket, men kunde bara exekvera det mindre skalprogrammet och inte skalprogrammet lab2.sh. I texteditorn gedit lyste flera av mina kommandon i olika färger som rött, grönt och orange. Det fick mig att dra slutsatsen att åtminstone några av mina kommandon var korrekta, för texteditorer brukar markera och få ens kommandon att lysa med en viss färg om kommandona är rätt skrivna. Jag drar alltså slutsatsen att åtminstone några av skalprogrammet lab2.sh är rätt skrivna, för annars hade de inte lyst med en viss färg som röd, grön, blå och beige.
Jag trodde först att skalprogrammet lab2.sh inte gick att exekvera för att jag använde Windows linux-appar, wsl och git-bash. Hon i youtube-videon konstaterade att alla skalprogram som är skrivna i Bourne shell inte går att exekvera i Windows då de flesta av dessa skalprogram och deras kommandon är gjorda för Linux. Det fick mig att tro att jag var tvungen att testa att köra lab2.sh i en typ av linuxmiljö som låg utanför Windows operativsystem. Därför försökte jag då att köra filen som jag hade skapat i virtualbox linux mint, men jag fick samma felmeddelanden även där. Det fick mig att dra slutsatsen att orsaken till att skalprogrammet lab2.sh inte gick att exekvera inte var att man använde fel linuxmiljö, för virtualbox linux mint är en virtuell maskin som ligger utanför Windows os och filen exekverades ändå inte där.
Då det i terminalernas felmeddelanden stod ”no file or directory” när jag skrev sökvägen cd /mnt/c/Users/”username”/Documents tänkte jag att trots att jag har min lab2.sh i en mapp i sökvägarna This PC>Documents och Onedrive-Personal>Documents måste den saknas i sökvägen C>Users>”username”>Documents och jag tänkte att det kanske var därför som lab2.sh inte exekverades. Jag gick in i C>Users>”username”>Documents och fann att där inte fanns några mappar eller filer alls och inte heller någon fil som hette lab2.sh. Då jag fortfarande trodde att det här var orsaken till att lab2.sh inte kördes skapade jag en genväg av mappen som innehöll lab2.sh och skickade den mappen till C>Users>”username”>Documents. Jag förde även lab2.sh och dennas mapp till C>Users>”username”>Documents och bockade i alternativet ”always keep on this device” för att lagra lab2.sh och dennas mapp utanför Onedrives molnlagring. Jag trodde att det också kunde göra att filen kunde exekveras då jag hade läst på nätet att när filer och program lagrades i molnet kunde det bli problematiskt att nå och köra dem med kommandon då de då inte var lokalt lagrade på datorn. Sedan försökte jag pånytt att köra lab2.sh med kommandona chmod +x lab2.sh, chmod +x pgm.sh , cd /mnt/c/Users/”username”/Documents, sh lab2.sh, ./katt.sh i alla min olika typer av linuxmiljöer och skalprogrammet lab2.sh kördes fortfarande inte.
Jag lyckades alltså inte att köra lab2.sh i någon linuxmiljö och jag vet inte varför det inte fungerade att köra filen. Jag gissar att det kan ha att göra med att jag har skrivit fel kommandon i lab2.sh och/ eller i terminalerna och att jag har använt fel och ohela typer av linuxmiljöer. Kanske hade det alltså fungerat att köra skalprogrammet lab2.sh i ett usb:s, en raspberry pies, eller dators hårddisks hela och kompletta linux os som linuxmiljö och kanske inte."
5. Referenser
Litteraturförteckning
[1]: R. Hertzog, R. Mas, The Debian Administrator's Handbook, Debian Wheezy from Discovery to Mastery, 2013
[2]: R. Hertzog, R. Mas, The Debian Administrator's Handbook, Debian Squeezy from Discovery to Mastery, 2013

Internet
[1]: A. Jackson, F2, Introduktion till Linux och små nätverk, 2023
https://hig.instructure.com/courses/5715/files/824912?module_...
[1]: A. Wanjala, makeuseof, How to Enable Windows Subsystem for Linux, 2021
https://www.makeuseof.com/enable-windows-subsystem-for-linux/
[1]: SSL.com support team, SSL, Enable Linux Subsystem and Install Ubuntu in Windows 10, 2020 https://www.ssl.com/how-to/enable-linux-subsystem-install-ubu...
[1]: G. Phillips, makeuseof, You Can Now Install Windows Subsystem for Linux From the Microsoft Store, 2021 https://www.makeuseof.com/install-windows-subsystem-for-windo...
[1]: M. Huc, Pureinfotech, You can now install WSL from Microsoft Store on Windows 11, 2021 https://pureinfotech.com/install-wsl-microsoft-store-windows-...
[1]: Computer Hope, Unix and Linux commands help, 2020 https://www.computerhope.com/unix.htm
[1]: F. Wahab, addictivetips, How to run a Shell script on Windows 10, 2021 https://www.addictivetips.com/windows-tips/run-shell-script-o...
[1]: The authors, Ruby on Rails Demos ’n’ Deets, Setting Up Windows Subsystem for Linux (WSL) and Windows Terminal, 2020 https://human-se.github.io/rails-demos-n-deets-2020/demo-wsl/
I. Bilaga/-or
#!/bin/sh
touch filett.txt
echo "fil ett." > filett.txt
mkdir -p laborationtva/katalog1
mkdir -p laborationtva/katalogtva
cd laborationtva
touch filtvaa.txt
echo "fil två." > filtvaa.txt
touch filtree.txt
echo "fil tre." > filtree.txt
cd katalog1
touch pgm.sh
cat >> pgm.sh <<EOL
#!/bin/sh
echo "Antal rader i $PWD/datafil.txt:"
wc -l < $PWD/datafil.txt
echo "Antal rader i $PWD/../katalogtva/datafil.txt:"
wc -l < $PWD/../katalogtva/datafil.txt
EOL
chmod +x pgm.sh
touch datafil.txt
echo "detta är datafil 1." > datafil.txt
cd ../katalogtva
touch datafil.txt
echo "detta är datafil 2." > datafil.txt
touch filfyra.txt
echo "fil fyra." > filfyra.txt

Permalänk
Medlem

Hej!

skriptet pgm.sh i laborationtva/katalog1 försöker läsa från datafil.txt i både laborationtva/katalog1 och laborationtva/katalogtva, men det ändrar inte sin working directory till dessa innan det försöker directory läsa filen. Därför kommer skriptet inte att hitta de filer det letar efter och det kommer sannolikt att misslyckas med ett fel.

För att lösa detta bör skriptet ändra sin working directory till den lämpliga directory innan det försöker läsa från filen. Till exempel bör skriptet pgm.sh ändra sin working directory till laborationtva/katalog1 innan det läser från datafil.txt

Lösning:

#!/bin/sh
cd $(dirname $0)
echo "Antal rader i $PWD/datafil.txt:"
wc -l < datafil.txt
cd ../katalogtva
echo "Antal rader i $PWD/datafil.txt:"
wc -l < datafil.txt

Visa signatur

𝙙𝙖𝙩𝙤𝙧 Fractal Meshify C|AMD 9 7950X|RTX 3090 TI 24G|ASUS ROG STRIX X670E|32gb DDR5 RAM|Corsair 1200W
𝙡𝙖𝙥𝙩𝙤𝙥 ROG Zephyrus M16 rtx3070ti|Macbookpro M1pro

Permalänk
Moderator
Festpilot 2020, Antiallo

@nm96:
Du har redan en tråd i forumet om detta. Använd den. Tråd låst.

https://www.sweclockers.com/forum/trad/1687244-skapa-ett-sh-s...

Visa signatur

 | PM:a Moderatorerna | Kontaktformuläret | Geeks Discord |
Testpilot, Skribent, Moderator & Geeks Gaming Huvudadmin