Simpel Bash programmering

Här diskuteras programmering och utveckling
emilvr6
Inlägg: 148
Blev medlem: 24 dec 2007, 15:19

Simpel Bash programmering

Inlägg av emilvr6 »

Jag håller på att titta på BASH programmering.

Jag har gjort några enkla program med några if satser och så.

Men jag vill göra ett program där jag kan lägga till argument direkt när jag kör filen, så här:

./scriptet A

Där A startar en funktion i scriptet som inte startas när man bara kör
./scriptet

Hur gör jag?
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Simpel Bash programmering

Inlägg av Osprey »

Argumenten finns alltid med automatiskt och inne i scriptet kan du komma åt dem med $1 för det första argumentet och sedan $2, $3, $4 etc. $0 är namnet på själva scriptet och $@ är alla argumenten på en gång... :)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Simpel Bash programmering

Inlägg av Konservburk »

"$1" är första argumentet
"${10}" är tionde argumentet
"$#" är antalet argument
"$@" är alla argument som en sträng vardera
"$*" är alla argument som en enda sträng

Det går enkelt att stega igenom alla argumenten med en vanlig for-loop:

Kod: Markera allt

for ARG
do
   echo "$ARG"
done
shift plockar bort det första argumentet
shift 2 plockar bort de två första argumenten

getopts hittar flaggor bland argumenten:

Kod: Markera allt

while getopts ab: OPT
do case "$OPT" in
   a)
      echo flaggan -a hittad
   ;;
   b)
      echo flaggan -b hittad med argument: "$OPTARG"
   ;;
   esac
done
emilvr6
Inlägg: 148
Blev medlem: 24 dec 2007, 15:19

Re: Simpel Bash programmering

Inlägg av emilvr6 »

Åh va bra. Nu börjar det se till att bli i ordning. :)
Har gjort ett litet script som listar alla mappar och filer.

Kod: Markera allt

#!/bin/sh
mapp="/home/emil"
ag="$1"

for i in "$mapp"/*.$ag
do
    echo ${i%%.$ag}
done
Men om jag bara vill lista filer och inga mappar? Hur gör jag? Får det inte att funka. Mapparna kommer hela tiden med.
Användarvisningsbild
johanre
Serveradmin
Inlägg: 3888
Blev medlem: 22 okt 2006, 09:13
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Malmö

Re: Simpel Bash programmering

Inlägg av johanre »

emilvr6 skrev:Men om jag bara vill lista filer och inga mappar? Hur gör jag? Får det inte att funka. Mapparna kommer hela tiden med.
Nu var det inte detta du var ute efter men jag kastar in detta mest som ett exempel på hur man kan lösa samma problem på många olika sätt:

Kod: Markera allt

find ./ -maxdepth 1 -type f
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Simpel Bash programmering

Inlägg av Konservburk »

emilvr6 skrev:

Kod: Markera allt

#!/bin/sh
mapp="/home/emil"
ag="$1"

for i in "$mapp"/*.$ag
do
    echo ${i%%.$ag}
done
Men om jag bara vill lista filer och inga mappar? Hur gör jag? Får det inte att funka. Mapparna kommer hela tiden med.
Om vi utgår från din kod så kan du lägga till en if-sats som kontrollerar så att det verkligen är en fil...

Kod: Markera allt

for i in "$mapp"/*.$ag
do
    if [ -f "$i" ]
    then
       echo ${i%%.$ag}
    fi
done
emilvr6
Inlägg: 148
Blev medlem: 24 dec 2007, 15:19

Re: Simpel Bash programmering

Inlägg av emilvr6 »

Nu börjar det se vackert ut! :)
Nu har jag fixat så texten blir "fet" men hur gör jag så den blir kursiv?

Jag använde mig av kommandot:

tput bold;
echo "texten"
tput sgr0;

Men tput italic; funkade inte så bra... någon som har en aning? :)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Simpel Bash programmering

Inlägg av Konservburk »

emilvr6 skrev:Men tput italic; funkade inte så bra... någon som har en aning? :)
Jag vet inte om det går annat än genom att byta font.

Vill du ha understruken text så kan du få det med tput smul
Skriv svar

Återgå till "Programmering och webbdesign"