Gå til innhold

Trenger litt hjelp fra en oppegaaende scripter


Anbefalte innlegg

Er det noe som kunne veare saa vennlig aa hjelpe meg med aa lage ett lite script. Det er enentlig to ting jeg trenger hjelp med,

 

Det jeg vil gjoere er skrive til en hvilken som helst fil (feks bestemor.txt) som kommer opp naar jeg skrver "ls -lah"

 

Visst du er i det virkelig hjelpsome hjoernet i dag saa hadde det veart utrolig fint om du/dere ogsaa kunne hjulpet meg med aa skrive alt som staar paa en bestemt linje i "ls -lah /home/bestemor"

 

PS: Det med ls -lah er bare ett eksempel, det er flere ting jeg vil bruke det til ..

Lenke til kommentar
Videoannonse
Annonse

Til slinke enkle operasjoner så trengs det ikke mye skripting, men jeg prøver å gi noen tips.

 

Første du trenger å gjøre er å opprette en fil med første linje som er :

 

#!/bin/bash

 

Da bruker bash til å kjøre resten av skriptet.

 

La oss kalle denne filen listfiler.sh

husk at denne filen må være kjørbar. - chmod 755 listfiler.sh

 

./listfiler.sh for å kjøre.

 

Dersom du vil bruke argument til skriptet, dvs listfiler.sh mormor filtekst.txt

så får du tak i mormor ved å bruke $1 og filtekst ved å bruke $2 osv, prøv med

 

#!/bin/bash

echo $1 $2 $3

 

Så er det over til å gjøre det du vil

 

#!/bin/bash

ls -lah > bestemor.txt

 

eller

 

#!/bin/bash

ls -lah $1 > bestemor.txt

 

I *nix ånd så har man tre output/input 'kanaler' (hva er et godt norsk ord?), stdin (som regel tastatur), stdout (som regel skjerm) og stderror (som regel skjerm)

 

ls -lah vil liste filene til stdout.

 

ved å bruke > så tar man å 'redirigerer' stdout til en fil.

>> vil legge til i slutten på fila.

 

en annen måte er å redirigere stdout fra en kommando til stdin til en annen, en såkalt pipe.

 

ls -lah | grep bestemor

 

grep vil filtrere ut alle linjer som ikke har bestemor i seg.

 

Tester

 

det er en del enkle tester man kan bruke i bash, man test er et godt utgangspunkt. Gir et enkelt eksempel først :

 

[ -f bestermoaktiv ] && echo filen bestemor finnes.

 

[ -f ] sjekker om en fil finnes, returner exit kode 0 dersom den finner den (true) eller 1 dersom ikke.

 

dersom man vil skrive flere kommandoer på en linje, så er det vanlig å bruke ;

ls -l ; echo listet filer

 

&& er spesiell siden den kun kjører dersom forrige program gikk ok (exit kode=0)

 

 

Nå har jeg skrivd littegranne, fyr løs dersom du stopper opp på noe.

Lenke til kommentar

Helt utrolig bra, du burde laget en webside og kurset folk.. Det er sikkert veldig enkelt for mange av dere der ute som har peiling me naar noen forklarer saa godt saa er learer man saa mye raskere..

 

 

Sitter ogsaa litt aa funderer paa aa lage ett lite script som gir en slags meny ..

Dette var det jeg tenkte:

 

Skriver sh bestemor

Saa kommer det opp en meny med valg fra feks 1 til 10

Brukeren kan da taste 1 og da skal det skje noe :) hehe

Feks .. bruker taster 1 > "Hello world" blir skrevet ut

bruker taster 2 saa starter mc (midnight commander)

bruker taster 3 og linux rebooter ..

 

Kunne noen hjulpet meg med dette ?

Lenke til kommentar

Takker for den linken .

Jeg skal ta og lese den naar jeg faar tid en dag .. Genial pdf ..

 

Men er det noen som kan gi meg ett eksempel paa det eksempelet jeg gav ?

 

Hadde veart morro om vi alle kunne gaatt igjenom og leart litt her, faatt i gang en thread om bash scripting. Sikkert mange som lurer og har lyst aa leare litt om bash scripting ..

Lenke til kommentar

Klarte aa lage ett ut av ett annet eksempel jeg fant paa nettet..

Bash scripting er gøy.

 

#!/bin/bash

killall mpg123

echo -e "IINET's Gratis Shoutcast Serveren"

echo -e "Tast in nummeret for radio kanalen du vil streame"

echo -e "*1* Trance/Techno"

echo -e "*2* DnB/Jungle"

echo -e "*3* Underground & Mainstream HipHop Beats"

echo -e "*4* Mostly Classical music, relaxing"

echo -e "*5* 100% Psychedelic Trance"

echo -e "*6* Modern Alternative Rock"

echo -e "*7* Hardrock Music"

echo -e "*exit*"

read character

if [ "$character" = "1" ]; then

killall mpg123

mpg123 -b 6000 http://trance.ii.net:8001

 

else

if [ "$character" = "2" ]; then

killall mpg123

mpg123 http://trance.ii.net:8001

exit

 

else

if [ "$character" = "3" ]; then

killall mpg123

mpg123 -b 5000 http://trance.ii.net:8003

exit

else

if [ "$character" = "4" ]; then

killall mpg123

mpg123 -b 5000 http://trance.ii.net:8004

exit

else

if [ "$character" = "5" ]; then

killall mpg123

mpg123 -b 5000 http://trance.ii.net:8005

exit

else

if [ "$character" = "6" ]; then

killall mpg123

mpg123 -b 5000 http://trance.ii.net:8006

exit

else

if [ "$character" = "7" ]; then

killall mpg123

mpg123 -b 5000 http://trance.ii.net:8007

exit

else

if [ "$character" = "exit" ]; then

killall mpg123

exit

else

echo "What? Try again .. "

 

fi

fi

fi

fi

fi

fi

fi

fi

Lenke til kommentar


if [ "$character" = "1" ]; then

        killall mpg123

        mpg123 -b 6000 http://trance.ii.net:8001



else

     if [ "$character" = "2" ]; then

         killall mpg123

   mpg123 http://trance.ii.net:8001

   exit



else

     if [ "$character" = "3" ]; then

         killall mpg123

         mpg123 -b 5000 http://trance.ii.net:8003

         exit



(...)



fi

fi

fi

fi

fi

fi

fi

fi

Tips: bruk "elif". Da slipper du unna med bare en "fi" tilslutt.

 

Eks:


 if [ "$character" = "1" ]

 then

   killall mpg123

   mpg123 -b 6000 http://trance.ii.net:8001

 elif [ "$character" = "2" ]

 then

   killall mpg123

   mpg123 http://trance.ii.net:8001

   exit

 elif [ "$character" = "3" ]

 then

   killall mpg123

   mpg123 -b 5000 http://trance.ii.net:8003

   exit

  

 (...)



 fi

Lenke til kommentar

Takker for den Cronius.

 

Er det noen som tilfeldigvist vet hvordan jeg skal kunne starte mpg123 streamene som bakgrunnsprocesser ?

 

Slik at scriptet startet streamen i bakgrunnen slik at jeg kan velge videre paa kanaler visst jeg oensker aa bytte.

 

Slik det er naa maa jeg stoppe streamen manuelt og starte scriptet igjen for aa velge en ny kanal.

 

jeg har proevd litt med screens men jeg har ikke faatt det til ..

Lenke til kommentar

Dersom du vil ha menyer, så lager dialog dem for deg :

(dette krever nyere dialog enn det som kommer med rh 7.1 og lavere)

#!/bin/bash

 

#her starter man avspilling av musikk

spillmusikk()

{

killall mpg123

mpg123 $stream & # & gjør at man starter prosessen i bakgrunnen

 

# gå til hovedmenyen etter man har startet spilling av musikk

start

}

 

#hovedmenyen :

start()

{

valg=$(dialog --stdout --no-cancel --menu "Mp3 musikk på $HOSTNAME" 24 80 17 1 "Trance/Techno" 2 "DnB/Jungle" x "Exit")

 

case $valg in

1 ) stream="http://trance.ii.net:8001" ; spillmusikk ;;

2 ) stream="http://trance.ii.net:8002" ; spillmusikk ;;

x ) exit 0 ;;

esac

}

 

#for å starte hovedmenyen

start

Lenke til kommentar

 

valg=$(dialog --stdout --no-cancel --menu "Mp3 musikk på $HOSTNAME" 24 80 17 1 "Trance/Techno" 2 "DnB/Jungle" x "Exit")

 

Tusen tusen takk for denne, men den virker ikke helt paa min redhat 8.0 box, jeg faar feilmelding paa --menu.

 

Hadde du giddet aa forklare den linjen som jeg har quota ut step by step ?

Jeg forstaar ikke helt hva den betyr.

Lenke til kommentar

valg=$()

tilordne variablen valg resultat av kommando inni ()

 

--stdout : standard til dialog er å putte valg i stderr, dette er for å få valget til stdout

--no-cancel : fjerne cancel valget

--menu : meny til dialog, denne fungerer ikke hos deg, prøv med man dialog.

--menu hos meg må ha fire valg. menytekst, eks "Mp3 musikk på $HOSTNAME", height, eks 24 , width, eks 80, menu-height, eks 17.

 

så kommer valga, de er i par, første er 'hurtigtast' og hva som returneres, eks : 1

Og så litt mer tekst til valget

eks : "Trance/Techno"

 

Kan du skrive man dialog og så paste innholdet til --menu + feilmeldinga du får? på min boks så er det :

 

--menu text height width menu-height [ tag item ] ...

As its name suggests, a menu box is a dialog box that can be used to present a list of choices in the form of a menu for the user to choose. Choices are displayed in the order given. Each menu entry consists of a tag string and an item string. The tag gives the entry a name to distinguish it from the other entries in the menu. The item is a short description of the option that the entry represents.

The user can move between the menu entries by pressing the UP/DOWN keys, the first letter of the tag as a hot-key, or the number keys 1-9. There are menu-height entries displayed in the menu at one time, but

the menu will be scrolled if there are more entries than that. When dialog exits, the tag of the chosen menu entry will be printed on stderr. If the --help-button option is given, the corresponding help text will be printed if the user selects the help button.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...