Gå til innhold

Problemer med veldig enkel bash-programmering


Anbefalte innlegg

Jeg sitter her med en liten oppgave i bash-programmering. Jeg er totalt newbie på linux, så dette har jeg virkelig ikke peiling på, men håper at noen kan hjelpe meg :)

 

Scriptet jeg har ser slik ut:

 

#!/bin/bash

clear

echo "Du er logget inn som: "

whoami

echo "Din gruppenummer er: "

id -g

echo "Ditt skall er: "

echo $SHELL

echo "Din nåværende plassering er: "

pwd

echo "Dette skriptet ble kjørt: "

date

 

Dette kjører helt fint og jeg får fram det jeg vil. Poenget er at jeg skal ha dette scriptet til å vises både på skjerm og skrives til en fil. Jeg prøvde meg derfor med noe slikt:

 

#!/bin/bash

clear

h='echo "Du er logget inn som: "; whoami; echo "Din gruppenummer er: "; id -g; echo "Ditt skall er: "; echo $SHELL; echo "Din nåværende plassering er: "; pwd; echo "Dette skriptet ble kjørt: "; date'

$h

 

Syntakes for selve scriptet ut på én linje er rett og kjørte, og jeg fikk også lagt denne inn i variabelen $h. Tenkte så at jeg skulle bruke en kommando av typen "$h > fil.x" for å skrive innholdet til fil. Det var her ting gikk i stampe siden den da naturlig vis bare kopierer inn innholdet i variabelen i stedet for resultatet av å kjøre den.

 

Har tenkt på å først skrive innholdet til fil og så bruke "cat" til å dumpe innholdet ut på skjermen, men får ikke til dette heller. Noen som har noen gode idéer på hvordan jeg kan få innholdet mitt inn i en fil og på skjermen?

Lenke til kommentar
Videoannonse
Annonse


#!/bin/bash 

clear



echo "Du er logget inn som: ";

whoami;

echo "Din gruppenummer er: ";

id -g;

echo "Ditt skall er: ";

echo $SHELL;

echo "Din nåværende plassering er: ";

pwd;

echo "Dette skriptet ble kjørt: ";

date;

if [ ! -e utfil ]

then

$0 > utfil

fi



Fungerer.

if [ ! -e utfil ]

then

$0 > utfil

fi

 

Forklaring:

[ er et eget program for å legge seg inn i if-er.

! snur om på den, sånn at rett blir galt og galt blir rett

-e tester om utfil er en fil og eksisterer.

 

Så, når fila 'utfil' IKKE eksisterer, så kjører den seg selv en gang til og redirecter ouput til utfil.

 

Eventuelt kan du bytte ut alle forekomster av utfil med $1, som betyr kommandolinjeargument nr.1 (altså, ./script.sh hepp gjør 'hepp' til outputfil)

Lenke til kommentar
Du trenger ikke legge alt på en linje for å >-e det ut til en fil.

Programnavnet blir lagret som $0, så du kan bruke $0 > utfil.

Men, jeg prøvde dette, og kom plutselig på at jeg hadde laget en forkbomb..

Må mekke en if da eller noe sånn.

 

Hmmm, at $0 blir programmet var fint å vite :)

 

Men dette forandrer ikke på problemet med at man ved å kjøre $0 > fil kun får innholdet av variabelen, ikke resultatet av å kjøre koden som ligger i variabelen...?

Lenke til kommentar
Du trenger ikke legge alt på en linje for å >-e det ut til en fil.

Programnavnet blir lagret som $0, så du kan bruke $0 > utfil.

Men, jeg prøvde dette, og kom plutselig på at jeg hadde laget en forkbomb..

Må mekke en if da eller noe sånn.

 

Hmmm, at $0 blir programmet var fint å vite :)

 

Men dette forandrer ikke på problemet med at man ved å kjøre $0 > fil kun får innholdet av variabelen, ikke resultatet av å kjøre koden som ligger i variabelen...?

Koden i innlegget mit over fungerer hos meg, men du kan jo kjøre

exec $0 > utfil

Lenke til kommentar


#!/bin/bash

clear

utfil="utfil.txt"

function infob {



echo "Du er logget inn som: `whoami`" > $utfil

echo "Din gruppenummer er: `id -g`" >> $utfil

echo "Ditt skall er: $SHELL" >> $utfil

echo "Din nåværende plassering er: `pwd`" >> $utfil

echo "Dette skriptet ble kjørt: `date`" >> $utfil

       }

infob

cat $utfil

 

Denne gjør det du vil :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...