Permalänk
Medlem

Script hjälp.

Hej.

Jag har börjat läsa lite Linux kurser sidan om. Jag har fastnat om det är någon som vill hjälpa mig.

Fösta uppgiften är : Skapa en textfil i din hemmakatalog med valfri text i. Skapa en ny mapp i den hemmakatalog och kopiera textfilen till denna nya katalog.
Den nya filen ska ha ett annat namn än den ursprunliga texten.

Det jag har gjort är som fungerar är :

pi@Jcswe : ~$ cat > Uppdrag.txt
Detta är en text fil där jag kan skiva precis vad jag vill.För att \
spara denna text fil så trycker man på CTRL - D.Hej då
pi@Jcswe : ~$
pi@Jcswe : ~$ ls
Desktop Downloads Music Pictures python_games TEST Videos
Documents MagPi oldconffiles Public Templates Uppdrag.txt
pi@Jcswe : ~$
pi@Jcswe : ~$ mkdir Nymapp
pi@Jcswe : ~$ ls
Desktop Downloads Music oldconffiles Public Templates Videos
Documents MagPi Nymapp Pictures python_games Uppdrag.txt
pi@Jcswe : ~$
pi@Jcswe : ~$ mv Uppdrag.txt Nymapp/nyuppdrag.txt
pi@Jcswe : ~$ ls
pi@Jcswe : ~$ cd Nymapp
pi@Jcswe : ~/Nymapp $ ls
nyuppdrag.txt
pi@Jcswe : ~/Nymapp $

Nästa fråga som jag har problem med är : Du ska skapa en korrekt scriptfil som åstadkommer ovanstående. Dock ska den ursprunliga textfilen nu istället ha information om vilka filer som finns i din hemkatalog.

Jag har gjort så här :

nano tomat.sh

#!/bin/bash
mkdir mapp
cat > uppdrag.txt
Då provar vi detta för 100 gången.
mv uppdrag.txt mapp/upp.txt

CTRL X

chmod +x tomat.sh
./tomat.sh

Ända jag får är upp.txt filen. dubbel klickar jag på tomat.sh och trycker kör så fungerar allt som det ska men texten kommer ej med.
Vad är det som jag göra för fel?

Tacksam för svar.

Visa signatur

Jcswe

Permalänk
Medlem

Du flyttar filen istället för att kopiera den.

Visa signatur

Stationär i5 12600KF + NH-D15S Chromax - TUF Gaming B660M-PLUS D4 - 32GB DDR4 3600MHz - Vega 56 /w Vega 64 bios + Morpheus II - 960 EVO 500GB - Phanteks Eclipse P400S TG - RM750x - AOC Agon AG271QX
Laptop Xeon W-10885M - 32GB DDR4 3200MHz - Quadro RTX 3000 - Samsung 1TB SSD

Permalänk
Hedersmedlem

Hej! Du har två fel i ditt script:

#!/bin/bash mkdir mapp cat > uppdrag.txt Då provar vi detta för 100 gången. mv uppdrag.txt mapp/upp.txt

Först tar vi den här biten:

cat > uppdrag.txt Då provar vi detta för 100 gången.

Vad det verkar som att du vill göra är att skriva ut texten "Då provar vi detta för 100 gången." in i textfilen cat > uppdrag.txt.

Vad som faktiskt händer är att programmet "cat" startas utan argument, och skickar in utdatat till filen uppdrag.txt. När programmet "cat" körs utan argument så läser den rad för rad från stdin (tangentbordet i ditt fall) och skickar ut det på stdout (i det här fallet redirectat till upp.txt).

Detta pågår tills att du som användare på tangentbordet trycker Ctrl+D. Då kommer nästa rad i filen att köras nämligen:

Då provar vi detta för 100 gången.

Här kommer du förmodligen få ett felmeddelande om att den inte hittar något program eller kommando som heter "Då". Sedan fortsätter resten av skriptet (fast innehållet i filen blev vad du skrev på tangentbordet vid körning).

Överkurs: Om du faktiskt vill skriva ut texten i fråga i filen så ska du istället göra så här:

cat <<SLUT > uppdrag.txt Då provar vi detta för 100 gången. SLUT

Vad <<SLUT gör är att skapa ett s.k. "heredoc", där alla påföljande rader i scriptet fram till SLUT (du kan välja ett annan slutord om du vill, ofta ser man EOF) matas in i cat via stdin. Då har du skapat filen med texten ifråga.

Med det sagt, så har du inte löst uppgiften om du gör så. I uppgiften står det nämligen:

Citat:

Dock ska den ursprunliga textfilen nu istället ha information om vilka filer som finns i din hemkatalog.

Den här biten löser du säkert rätt enkelt. Nu vet du ändå hur man tar ut en lista på filer (det har du visat tidigare), och hur man skickar utdata från ett kommando till en fil (även det har du gjort tidigare). Mer kan jag inte säga utan att helt enkelt lösa uppgiften för dig.

Sen ett sista fel, i uppgiften så står det att du ska kopiera filen, inte flytta den. Som du redan vet så är mv (kort för move) kommandot för att flytta filen. Vad kommandot för att kopiera filen heter har du säkert i din kurslitteratur.

Lycka till, hör av dig om du fastnar.

Ett sista tips, när du klistrar kod på forumet, försök sätta [code] före koden och [/code] efter. Då blir det såna där fina textrutor som du ser ovan!

PS: Exakta anledningen till att det funkar om du kör scriptet genom att klicka på det vet jag inte säkert, men jag *gissar* att det i din operativmiljö blir så att när du kör scriptet genom att klicka på det så kopplas det aldrig upp någon terminal. När kommandot "cat" sedan körs så försöker den läsa från stdin, som inte är kopplat någonstans, därför avslutar kommandot "cat" direkt utan att skriva ut något (vilket skapar en tom fil.) Sedan går scriptet vidare.

Permalänk
Medlem

Hade du sökt så kanske du hade hittat att någon redan hade frågat om den här uppgiften, och om så, då hade du även fått svaret på andra frågan.

Edit: Någon har alltså redan frågat om den här uppgiften. Och fått svar på hur hen skulle göra.

Permalänk
Medlem

@pv2b:

pi@Jcswe : ~$ cat > uppdrag.txt Detta är en textfil där jag kan skiva precis vad jag vill.För att \ spara denna text fil så trycker man på CTRL + D. pi@Jcswe : ~$ ls Desktop Downloads Music Pictures python_games uppdrag.txt Documents MagPi oldconffiles Public Templates Videos pi@Jcswe : ~$ mkdir nymapp pi@Jcswe : ~$ ls Desktop Downloads Music oldconffiles Public Templates Videos Documents MagPi nymapp Pictures python_games uppdrag.txt pi@Jcswe : ~$ cp uppdrag.txt nymapp/nytext.txt pi@Jcswe : ~$ ls Desktop Downloads Music oldconffiles Public Templates Videos Documents MagPi nymapp Pictures python_games uppdrag.txt pi@Jcswe : ~$ cd nymapp pi@Jcswe : ~/nymapp $ ls nytext.txt

Tack för hjälpen. Jag såg nu vad det var som jag gjorde för fel.

För att kunna köra detta som ett Script så provade jag mig fram till det här :

nano uppdrag.sh #!/bin/bash cat > uppdrag.txt mkdir nymapp cp uppdrag.txt nymapp/nytext.txt chmod +x uppdrag.sh ./uppdrag.sh

och det funkade inte alls, har suttit med detta hela kvällen efter jobb! Känner att jag måste ta en paus och ta tag med detta i morron igen.

Visa signatur

Jcswe

Permalänk
Medlem
Skrivet av chif:

Du flyttar filen istället för att kopiera den.

Såg det nu! Tack för hjälpen.

Visa signatur

Jcswe

Permalänk
Medlem

@filbunke:

Har varit inne och läst, men förstår inte ändå! Är väl jag som är trög fattad

Visa signatur

Jcswe

Permalänk
Medlem

#!/bin/bash #Del ett echo "första filen">~/textfil.txt mkdir ~/NyMapp cp ~/textfil.txt ~/NyMapp/NyttNamn.txt #Del två ls -1 ~>~textfil.txt

Permalänk
Medlem

@Xcorp: Det var hjälp med kursuppgiften som efterfrågades, inte lösningen :/

Visa signatur

Mjölnir: Ryzen 9 3900X | X570-I | Ballistix Sport 32GB | Powercolor RX 5500XT 4GB ITX | Kolink Sattelite
Server: Ryzen 5 1400 | X470-F | Ballistix Sport 24GB | ASUS HD 7790 2GB | Sapphire RX 470 8GB ME | NZXT Switch 810

Permalänk
Medlem
Skrivet av Djhg2000:

@Xcorp: Det var hjälp med kursuppgiften som efterfrågades, inte lösningen :/

Väl medveten om det, men TS har försökt utan att lyckas. Om då rätt lösning presenteras kanske det gör det lättare att förstå vad som är fel.

Permalänk
Hedersmedlem
Skrivet av Xcorp:

Väl medveten om det, men TS har försökt utan att lyckas. Om då rätt lösning presenteras kanske det gör det lättare att förstå vad som är fel.

Det är fortfarande inte rätt lösning. Han har inte ens läst frågan ordentligt. Uppgiften är att skriva en lista på filerna i hans hemkatalog in i filen i fråga.

Permalänk
Hedersmedlem
Skrivet av Jcswe:

@pv2b:

pi@Jcswe : ~$ cat > uppdrag.txt Detta är en textfil där jag kan skiva precis vad jag vill.För att \ spara denna text fil så trycker man på CTRL + D. pi@Jcswe : ~$ ls Desktop Downloads Music Pictures python_games uppdrag.txt Documents MagPi oldconffiles Public Templates Videos pi@Jcswe : ~$ mkdir nymapp pi@Jcswe : ~$ ls Desktop Downloads Music oldconffiles Public Templates Videos Documents MagPi nymapp Pictures python_games uppdrag.txt pi@Jcswe : ~$ cp uppdrag.txt nymapp/nytext.txt pi@Jcswe : ~$ ls Desktop Downloads Music oldconffiles Public Templates Videos Documents MagPi nymapp Pictures python_games uppdrag.txt pi@Jcswe : ~$ cd nymapp pi@Jcswe : ~/nymapp $ ls nytext.txt

Tack för hjälpen. Jag såg nu vad det var som jag gjorde för fel.

För att kunna köra detta som ett Script så provade jag mig fram till det här :

nano uppdrag.sh #!/bin/bash cat > uppdrag.txt mkdir nymapp cp uppdrag.txt nymapp/nytext.txt chmod +x uppdrag.sh ./uppdrag.sh

och det funkade inte alls, har suttit med detta hela kvällen efter jobb! Känner att jag måste ta en paus och ta tag med detta i morron igen.

Hej! Läs mitt inlägg igen så ser du att jag förklarar exakt varför ditt script (särskilt biten cat > uppdrag.txt) inte funkar.

Om det är någon bit av mitt svar du inte förstår, ställ gärna en följdfråga.

"Det funkar inte, jag fattar inte" är inte en följdfråga. Förklara vad det är du inte förstår. (Inte menat som en pik på något sätt, det är bara svårt att komma vidare när jag känner att redan gett ett uttömmande svar.)

Permalänk
Medlem
Skrivet av pv2b:

Det är fortfarande inte rätt lösning. Han har inte ens läst frågan ordentligt. Uppgiften är att skriva en lista på filerna i hans hemkatalog in i filen i fråga.

Vad gör del två från det jag postade?
Förutom typon i pathen jag såg nu...

ls -1 ~>~textfil.txt

Permalänk
Medlem
Skrivet av Xcorp:

#!/bin/bash #Del ett echo "första filen">~/textfil.txt mkdir ~/NyMapp cp ~/textfil.txt ~/NyMapp/NyttNamn.txt #Del två ls -1 ~>~textfil.txt

Tack för hjälpen! Märkte att när jag pratar högt om vad varje kod gör så är det lättare att förstå.

Skrivet av pv2b:

Hej! Läs mitt inlägg igen så ser du att jag förklarar exakt varför ditt script (särskilt biten cat > uppdrag.txt) inte funkar.

Om det är någon bit av mitt svar du inte förstår, ställ gärna en följdfråga.

"Det funkar inte, jag fattar inte" är inte en följdfråga. Förklara vad det är du inte förstår. (Inte menat som en pik på något sätt, det är bara svårt att komma vidare när jag känner att redan gett ett uttömmande svar.)

Hej pv2b.
Jo jag läste det med cat i går så jag provade bara att köra utan text och se om det blev bättre men icke.
Jag har nog fått rätt på det hela nu och som jag skrev ovan så har det hjälp väldigt mycket att prata högt om vad varje kod gör.

nano script.sh #!/bin/bash echo Detta blir en text där jag kan skiva precis vad jag vill > uppdrag.txt mkdir nymapp cp uppdrag.txt nymapp/nytext.txt ls - l > uppdrag.txt

Utanför

chmod + x script.sh ./script.sh

Visa signatur

Jcswe

Permalänk
Medlem
Skrivet av Jcswe:

Tack för hjälpen! Märkte att när jag pratar högt om vad varje kod gör så är det lättare att förstå.

Hej pv2b.
Jo jag läste det med cat i går så jag provade bara att köra utan text och se om det blev bättre men icke.
Jag har nog fått rätt på det hela nu och som jag skrev ovan så har det hjälp väldigt mycket att prata högt om vad varje kod gör.

nano script.sh #!/bin/bash echo Detta blir en text där jag kan skiva precis vad jag vill > uppdrag.txt mkdir nymapp cp uppdrag.txt nymapp/nytext.txt ls - l > uppdrag.txt

Utanför

chmod + x script.sh ./script.sh

Toppen att du löst det och förstår varför.
Men uppgiften du har är att skapa en lista över alla filer i din hemkatalog.
Prova att flytta ditt script till en annan mapp och se vad som händer.
Hänger du inte med på varför så fråga bara.

Permalänk
Medlem

@Xcorp:
När jag kör scriptet nu så får jag en textfil som ser ut så här :

totalt 52 drwxr-xr-x 2 pi pi 4096 jun 27 2018 Desktop drwxr-xr-x 3 pi pi 4096 jan 3 21:56 Documents drwxr-xr-x 2 pi pi 4096 jan 15 22:03 Downloads drwxr-xr-x 2 pi pi 4096 jun 27 2018 MagPi drwxr-xr-x 2 pi pi 4096 jun 27 2018 Music drwxr-xr-x 2 pi pi 4096 jan 17 21:30 nymapp drwxr-xr-x 4 pi pi 4096 jan 3 21:27 oldconffiles drwxr-xr-x 2 pi pi 4096 jun 27 2018 Pictures drwxr-xr-x 2 pi pi 4096 jun 27 2018 Public drwxr-xr-x 2 pi pi 4096 jun 27 2018 python_games drwxr-xr-x 2 pi pi 4096 jun 27 2018 Templates -rwxr-xr-x 1 pi pi 117 jan 17 21:30 tomat.sh -rw-r--r-- 1 pi pi 0 jan 17 21:30 uppdrag.txt drwxr-xr-x 2 pi pi 4096 jun 27 2018 Videos

Nu har den skapat en lista av alla mina filer i hemkatalogen, och i mappen så är det texten som jag har skrivit.
Flyttar jag scriptet så gör den likadant fast skriver ut vad som är i mappen istället för hemkatalogen.
Är inte det rätt?

Visa signatur

Jcswe

Permalänk
Medlem

@Jcswe:

Citat:

Du ska skapa en korrekt scriptfil som åstadkommer ovanstående. Dock ska den ursprunliga textfilen nu istället ha information om vilka filer som finns i din hemkatalog.

Det står ingenstans där var skriptet ska finnas eller hur du ska köra det, bara att det ska skriva ut vilka filer som finns i din hemkatalog. Min tolkning är att det ska göras oavsett var skriptet ligger eller i vilken katalog du står när du kör det.

Permalänk
Medlem

@Xcorp: Precis, då känns det som jag är på rätt spår.

Nästa uppgift skriver dem så här : Du ska redogöra för uppgiften enligt kraven för betyget C (föregående uppgift) men nu ska den ursprunliga filen istället innehålla en förteckning av vissa filer från din hemmakatalog som bygger på ett urval.

Urvalet kan antigen vara filer som har en viss filändelse eller som är skapade senast eller tidigast ett visst datum.

Här ska du jobba med "pipes" och "grep".

Jag förstår inte riktigt vad dem menar med detta. Jag har suttit och läst på pipes och grep och som jag förstår det så ska man lätt kunna söka så som en specifik fil eller bokstav, på en annan sida så står där något helt annat.
Vet du någon sida där dem förklarar bra för en? Eller om du själv kan förklara.

Tacksam för all hjälp jag får.

Visa signatur

Jcswe

Permalänk
Medlem
Skrivet av Xcorp:

Väl medveten om det, men TS har försökt utan att lyckas. Om då rätt lösning presenteras kanske det gör det lättare att förstå vad som är fel.

Jo visst kan det göra det lättare, men den oskrivna regeln om skoluppgifter är ju att leda TS på rätt väg för att hitta lösningen själv, inte att ge TS rätt svar. Hade det inte varit en skoluppgift hade jag inte haft några invändningar.

Visa signatur

Mjölnir: Ryzen 9 3900X | X570-I | Ballistix Sport 32GB | Powercolor RX 5500XT 4GB ITX | Kolink Sattelite
Server: Ryzen 5 1400 | X470-F | Ballistix Sport 24GB | ASUS HD 7790 2GB | Sapphire RX 470 8GB ME | NZXT Switch 810

Permalänk
Medlem
Skrivet av Jcswe:

@Xcorp: Precis, då känns det som jag är på rätt spår.

Nästa uppgift skriver dem så här : Du ska redogöra för uppgiften enligt kraven för betyget C (föregående uppgift) men nu ska den ursprunliga filen istället innehålla en förteckning av vissa filer från din hemmakatalog som bygger på ett urval.

Urvalet kan antigen vara filer som har en viss filändelse eller som är skapade senast eller tidigast ett visst datum.

Här ska du jobba med "pipes" och "grep".

Jag förstår inte riktigt vad dem menar med detta. Jag har suttit och läst på pipes och grep och som jag förstår det så ska man lätt kunna söka så som en specifik fil eller bokstav, på en annan sida så står där något helt annat.
Vet du någon sida där dem förklarar bra för en? Eller om du själv kan förklara.

Tacksam för all hjälp jag får.

Vad är det du inte förstår? Förstår du inte pipes? Förstår du inte grep? Förstår du inte syntaxen? Förstår du inte standardströmmarna (stdin, stdout, stderr)? Förstår du inte vad målet med uppgiften är?

Har ni ingen kurslitteratur som går igenom allt ovan nämnda?

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

@LemonIllusion:

Detta är vad som står i den kurslitteratur som vi får :

Pipes & grep (svårt)
Pipes är svårt och tar lite tid att förstå. Därför är detta avsnitt mest tänkt för de som siktar mot de högsta betygen.

Man behöver inte behärska det till fullo men ha en grundläggande förståelse för hur det fungerar.

Pipes handlar i princip om att vi skickar vidare resultatet för ett kommando till ett nytt kommando så att det bildar en kejda.

För er som tittar på pipes så är också kommandot "grep" relevant.

Läs vidare i artikeln från Workaround nedan, eller från andra källor - det finns så klart oändligt med artiklar om detta på nätet, men just denna artikel är överskådlig och lättförståelig med figurer.

https://workaround.org/linuxtip/pipes
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Jag förstår inte vad målet med uppgiften är? Har aldrig jobbat med detta förut så det svårt att veta var jag ska börja.
Man skulle börjat labba med detta för 20 år sedan, inte när man är över 30! haha

Visa signatur

Jcswe

Permalänk
Medlem
Skrivet av Jcswe:

@Xcorp: Precis, då känns det som jag är på rätt spår.

Nästa uppgift skriver dem så här : Du ska redogöra för uppgiften enligt kraven för betyget C (föregående uppgift) men nu ska den ursprunliga filen istället innehålla en förteckning av vissa filer från din hemmakatalog som bygger på ett urval.

Urvalet kan antigen vara filer som har en viss filändelse eller som är skapade senast eller tidigast ett visst datum.

Här ska du jobba med "pipes" och "grep".

Jag förstår inte riktigt vad dem menar med detta. Jag har suttit och läst på pipes och grep och som jag förstår det så ska man lätt kunna söka så som en specifik fil eller bokstav, på en annan sida så står där något helt annat.
Vet du någon sida där dem förklarar bra för en? Eller om du själv kan förklara.

Tacksam för all hjälp jag får.

Ja, och du plockade bort rätt lösning från det jag gav dig, ett tips är att ~ (kallas tilde) är en shortcut för din hemkatalog, du kan också använda variabeln $HOME

Pipe används för att skicka outputen från ett kommando som input till ett annat.
Grep används för att "söka" i text och spottar bara ur sig de rader som matchar din söksträng enkelt beskrivet. Det finns flera flaggor till grep som ändrar beteendet.

Att använda pipe i kombination med grep är väldigt vanligt när man bara är intresserad av delar i en output.
För att nu inte ge dig hela lösningen så prova att köra

ip addr

och sedan

ip addr | grep inet

och jämför outputen.
Du borde sen kunna lista ut hur du gör för att lösa uppgiften.

I spoilern hittar du hur du löser uppgiften utan pipe och grep

För att lista alla filer med en viss ändelse kan du istället använda *

ls *.txt

kommer ge dig alla filer som slutar på .txt

ls Do*

kommer ge dig alla filer som börjar med Do, t.ex Downloads och Documents.

Find är ett annat kommando som är väldigt trevlig för att hitta filer, men det är överkurs just nu

find . -mtime 3

kommer lista alla filer som är max 3*24 timmar gamla, -mmin 3 gör samma sak fast max 3 minuter gamla

Dold text
Permalänk
Medlem
Skrivet av Jcswe:

@Xcorp: Precis, då känns det som jag är på rätt spår.

Nästa uppgift skriver dem så här : Du ska redogöra för uppgiften enligt kraven för betyget C (föregående uppgift) men nu ska den ursprunliga filen istället innehålla en förteckning av vissa filer från din hemmakatalog som bygger på ett urval.

Urvalet kan antigen vara filer som har en viss filändelse eller som är skapade senast eller tidigast ett visst datum.

Här ska du jobba med "pipes" och "grep".

Jag förstår inte riktigt vad dem menar med detta. Jag har suttit och läst på pipes och grep och som jag förstår det så ska man lätt kunna söka så som en specifik fil eller bokstav, på en annan sida så står där något helt annat.
Vet du någon sida där dem förklarar bra för en? Eller om du själv kan förklara.

Tacksam för all hjälp jag får.

Jag skulle börja med att tackla filändelser och hantera datum när det är klart. En bra resurs för att ta reda på hur ett kommando fungerar är att läsa manualfilen med hjälp av "man <kommando>", till exempel "man bash" för att få hjälp med kommandot "bash" (alltså skalet som du använder, "shell" på engelska). I manualen till bash finns det ett kapitel som heter "Pipelines", där det förklaras hur "pipes" fungerar. Här är en länk till en onlineversion av manualen: https://www.gnu.org/software/bash/manual/html_node/Pipelines....

Kortfattat kan man se en "pipe" som ett sätt att koppla ihop kommandon (och filer). De två vanligaste formerna är ">", som du använde tidigare och kopplar ihop "stdout" (standard output) med skrivande till en fil, och "|" som kopplar ihop "stdout" från ett kommando till "stdin" till ett annat kommando. I den tidigare uppgiften använde du "ls - l > uppdrag.txt" för att koppla stdout från "ls -l" till filen "uppdrag.txt". På ett liknande sätt kan du koppla ihop stdout från "ls -l" till ett annat kommando, till exempel "cat" genom att använda "ls -l | cat". Eftersom kommandot "cat" i sin grundform bara upprepar allt den får, alltså kopierar raderna den får via stdin till stdout, kommer du inte att se någon större skillnad, eller?

(Här är tanken att du ska testa dig fram till vad som händer, men en nödvändig detalj att känna till är att "ls" kan se om den körs interaktivt (ensamt från ett skal) eller som en del av ett annat kommando.)

Provkör gärna och se vad skillnaden blir mellan att köra "ls" och "ls | cat".

---

När det kommer till "grep" är det ett väldigt användbart kommando. Åter igen hjälper manualen oss på traven genom att förklara att vi behöver något som heter "pattern" när vi kör grep. Här ser vi också att grep kan (men inte måste) ta ett filnamn som argument, så vi kan provköra grep mot en fil.

Testa nu att köra "grep <någon klurig sträng att testa med> uppdrag.txt" och se om du kan komma på vad din kluriga sträng gör. Testa gärna med diverse ord och rader som du redan ser på skärmen.

---

När du har börjat få ett hum om hur grep fungerar kan vi prova att sätta ihop grep med ett annat kommando genom en pipe, då börjar det nämligen hända spännande saker!

Visa signatur

Mjölnir: Ryzen 9 3900X | X570-I | Ballistix Sport 32GB | Powercolor RX 5500XT 4GB ITX | Kolink Sattelite
Server: Ryzen 5 1400 | X470-F | Ballistix Sport 24GB | ASUS HD 7790 2GB | Sapphire RX 470 8GB ME | NZXT Switch 810

Permalänk
Medlem
Skrivet av Xcorp:

Ja, och du plockade bort rätt lösning från det jag gav dig, ett tips är att ~ (kallas tilde) är en shortcut för din hemkatalog, du kan också använda variabeln $HOME

Pipe används för att skicka outputen från ett kommando som input till ett annat.
Grep används för att "söka" i text och spottar bara ur sig de rader som matchar din söksträng enkelt beskrivet. Det finns flera flaggor till grep som ändrar beteendet.

Att använda pipe i kombination med grep är väldigt vanligt när man bara är intresserad av delar i en output.
För att nu inte ge dig hela lösningen så prova att köra

ip addr

och sedan

ip addr | grep inet

och jämför outputen.
Du borde sen kunna lista ut hur du gör för att lösa uppgiften.

I spoilern hittar du hur du löser uppgiften utan pipe och grep

För att lista alla filer med en viss ändelse kan du istället använda *

ls *.txt

kommer ge dig alla filer som slutar på .txt

ls Do*

kommer ge dig alla filer som börjar med Do, t.ex Downloads och Documents.

Find är ett annat kommando som är väldigt trevlig för att hitta filer, men det är överkurs just nu

find . -mtime 3

kommer lista alla filer som är max 3*24 timmar gamla, -mmin 3 gör samma sak fast max 3 minuter gamla

Dold text
Skrivet av Djhg2000:

Jag skulle börja med att tackla filändelser och hantera datum när det är klart. En bra resurs för att ta reda på hur ett kommando fungerar är att läsa manualfilen med hjälp av "man <kommando>", till exempel "man bash" för att få hjälp med kommandot "bash" (alltså skalet som du använder, "shell" på engelska). I manualen till bash finns det ett kapitel som heter "Pipelines", där det förklaras hur "pipes" fungerar. Här är en länk till en onlineversion av manualen: https://www.gnu.org/software/bash/manual/html_node/Pipelines....

Kortfattat kan man se en "pipe" som ett sätt att koppla ihop kommandon (och filer). De två vanligaste formerna är ">", som du använde tidigare och kopplar ihop "stdout" (standard output) med skrivande till en fil, och "|" som kopplar ihop "stdout" från ett kommando till "stdin" till ett annat kommando. I den tidigare uppgiften använde du "ls - l > uppdrag.txt" för att koppla stdout från "ls -l" till filen "uppdrag.txt". På ett liknande sätt kan du koppla ihop stdout från "ls -l" till ett annat kommando, till exempel "cat" genom att använda "ls -l | cat". Eftersom kommandot "cat" i sin grundform bara upprepar allt den får, alltså kopierar raderna den får via stdin till stdout, kommer du inte att se någon större skillnad, eller?

(Här är tanken att du ska testa dig fram till vad som händer, men en nödvändig detalj att känna till är att "ls" kan se om den körs interaktivt (ensamt från ett skal) eller som en del av ett annat kommando.)

Provkör gärna och se vad skillnaden blir mellan att köra "ls" och "ls | cat".

---

När det kommer till "grep" är det ett väldigt användbart kommando. Åter igen hjälper manualen oss på traven genom att förklara att vi behöver något som heter "pattern" när vi kör grep. Här ser vi också att grep kan (men inte måste) ta ett filnamn som argument, så vi kan provköra grep mot en fil.

Testa nu att köra "grep <någon klurig sträng att testa med> uppdrag.txt" och se om du kan komma på vad din kluriga sträng gör. Testa gärna med diverse ord och rader som du redan ser på skärmen.

---

När du har börjat få ett hum om hur grep fungerar kan vi prova att sätta ihop grep med ett annat kommando genom en pipe, då börjar det nämligen hända spännande saker!

Ni är bäst! Ni har verkligen skrivit väl informerat och det uppskattar jag som bara den. Jag ska prova mig fram idag och se hur det går.

Visa signatur

Jcswe

Permalänk
Medlem

I sista avsnittet i denna modul beskrivs ett par olika filer som styr inställningar för terminalen och användaren. Dessa script-filer läses in när terminalen startar respektive när en användare loggar in. Undersök möjligheterna med dessa script-filer och redogör för ett par lämpliga förändringar. Motivera "nyttan" av det du gjort.

Kan någon guida mig var filerna ligger? Har försökt goggla mig framåt men som sagt vet inte om jag är säker på vilka som är rätt.

Tacksam för svar - inlämning imorron.

Visa signatur

Jcswe

Permalänk
Medlem
Skrivet av Jcswe:

I sista avsnittet i denna modul beskrivs ett par olika filer som styr inställningar för terminalen och användaren. Dessa script-filer läses in när terminalen startar respektive när en användare loggar in. Undersök möjligheterna med dessa script-filer och redogör för ett par lämpliga förändringar. Motivera "nyttan" av det du gjort.

Kan någon guida mig var filerna ligger? Har försökt goggla mig framåt men som sagt vet inte om jag är säker på vilka som är rätt.

Tacksam för svar - inlämning imorron.

Är garanterat beskrivet i modulen som hänvisas. Lite svårt att svara på utan att veta vilket shell som används men jag utgår från att det är bash som är absolut vanligast.
~/.bashrc
~/.profile
/etc/profile
/etc/bash.bashrc

Permalänk
Medlem
Skrivet av Xcorp:

Är garanterat beskrivet i modulen som hänvisas. Lite svårt att svara på utan att veta vilket shell som används men jag utgår från att det är bash som är absolut vanligast.
~/.bashrc
~/.profile
/etc/profile
/etc/bash.bashrc

Ursäka mig, i bash miljö står där.

När jag letar i filhanteraren så hittar jag ej de filerna. Och när jag är inne i terminalen så åtkomst nekad. Som jag förstår det så är det script fil som jag ska jämföra med, när terminalen startas och när man loggar in.

Skickades från m.sweclockers.com

Visa signatur

Jcswe

Permalänk
Medlem
Skrivet av Jcswe:

Ursäka mig, i bash miljö står där.

När jag letar i filhanteraren så hittar jag ej de filerna. Och när jag är inne i terminalen så åtkomst nekad. Som jag förstår det så är det script fil som jag ska jämföra med, när terminalen startas och när man loggar in.

Skickades från m.sweclockers.com

Alla filer som börjar med en punkt (.) är dolda och visas i filhanteraren genom att trycka CTRL+H (jag antar att du kör gnome och nautilus). I terminalen visar du dom genom att lägga på flaggan -a, -l är också trevligt för att få en detaljerad lista och självklart kan du kombinera dom till -la. Jag brukar oftast använda -h och ibland -t eller-S ihop med -r.

Alla filer jag har hänvisat till körs när du öppnar en ny session för en terminal, alltså när du loggar in på consolen eller öppnar ett nytt terminalfönster (för att förenkla). Det finns även skript som körs/läses in när du loggar in i din DE (desktop environtment), det grafiska gränssnittet men jag tror inte att det är dom som du ska titta på.

Permalänk
Medlem
Skrivet av Xcorp:

Ja, och du plockade bort rätt lösning från det jag gav dig, ett tips är att ~ (kallas tilde) är en shortcut för din hemkatalog, du kan också använda variabeln $HOME

Pipe används för att skicka outputen från ett kommando som input till ett annat.
Grep används för att "söka" i text och spottar bara ur sig de rader som matchar din söksträng enkelt beskrivet. Det finns flera flaggor till grep som ändrar beteendet.

Att använda pipe i kombination med grep är väldigt vanligt när man bara är intresserad av delar i en output.
För att nu inte ge dig hela lösningen så prova att köra

ip addr

och sedan

ip addr | grep inet

och jämför outputen.
Du borde sen kunna lista ut hur du gör för att lösa uppgiften.

I spoilern hittar du hur du löser uppgiften utan pipe och grep

För att lista alla filer med en viss ändelse kan du istället använda *

ls *.txt

kommer ge dig alla filer som slutar på .txt

ls Do*

kommer ge dig alla filer som börjar med Do, t.ex Downloads och Documents.

Find är ett annat kommando som är väldigt trevlig för att hitta filer, men det är överkurs just nu

find . -mtime 3

kommer lista alla filer som är max 3*24 timmar gamla, -mmin 3 gör samma sak fast max 3 minuter gamla

Dold text

Jag sitter med precis samma uppgift nu och kan för mitt liv inte förstå hur jag ska kunna använda pipes och grep för att lösa uppgiften. Jag löste det först genom att precis som i din "spoiler" skriva in ett argument i scriptfilen men som jag förstår uppgiften så ska man köra scriptfilen och skriva ett argument till den för att den skall komma fram till samma resultat. Alltså ./"scriptfil.sh" "Argument". Är inte det möjligt?

Visa signatur

Lian Li PC-O11 Dynamic Vit | ASUS ROG STRIX B550-A GAMING | AMD
AMD Ryzen 7 5800X 3.8 GHz 36MB | ASUS GeForce RTX 3080 10GB ROG STRIX GAMING OC WHITE V2 | Corsair 32GB (2x16GB) DDR4 2666MHz CL16 | Corsair Hydro H150i PRO RGB 360

Permalänk
Medlem
Skrivet av Redstrom:

Jag sitter med precis samma uppgift nu och kan för mitt liv inte förstå hur jag ska kunna använda pipes och grep för att lösa uppgiften. Jag löste det först genom att precis som i din "spoiler" skriva in ett argument i scriptfilen men som jag förstår uppgiften så ska man köra scriptfilen och skriva ett argument till den för att den skall komma fram till samma resultat. Alltså ./"scriptfil.sh" "Argument". Är inte det möjligt?

Det är en gammal tråd och jag har inte läst igenom hela igen. Men hur ser det skript ut nu och vad försöker du göra?