String-operationer i Bash?

1 view
Skip to first unread message

Bertel Lund Hansen

unread,
Jan 14, 2016, 8:26:40 AM1/14/16
to
Hvordan kan man manipulere strings i Bash?

Og forresten: Kan man lave et array?

--
Bertel - stadig med Linux


Anders Wegge Keller

unread,
Jan 14, 2016, 9:33:25 AM1/14/16
to
On Thu, 14 Jan 2016 13:23:56 -0000 (UTC)
Bertel Lund Hansen <gade...@lundhansen.dk> wrote:

> Hvordan kan man manipulere strings i Bash?
>
> Og forresten: Kan man lave et array?

Det lyder lidt som et XY-problem. Hvad er det du ønsker at komme frem til?

--
//Wegge

Jan Hansen

unread,
Jan 14, 2016, 10:48:16 AM1/14/16
to
Bertel Lund Hansen skrev Thu, 14 Jan 2016 13:23:56 +0000:

> Hvordan kan man manipulere strings i Bash?

Således, http://tldp.org/LDP/abs/html/string-manipulation.html

> Og forresten: Kan man lave et array?

det er ikke noget problem http://tldp.org/LDP/abs/html/arrays.html



Bertel Lund Hansen

unread,
Jan 14, 2016, 1:05:16 PM1/14/16
to
Anders Wegge Keller skrev:

>> Hvordan kan man manipulere strings i Bash?

>> Og forresten: Kan man lave et array?

> Det lyder lidt som et XY-problem. Hvad er det du ønsker at komme frem til?

Det konkrete problem er at jeg har lavet en bash-fil til at
ordne backup. Der er nogle punktum-mapper der skal zippes, men
jeg vil gerne strippe punktummet væk når zipfilens navn skal
dannes.

I almindelighed er jeg ude på at opnå samme vidensniveau i Bash
som jeg har i bat-programmering. Og i det hele taget skal jeg
lære Linuxmiljøet at kende selv om jeg ikke er på bar bund.

Poul-Erik Andreasen

unread,
Jan 14, 2016, 4:15:36 PM1/14/16
to
Med mindre du ønsker at grave dig ned i Linux interne strukturer
bør du sky bash som pesten den er fyldt med gotcha's. Jeg har engang
smadret en harddisk på det grundlag. Der er masser af alternativer.

Se

https://en.wikipedia.org/wiki/Comparison_of_command_shells

--
Venlig hilsen

Poul-Erik Andreasen

Lars Kongshøj

unread,
Jan 14, 2016, 6:13:29 PM1/14/16
to
On 01/14/2016 07:02 PM, Bertel Lund Hansen wrote:
> Det konkrete problem er at jeg har lavet en bash-fil til at
> ordne backup. Der er nogle punktum-mapper der skal zippes, men
> jeg vil gerne strippe punktummet væk når zipfilens navn skal
> dannes.

Konkret kan man fx manipulere strengen ved hjælp af sed (stream editor):

lars@lars-dell:~$ echo .xyz | sed 's/^\.//'
xyz

Andre gode programmer er cut, tail, head, awk.

Man kan også lave meget i selve shellen. Selv bruger jeg zsh, men det er
nok ikke så afgørende for de fleste.

En google på "shell programming tutorial" er nok den bedste start.

/Lars

Bertel Lund Hansen

unread,
Jan 15, 2016, 4:57:40 AM1/15/16
to
Poul-Erik Andreasen skrev:

> Med mindre du ønsker at grave dig ned i Linux interne strukturer
> bør du sky bash som pesten den er fyldt med gotcha's. Jeg har engang
> smadret en harddisk på det grundlag. Der er masser af alternativer.

> Se

> https://en.wikipedia.org/wiki/Comparison_of_command_shells

Meget imponerende oversigt, men den gør det ikke let at vide
hvilken shell der er nem at arbejde med.

Hvilken kan folk anbefale til de almindelige husholdningsrutiner?

Hvis jeg installerer en anden shell, aktiverer den så i
virkeligheden Bash, eller vil de være uafhængige af hinanden?

Hvis man ikke har en shell, kan man så slet ikke lave noget?

Poul-Erik Andreasen

unread,
Jan 15, 2016, 10:12:44 PM1/15/16
to
On 01/15/2016 10:54 AM, Bertel Lund Hansen wrote:
> Poul-Erik Andreasen skrev:
>
>> Med mindre du ønsker at grave dig ned i Linux interne strukturer
>> bør du sky bash som pesten den er fyldt med gotcha's. Jeg har engang
>> smadret en harddisk på det grundlag. Der er masser af alternativer.
>
>> Se
>
>> https://en.wikipedia.org/wiki/Comparison_of_command_shells
>
> Meget imponerende oversigt, men den gør det ikke let at vide
> hvilken shell der er nem at arbejde med.


Da du er C-programmør skulle du kigge på csh eller tcsh her er
syntaksen C lignende.

>
> Hvilken kan folk anbefale til de almindelige husholdningsrutiner?
>
> Hvis jeg installerer en anden shell, aktiverer den så i
> virkeligheden Bash, eller vil de være uafhængige af hinanden?

Nej En shell er i alle heseender et normalt program det er ikke sådan at
bash har noge særlige privilegier. Det kommunukerer dels med kernen
derekte med kernekald dels via bibilioteksrutiner. Du kan prøve at
køre et eller andet lille program igennem strace, så kan du se alle
sytemkaldende. Hvis du prøver med med deverse shells vil de sikker vise
nogenlunde det samme.

>
> Hvis man ikke har en shell, kan man så slet ikke lave noget?
>

Man kan selvfølgelig bruge en Gui men det er i princippet bare en
grafisk shell.

Det er dog muligt at lave såkaldte turnkey systemer. Hvor
opstartssekvensen automatisk starter det slutbrugerprogram der
skal anvendes. Det bruges f.eks til diverse fingerbetjente
informationsskærme der ses mange steder efterhånden.
Ofte vil de dog alligevel være startet via et shellscript.
Det gør det lidt smidigere vis de skal serviceres.

Bertel Lund Hansen

unread,
Jan 16, 2016, 8:05:36 AM1/16/16
to
Poul-Erik Andreasen skrev:

>> Meget imponerende oversigt, men den gør det ikke let at vide
>> hvilken shell der er nem at arbejde med.

> Da du er C-programmør skulle du kigge på csh eller tcsh her er
> syntaksen C lignende.

Jeg søgte på nettet efter en manual over Csh og fandt denne:

http://www.grymoire.com/Unix/Csh.html

Jeg læste så først hans artikel om "C Shell Problems". Den var
lidt latterlig fordi de fleste af de 'problemer' han opregnede,
var ret udsyrede, og nogle af dem var logiske forhold som jeg
ikke ville regne for fejl.

Derefter gik jeg i gang med hans manual - men det var bare mere
af samme skuffe. Han bliver ved med at brokke sig over Csh i en
manual! Det er for åndssvagt.

Men hans eksempler overbeviste mig om at det ikke vil være
specielt nemmere for mig at sætte mig ind i Csh frem for Bash.
Jeg har derfor besluttet mig til at lave mine scripts i Python
som under alle omstændigheder er en million gange nemmere at
skrive i end en shell. Og så vil jeg basere det på Bash når
jeg skal lave systemkald fordi jeg kender det en smule og fordi
det allerede er indbygget.

Men tak for forklaringerne - og generelt tak til alle der hjælper
mig her i gruppen. Jeg er nok ikke færdig med at spørge.

gaffa

unread,
May 24, 2016, 1:10:06 PM5/24/16
to
On Thu, 14 Jan 2016 18:02:33 -0000 (UTC)
Bertel Lund Hansen <gade...@lundhansen.dk> wrote:

Det er ret ligetil med expansions i bash. Hvis du har en variabel (eller et
element i en array), og vil fjerne et mønster fra starten (fx. et punktum), så
er det så simpelt som:

variabel=".filnavn"
echo -e "${variabel#.}"

Man skal sgu ikke være bange for bash, men det er en fornuftig ting at sørge
for at have styr på sine anførselstegn så formateringen ikke ødelægger
betydningen af scriptet.

--
gaffa

Reply all
Reply to author
Forward
0 new messages