oversete shellkommandoer - del dine tricks

From: Søren Schrøder (none@sch--chaos.dk.lh.bsd-dk.dk)
Date: Thu 11 Jun 2009 - 21:38:13 CEST


Date: Thu, 11 Jun 2009 21:38:13 +0200
Subject: oversete shellkommandoer - del dine tricks
From: Søren Schrøder <none@sch--chaos.dk.lh.bsd-dk.dk>
To: bsd-dk@bsd-dk.dk

Hej liste.

I forlængelse af "tail -1" mailen tidligere idag, kom jeg til at tænke
på at der findes så mange fantastiske unix-kommandoer, som mange tager
for givet, men som andre slet ikke har bemærket. Kommandoer som man
slet ikke forstår at man kan leve uden når man først har lært dem at
kende.

Lad denne mail være en opfordring til at dele ud af dine personlige
lidt specielle "shell-tricks".

Husk at tråden skal ses som en intro til unix tools, og ikke en syntax
krig eller en debat om den ene eller anden metode sparer 0.02% cpu.
Mantraet må være: Der er mere end en måde at løse problemerne på. Og
jo flere værktøjer, jo flere måder.

Jeg skal da gerne lægge ud med en af mine favoritter: JOT(1)

NAME
     jot -- print sequential or random data

Dette lille tool er fantastisk når man lige skal bruge en række tal
til et lille shellscript. Forestil dig feks at du skal oprette en
bunke directories til et eller andet projekt. Opgaven lyder på at der
skal være 4 directories af typen /nfs1..3 der hver skal have 4 buckets
med 5 buckets hver, således at der bliver 60 (3*4*5) directories der
hedder /nfsx/bucketY/bucketZ

Her er jot din bedste ven: "jot 3 1" outputter 3 linier af tal,
startende fra 1, dvs 1 2 3.

for X in `jot 3 1`
do
  for Y in `jot 4 1`
  do
    for Z in `jot 5 1`
    do
       #vi echoer bare, mens vi leger med jot
       echo mkdir -p /nfs$X/bucket$Y/bucket$Z
    done
  done
done

mkdir -p /nfs1/bucket1/bucket1
mkdir -p /nfs1/bucket1/bucket2
mkdir -p /nfs1/bucket1/bucket3
mkdir -p /nfs1/bucket1/bucket4
mkdir -p /nfs1/bucket1/bucket5
mkdir -p /nfs1/bucket2/bucket1
mkdir -p /nfs1/bucket2/bucket2
...

Når dit script outputter det du forventer, så piper du det bare over i
/bin/sh, eller fjerner "echo"

for X in `jot 3 1`
do
  for Y in `jot 4 1`
  do
    for Z in `jot 5 1`
    do
       #vi echoer bare, mens vi leger med jot
       echo mkdir -p /nfs$X/bucket$Y/bucket$Z
    done
  done
done | /bin/sh

Et andet eksempel: Du har via syslogNG logfiler af typen
messages.YYMMDD.gz som du gerne vil processere. Du vil gerne kigge på
de seneste 14 dage. Øv hvor besværligt. Nix... Ikke med jot:

man laver en talrække på 1..14 med jot: jot 14 1
og bruger /bin/date -v

for i in `jot 14 1`
do
  zgrep "su: " messages.`/bin/date -v-${i}d +"%y%m%d"`.gz
done

(ok, "ls -1 | tail -14" kunne løse samme problem, men så fik vi ikke
brugt jot, og ls -1 tager ikke hensyn til eventuelle dage hvor der
IKKE er logfiler fra. Der er altid mere end een måde at gøre tingene
på).

check mansiden for jot - der er masser af eksempler. Prøv dem lidt af,
så du husker jot næste gang du har brug for en række tal.

-- 
Søren Schrøder.
Obey Gravity - It's the law !



This archive was generated by hypermail 2b30 : Tue 30 Jun 2009 - 23:00:01 CEST