  BASH Programming - Introduction HOW-TO
  by Mike G mikkey at dynamo.com.ar
  Mon Jul 27 11:47:00 ART 2000
  { UTi
  July 2000

  ́̕ÃVFXNvg̃vOn߂l̎Ƃ
  ďĂ܂B(^Cg悤)͍xȓe
  ł͂܂B킽gAVFvÕGLXp[gł͂
  łA܂ĂBlł܂BƎv̂́A
  玩wׂ邾낤ƎvłA瑼l̖
  ɗȂƍlłBǂȃtB[hobN}܂B
  ɁApb``łƊv܂ :)
  ______________________________________________________________________

  ڎ

  1. Cg_NV
     1.1 ŐVo[W̓ꏊ
     1.2 Kv
     1.3 ̎̕g

  2. ɃVvȃXNvg
     2.1 ` Hello World XNvg
     2.2 ɃVvȃobNAbvXNvg

  3. _CNgVɂ(redirection)
     3.1 _ƊȒPȃt@X
     3.2 Tv: stdout  file 
     3.3 Tv: stderr  file 
     3.4 Tv: stdout  stderr 
     3.5 Tv: stderr  stdout 
     3.6 Tv: stderr  stdout  file 

  4. pCv (pipe)
     4.1 Ȃ̂Aǂ̂
     4.2 Tv: sed gȒPȃpCv
     4.3 Tv: 'ls -l *.txt' ̑փR}h

  5. ϐ (variable)
     5.1 Tv: ϐg Hello World!
     5.2 Tv: ɃVvȃobNAbvXNvg(ǔ)
     5.3 [Jϐ

  6. (conditionals)
     6.1 ZI[
     6.2 Tv: if .. then ɂ{Iȏ̗
     6.3 Tv: "if .. then ... else"  g{Iȏ̗
     6.4 Tv: ϐ𔺂

  7. for, while, until ɂ郋[v
     7.1 For ̃Tv
     7.2 C Ɏ for
     7.3 while ̃Tv
     7.4 until ̃Tv

  8. ֐(functions)
     8.1 ֐̃Tv
     8.2 p[^[֐̃Tv

  9. [UC^[tFCX
     9.1 ȒPȃj[邽߂ select g
     9.2 R}hCgĂ݂

  10. ̑̃XNvg
     10.1 read gă[U̓͂ǂݍ
     10.2 l̕]
     10.3 bash T
     10.4 vO̖߂ll@
     10.5 R}ho͂l@
     10.6 ̃\[Xt@C

  11. Qƃe[u
     11.1 rZq
     11.2 r̎
     11.3 lZq
     11.4 l֌WZq
     11.5 ֗ȃR}h
        11.5.1 sed (stream editor)
        11.5.2 awk (f[^t@CeLXǧƐ`)
        11.5.3 grep (p^[ɍvs̏o)
        11.5.4 wc (sAAoCg𐔂܂)
        11.5.5 sort (eLXgt@C̍s̕בւ)
        11.5.6 bc (lvZp̃vO~O)
        11.5.7 tput ([̏ terminfo f[^x[X̌)

  12. 낢ȃXNvg
     12.1 fBNg̑St@CɃR}hKp@
     12.2 Tv: ɃVvȃobNAbvXNvg(ǔ)
     12.3 t@CύXXNvg
     12.4 t@CύXXNvg(ȈՔ)

  13. ܂Ȃ(fobO)
     13.1 bash ̌Ăяo

  14. ̕ɂ
     14.1 ()ۏ؂ɂ
     14.2 |ɂ
     14.3 ӎ
     14.4 
     14.5 Qlz[y[W
     14.6 {ɂ

  ______________________________________________________________________

  1.  Cg_NV

  1.1.  ŐVo[W̓ꏊ

  http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html

  1.2.  Kv

  GNU/Linux ̃R}hCɈaȂAvOɂĂ̊{I
  lgɂĂƗ₷Ǝv܂BA̍q̓v
  O~ŐZpł͂Ȃ̂ŁÅ{TOɂĐ(
  邢͏ȂƂ̓w͂)܂B

  1.3.  ̎̕g

  ́̕Â悤ȏꍇɖ𗧂ƂOɒuďĂ܂B

  o  vO~Oǂ̂mĂāAꂩVFXNvg
     R[fBOn߂悤ƂĂꍇB

  o  VFvO~OɂĔRƂmȂ̂ŁAQƂł镶
     ~ꍇB

  o  ŏn߂ɂāAۂ̃XNvgƂ̃Rg
     ꍇB

  o  DOS/Windows ڍs悤ƂĂ(邢͂Ă܂)A
     uob`vꍇB

  o  銮SɁuI^N(nerd)vƌĂ΂ЂƂŁAЂ[ HOW-TO
     {ǂłꍇB

  2.  ɃVvȃXNvg

   HOW-TO ́Aɏd_uāAVFXNvg̃vO~O
  ւqgAqׂ悤ƂĂ܂B

  ̏͂ł́A̃eNjbN𗝉̂ɖ𗧂悤ȊȒPȃXN
  vgグ܂B

  2.1.  ` Hello World XNvg

               #!/bin/bash
               echo Hello World

  ̃XNvǵAs܂Bsڂ́At@Cŝ
  ǂ̃vOgVXeɎwĂ܂B

  sڂ́ÃvOsB̖߂ĂāAɂ
  Ē[ "Hello World" ƕ\܂B

  ƁA./hello.sh: Command not found. ƕ\ꂽ܂
  B炭Aŏ̍s "#!/bin/bash" Ȃ߂ł
  B'whereis bash' ƑłA``ubash T(10.3)v''邩āA
  ̍s̏mFĂB

  2.2.  ɃVvȃobNAbvXNvg

               #!/bin/bash
               tar -cZf /var/my-backup.tgz /home/me/

  ̃XNvgł́A^[~iɃbZ[W\̂ł͂ȂA[U
  ̃z[fBNg̓ekt@C(tarball)ɂ܂Ƃ߂܂B
  ۂ̎gpӐ}̂ł͂܂Bƕ֗ȃobNAbvXN
  vgA̕ŌقǏЉ܂B

  3.  _CNgVɂ(redirection)

  3.1.  _ƊȒPȃt@X

  bash ɂ́At@CLqq(file descriptor)ƂāAW (stdin)AW
  o(stdout)AĕWG[(stderr)  3 ܂B ( std 
  standard ̈ӖłB)

  {IɈȉ̂Ƃł܂B

  1. stdout  file Ƀ_CNg

  2. stderr  file Ƀ_CNg

  3. stdout  stderr Ƀ_CNg

  4. stderr  stdout Ƀ_CNg

  5. stderr  stdout  file Ƀ_CNg

  6. stderr  stdout  stdout Ƀ_CNg

  7. stderr  stdout  stderr Ƀ_CNg

  (_CNg\ł) 1  stdout \A 2  stderr \
  B

  *L̍ڂꂼɂĂ̊ȒPȃ* less R}hgƁA
  stdout (̓obt@Ɏc܂) stderr (XN[ɂ͕\܂
  Ãobt@悤ƂƏĂ܂܂)̗邱
  ł܂B

  3.2.  Tv: stdout  file 

  ̏ꍇAvȌo͂t@Cɏ܂܂B

               $ ls -l > ls-l.txt

  Lł ls-l.txt Ƃt@C쐬܂BāA'ls -l' Ƃ
  R}hsꍇɃXN[ɕ\eÃt@Cɕ
  ܂B

  3.3.  Tv: stderr  file 

  ̏ꍇAvO stderr ̏o͂t@Cɏ܂܂B

               $ grep da * 2> grep-errors.txt

  Lł́Agrep-errors.txt Ƃt@C쐬܂BāA
  t@Cɂ́A'grep da *' ̏o͂̂Aǎ҂悤ƂĂ͂
  stderr ̕܂Ă܂B

  3.4.  Tv: stdout  stderr 

  ̏ꍇAvO stderr o͂Astdout Ɠ̃t@CLqq
  ܂܂B
               $ grep da * 1>&2

  Lł́AR}h stdout ̕ stderr ɑ܂Bʂ̂
  邱Ƃɓǎ҂͋CtĂ邩܂B

  3.5.  Tv: stderr  stdout 

  ̏ꍇAvO stderr o͂Astdout Ɠ̃t@CLqq
  ܂܂B

               $ grep * 2>&1

  Lł́AR}h stderr ̕ stdout ɑ܂BāA
  pCvg less ɗ΁AʏȂ stderr ɏ܂ď
  ܂͂̏o͍sA stdout ɑꂽƂŕێĂ̂mF
  ܂B

  3.6.  Tv: stderr  stdout  file 

  ̏ꍇAvȎSĂ̏o͂t@Cɓ܂B́AS
  ɖقăR}hs悤 cron ̎sڂꍇɓK
  ܂B

               $ rm -f $(find / -name core) &> /dev/null

  cron vO̎sڂvׂĂق̂łAĹA
  fBNg "core" ƌĂ΂t@Cׂč폜̂łB
  R}h̏o͂ȂĂ܂ꍇ́ÃR}hǂ
  ̂[FĂȂ΂܂B

  4.  pCv (pipe)

  ̏͂ł́AȒPpIȃpCv̎gƂ̗LpɂĐ
  B

  4.1.  Ȃ̂Aǂ̂

  ȒPɂƁApCvg΁AvȌo͂𑼂̃vO̓͂
  ėpł悤ɂȂ܂B

  4.2.  Tv: sed gȒPȃpCv

  ̗͊ȒPȃpCv̎ĝłB

               $ ls -l | sed -e "s/[aeio]/u/g"

  Lł́ÂƂN܂B悸R}h 'ls -l' sA
  o͂ʂɕ\ɁAsed vOɑ (pipe 
  )Ax sed ĉʂɕ\܂B

  4.3.  Tv: 'ls -l *.txt' ̑փR}h

  炭́A'ls -l *.txt' Ƃ@łBɎ
  グ̂́At@CXgAbvƂ̃W}邽߂
  ͂ȂAPɃpCv̎głB

               $ ls -l | grep "\.txt$"

  Lł́A'ls -l' vȌo͂ grep vOɑA
  "\.txt$" ̐K\ɍvsʂɏo͂܂B (: Lŉ~
  }[N\ꍇA̓obNXbV̈ӖłB)

  5.  ϐ (variable)

  ϐgȂvO͂܂BAbash ɂ̓f[^^(data
  type)܂Bbash ̕ϐ́AAAi[邱Ƃ
  ܂B

  ϐ錾Kv͂ȂAQƂׂϐɒl΁Aꂾō
  ł܂B

  5.1.  Tv: ϐg Hello World!

               #!/bin/bash
               STR="Hello World!"
               echo $STR

  2 sڂ STR ƂϐāA "Hello World" Ƃ
  Ă܂B̕ϐ́ulv͕ϐ̍ŏ "$" uƂŎo
  ܂B "$" ƂLgȂvȌo͈͂Ⴄ̂
  ȂA]񂾌ʂ𓾂ȂƂƂ𗝉(邢͎ۂɂ
  ݂)B

  5.2.  Tv: ɃVvȃobNAbvXNvg(ǔ)

               #!/bin/bash
               OF=/var/my-backup-$(date +%Y%m%d).tgz
               tar -cZf $OF /home/me/

  L̃XNvǵA܂łƂ͏ႤƂЉĂ܂B܂s
  ɂϐ̍쐬ƑɂĂ͂ꂽƎv܂Bł́A"$(date
  +%Y%m%d)" Ƃ\ɒڂĂBXNvgsƁAۃJb
  R̂Ȃ̃R}hsāȀo͂荞܂悤ɂȂĂ
  B

  ̃XNvgł́Adate R}h(+%Y%m%d)ƂXCb`ɏ]
  āAo͂t@Cς邱ƂɒӂĂB
  w肷邱ƂŁAƂ͈قȂt@Cɂ邱Ƃł܂B

  ȊO̎QlƂāA

  o  echo ls

  o  echo $(ls)

     Ƃ̂܂B

  5.3.  [Jϐ

  [Jϐ́Alocal ƂL[[hgč쐬邱Ƃł܂B

          #!/bin/bash
          HELLO=Hello
          function hello {
                  local HELLO=World
                  echo $HELLO
          }
          echo $HELLO
          hello
          echo $HELLO

  [Jϐ̎gɂẮAȏ̗ŏ[Ǝv܂B

  6.  (conditionals)

  g΁A閽߂sׂǂ̌肪ł܂B
  āǍ́A̕]ɂȂ܂B

  6.1.  ZI[

  ɂ́Ǎ`܂Bł{IȌ`́Auif 
  then sv łA̎s͏̕]^łƂs
  ܂B" 2 < 1 " Ƃ̂͋Uƕ]łA" 2 > 1 " Ƃ
  ̂͐^ƕ]łB

  ܂ÁAuif  then s1 else s2 vƂ`
  Ƃ܂Bł́A^̂Ƃs 1 sAȊÔ
  ͎s 2 s܂B

  ɂ͂ɕʂ̌`܂Buif 1 then s1  else
  if 2  s 2  else s3 v łB̌`ł́A "else if 
  2  then s2 " Ƃ̂łA͂2
  ̕]^ȂΎs2  ŝłB̑̕ɂẮA
  ǎ҂̑zʂłB(܂ł̌`)

  \ɊւĂłA bash  if \gƂ̊{͈ȉ̂悤
  ̂łB

          if []
          then
          (if ̏^Ƃ)sR[h
          fi

  6.2.  Tv: if .. then ɂ{Iȏ̗

          #!/bin/bash
          if [ "foo" = "foo" ]; then
             echo expression evaluated as true
          fi

  u[X [ ] ̏^łꍇA"then" Ƃ̌ɁAs
  R[hĂ܂BĂ̌ɁAɊÂĎs
  R[h̏Iw "fi" uĂ܂B

  6.3.  Tv: "if .. then ... else"  g{Iȏ̗

               #!/bin/bash
               if [ "foo" = "foo" ]; then
                  echo expression evaluated as true
               else
                  echo expression evaluated as false
               fi

  6.4.  Tv: ϐ𔺂

               #!/bin/bash
               T1="foo"
               T2="bar"
               if [ "$T1" = "$T2" ]; then
                   echo expression evaluated as true
               else
                   echo expression evaluated as false
               fi

  7.  for, while, until ɂ郋[v

  ̏͂ł́Afor, while,  util ɂ郋[vɂďqׂ܂B
  bash  for ́Ǎł̎gƎ኱قȂ܂B{Iɂ́A镶
  ̒P܂珇ɔ̂łB

  while ́A䎮^̊Ԃ̓R[hsĂāAUɂȂƂ (邢
  ͎sR[h break Ăꍇ)ɂ̂ݒ~܂B

  until [v́A䎮Uƕ]ĂԂ̓R[hsƂ
  _ƁAwhile [vƂقړłBwhile  until Ă
  vȂA͐lłB

  7.1.  For ̃Tv

               #!/bin/bash
               for i in $( ls ); do
                   echo item: $i
               done

  sڂŁAϐ i 錾Ă܂Bɂ́A$( ls ) ɂďo͂
  lXȒl(Ԃ)Ă܂BOsڂ́AKvł΂
  ł܂BȂ킿Alsڂ done ̑Oɕ̍s݂Ă܂
  ܂Blsڂ done ́Aϐ $i ̒lgpĂR[hŏI
  ƂĂĂ܂BāA$i ɐVl邱Ƃ
  \łBĹA͂قƂǈӖȂXNvgłBfor [vgp
  ƗLvȕ@́AȑO̗ɂ悤ɁÃt@C
  IIɏꍇɎgƂƎv܂B

  7.2.  C Ɏ for

  Fiesh 񂩂ȉ̂悤Ȍ`̃[vtǂƌ܂
  B for [v́AC  Perl  for [vɗގgꂩ
  Ă܂B

               #!/bin/bash
               for i in `seq 1 10`;
               do
                       echo $i
               done

  7.3.  while ̃Tv

               #!/bin/bash
               COUNTER=0
               while [  $COUNTER -lt 10 ]; do
                   echo The counter is $COUNTER
                   let COUNTER=COUNTER+1
               done

  L̃XNvǵA(C, Pascal, Perl Ƃ)LȌ for ̐
  \^̂łB

  7.4.  until ̃Tv

               #!/bin/bash
               COUNTER=20
               until [  $COUNTER -lt 10 ]; do
                   echo COUNTER $COUNTER
                   let COUNTER-=1
               done

  8.  ֐(functions)

  قƂǂǂȃvOɓĂ͂܂邱ƂłA֐(function)g
  ΁A_IɈQ̃R[hO[v邱Ƃł܂B܂A_
  IƂċA@(recursion)gƂ\ɂȂ܂B

  ֐̐錾́A "function my_func { my_code }" Əłł܂B

  ֐̌ĂяóÃvǑĂяoƓŁÅ֐
  łB

  8.1.  ֐̃Tv

               #!/bin/bash
               function quit {
                   exit
               }
               function hello {
                   echo Hello!
               }
               hello
               quit
               echo foo

  sڂlsڂɂẮA"quit" Ƃ֐LqĂ܂B܍s
  ڂ玵sڂɂẮA"hello" Ƃ֐LqĂ܂B̃XN
  vgĂ邩SɔcłȂȂAۂɎŏāAs
  Ă݂ĂB

  ֐́A炩̗̓lɂ錾KvƂȂƂƂɒӂ
  B

  ̃XNvgsƁAŏ "hello" ֐ĂяoA
  "quit" ֐Ăяo܂BăvO͏\sڂ܂ł͎s
  ƂɋCtł傤B

  8.2.  p[^[֐̃Tv

               #!/bin/bash
               function quit {
                   exit
               }
                   function e {
                       echo $1
                   }
               e Hello
               e World
               quit
               echo foo

  L̃vÓAOL̃vOƂقړłBȈႢ́A֐
  "e" ݂̑łB̊֐͎󂯎\܂B́A֐
  ̓ɂƂłAXNvgɒړnƂƓ悤Ɉ
  B

  9.  [UC^[tFCX

  9.1.  ȒPȃj[邽߂ select g

               #!/bin/bash
               OPTIONS="Hello Quit"
               select opt in $OPTIONS; do
                   if [ "$opt" = "Quit" ]; then
                     echo done
                     exit
                   elif [ "$opt" = "Hello" ]; then
                     echo Hello World
                   else
                     clear
                     echo bad option
                   fi
               done

  L̃XNvgsȂAeLXgx[X̃j[Ƃv
  O}̂ЂƂ̖Ă̂Ǝv܂B܂ for ̐
  \ƎĂ邱ƂɂCt܂B$OPTIONS ɑꂽ
  (word)ЂƂ[vɁAvvgo͂ĂƂ
  Ⴂ邾łB

  9.2.  R}hCgĂ݂

               #!/bin/bash
               if [ -z "$1" ]; then
                   echo usage: $0 directory
                   exit
               fi
               SRCD=$1
               TGTD="/var/backups/"
               OF=home-$(date +%Y%m%d).tgz
               tar -cZf $TGTD$OF $SRCD

  L̃XNvg邩́Ał傤Bŏ̏
  ́AvO ($1)󂯎ǂ𒲂ׂ̂łB
  āA󂯎ȂƂ͊ȒPȎgp@ɂẴbZ[W\
  ďI܂BXNvg̎ć̕A̎_ł͖ĂƎv
  B

  10.  ̑̃XNvg

  10.1.  read gă[U̓͂ǂݍ

  [Uɉ炩̓͂𑣂Ǝvꍇ悭̂łB
  @͂݂܂Aȉ͂̂̂ЂƂłB

               #!/bin/bash
               echo Please, enter your name
               read NAME
               echo "Hi $NAME!"

  L̕ό`ƂāAread gĕ̒l󂯎邱Ƃł܂B
  ͂𖾂炩ɂ̂łB

               #!/bin/bash
               echo Please, enter your firstname and lastname
               read FN LN
               echo "Hi! $LN, $FN !"

  10.2.  l̕]

  R}hC(邢̓VF)ŁÂ悤ɑłĂ݂ĂB

               $ echo 1 + 1

  2 o͂Ɗ҂ĂȂA肵Ƃł傤B bash ɐ
  lvZƂ́Aǂ炢̂ł傤Ĥ͎悤ɂ
  邱ƂłB

               $ echo $((1 + 1))

  Lł́A胍WJȏo͂ȂꂽƂƎv܂B͐]
  ƂƂłB܂Â悤ȕ\łƂł܂B

               $ echo $[ 1 + 1 ]

  ₠邢͂ƕGȐwIKvɂȂꍇA邢͐
  VтƂȂǂ́A]̂߂ bc ƂR}hg܂BR}
  hvvg "echo $[3/4]" ƎsĂAbash ͐ł
  ԂȂ̂ŁAʂ 0 ƂȂ܂BA"echo 3/4 | bc -l" Ǝs
  ΁A0.75 ƂԂĂ܂B

  10.3.  bash T

  Mike ̃bZ[Wfڂ܂B(ӎĂ)

  Ȃ͂ #!/bin/bash Ƃ̂gĂ܂Abash ǂɂ
  ̂T@ᎦقƎv܂B"bash ̏ꏊɒuĂ
  ܂΂̂łAׂẴ}VĂ킯ł͂܂B
  [gfBNgA'find ./ -name bash' sΒʏ͒To
  ͂łB

  `FbNׂȂ̂́Â悤ȏꏊł傤B

          ls -l /bin/bash
          ls -l /sbin/bash
          ls -l /usr/lodal/bin/bash
          ls -l /usr/bin/bash
          ls -l /usr/sbin/bash
          ls -l /usr/local/sbin/bash

  (ȊÕfBNg͂Ɏvт܂... VXe
  A܂ł͂̒猩ꍇقƂǂłB) ꂩ
  A'which bash' gĂ݂̂Ǝv܂B

  10.4.  vO̖߂ll@

  bash ł́AvO̖߂l $? ƂȕϐɓĂƂ
  ł܂Bȉ́AvO̖߂ll@̂łB
  A /dada ƂfBNg͎݂܂B( Mike ̒
  ڂ̂ł)

               #!/bin/bash
               cd /dada &> /dev/null
               echo rv: $?
               cd $(pwd) &> /dev/null
               echo rv: $?

  10.5.  R}ho͂l@

  ȉ̊ȒPȃXNvǵAׂẴf[^x[XTđS̃e[u
  \Ƃ̂ł( MySQL CXg[Ă邱ƂO
  )B̒ 'mysql' ƂR}hύXāALȃ[Uƃp
  X[hg悤ɂĂB

               #!/bin/bash
               DBS=`mysql -uroot  -e"show databases"`
               for b in $DBS ;
               do
                       mysql -uroot -e"show tables from $b"
               done

  10.6.  ̃\[Xt@C

  R}h\[XƂĕ̃t@CgƂł܂B

  쐬\( TO DO )

  11.  Qƃe[u

  11.1.  rZq

          (1) s1  =  s2    s1  s2 
          (2) s1 !=  s2    s1  s2 łȂ
          (3) s1  <  s2    쐬
          (4) s1  >  s2    쐬
          (5) -n s1        s1  null łȂ(ꕶȏ܂ł)
          (6) -z s1        s1  null ł

  11.2.  r̎

  ӂ̕r

               #!/bin/bash
               S1='string'
               S2='String'
               if [ $S1=$S2 ];
               then
                       echo "S1('$S1') is not equal to S2('$S2')"
               fi
               if [ $S1=$S1 ];
               then
                       echo "S1('$S1') is equal to S1('$S1')"
               fi

  ŁAL if [ $1 = $2 ] Ɋւ Andrea Beck Ăꂽ[
  ̈ꕶp܂B

        ܂肢lƂ͌܂BA$S1  $S2 ̂ǂ炩̏ꍇA
        p[TG[ɂȂ邩łBx$1=x$2  "$1"="$2" Ƃق悢
        傤B

  11.3.  lZq

          +
          -
          *
          /
          % (])

  11.4.  l֌WZq

          -gt  ( >  )
          -le  ( <= )
          -ge  ( >= )
          -eq  ( == )
          -ne  ( != )

  C vO}gĂ鉉ZqɂĂAۃJbRtđΉ֌W
  ܂B

  11.5.  ֗ȃR}h

  ̃ZNV Kees (ӎĂ)ɂăCgꂽ̂
  B

  ȉ̃R}ĥȂɂ́ASȃvO~OĂƂ
  Ȃ̂܂B̃R}hグāA{Ip@
  Ǝv܂BڍׂȉɂẮAR}h̃}jAy[W
  ĂB

  11.5.1.  sed (stream editor)

  sed ̓mEC^NeBuȃGfB^łBJ[\ʏœ
  t@CɕύX邩ɁAҏWɊւwƕҏWׂt@C
  񂾃XNvggp܂B܂Ased ͈̃tB^ł
  ƍl邱Ƃł܂BĂ݂܂傤B

               $ sed 's/to_be_replaced/replaced/g' /tmp/dummy

  LɂāAsed ́A/tmp/dummy Ƃt@CǂݍŁA
  "to_be_replaced" 𕶎 "replaced" ɒu܂B̌ʂ͕Wo
  (ʏ̓R\[)ɏo͂܂ALR}hC̖(Ⴆ
  ) '> capture' ƕtȂA "capture" ƂÕt@C
  sed ̏o͌ʂ𑗂邱Ƃł܂B

          $ sed 12, 18d /tmp/dummy

  L̗ŁAsed  12  18 sڂ܂łSĂ̍s\܂B
  R}hɂČ̃t@CɕύX邱Ƃ͂܂B

  11.5.2.  awk (f[^t@CeLXǧƐ`)

  AWK vO~Oɂ݂͑̎܂B(łLȃC^[
  v^́AGNU  gawk ƁuV awkv ł mawk łB) AWK ̌
  ͒PłBp^[TāAvp^[(pattern)SĂɑ΂Ă
  炩̏(action)sƂƂłB

  ēxAȉ̂悤ȍs܂ރ_~[t@C܂B

          test123
          test
          tteesstt

               $ awk '/test/ {print}' /tmp/dummy
               test123
               test

  LɂāAAWK TƂp^[(pattern) "test" ł
  A/tmp/dummy t@C̍s̒ "test" ƂTo
  ɍs(action)ʂւ̕\ "print" łB

               $ awk '/test/ {i=i+1} END {print i}' /tmp/dummy
               3

  ̃p^[TƂĂƂ́ANIe[V('')ň͂܂ꂽ
  (Ⴆ) '-f file.awk' Ƃt@CŒu܂B
  ΁AׂẴp^[Ə 'file.awk' Ƃt@Cɏ
  ŁA܂Ƃ߂Ďsł܂B

  11.5.3.  grep (p^[ɍvs̏o)

  grep R}h́Ap^[ɍvs\@\ɂẮA
  ܂ł̏͂łĂƎv܂BAgrep ̋@\͂ꂾ
  ł͂܂B

               $ grep "look for this" /var/log/messages -c
               12

  Ĺ̗A"look for this" Ƃ /var/log/messages t@C
  ̂Ȃ 12 񌩂ƂӖĂ܂B

  [ OK, ̗̓tFCNȂ񂾁B/var/log/messages ɂƎ
  ̂B :-)]

  11.5.4.  wc (sAAoCg𐔂܂)

  ȉ̗ł́Ao͂ҒʂɂȂĂȂ̂Ǝv܂B
  Ŏgꂽ_~[t@Cɂ(OɎgeƂ͈قȂ)̂悤ȕ
  񂪊܂܂Ăł炷B

          bash introduction
          howto test file

               $ wc --words --lines --bytes /tmp/dummy
               2 5 34 /tmp/dummy

  wc ł̓p[^w̏Ԃ͎RłȀȍ͎Ԃ͂
  ܂Ă܂BL̂悤ɁAsAꐔAoCgAt@C ̏
  ɂȂ܂B

  11.5.5.  sort (eLXgt@C̍s̕בւ)

  ̃_~[t@C̓ê͎悤ɂȂĂ܂B

          b
          c
          a

               $ sort /tmp/dummy

  ́ÃAEgvbgǂ\邩łB

               a
               b
               c

  R}hgƂƁAقǊȒPɂ͂Ȃł傤B

  11.5.6.  bc (lvZp̃vO~O)

  bc ̓R}hCő삷悭łvZvOłB_CN
  gpCv͓͂ł܂񂪁At@C̓͂\ŁA[UC
  ^[tFCX܂Bȉł́ÃR}h̒炢
  ɃfXg[VĂ݂܂BȂAbc N -q p[^g
  pĂ̂́ANɃEFJbZ[Wo͂Ȃ߂łB

               $ bc -q
               1 == 5
               0
               5 != 5
               0
               2 ^ 8
               256
               sqrt(9)
               3
               while (i != 9) { i = i + 1; print i }
               12345689
               quit

  11.5.7.  tput ([̏ terminfo f[^x[X̌)

  tput łȂɂł邩AȒPɏЉ܂B

               $ tput cup 10 4

  L̗ł́Avvg (y10,x4) ̈ʒuɂ܂B

               $ tput reset

  Lł́AʂƂɖ߂āA(y1,x1) ̈ʒuɃvvg\
  B(y0,x0) 傤Ǎ̋ɂʒułB

               $ tput cols
               80

  Lł́AX ɕԂ̂\Ă܂B

  (ȂƂ)L̂悤ȃvOɂẮAgĂƂ
  E߂܂BR}hC̑ŋقǂ̏Ă鏬
  vO͖ɂ܂B

  [̂́A}jAy[W FAQ ܂B]

  12.  낢ȃXNvg

  12.1.  fBNg̑St@CɃR}hKp@

  (쐬)

  12.2.  Tv: ɃVvȃobNAbvXNvg(ǔ)

               #!/bin/bash
               SRCD="/home/"
               TGTD="/var/backups/"
               OF=home-$(date +%Y%m%d).tgz
               tar -cZf $TGTD$OF $SRCD

  12.3.  t@CύXXNvg

               #!/bin/sh
               # renna: ̃[ɏ]āÃt@Cl[
               # XNvg: Felix Hudson Jan 2000

               # ŏɂ̃vO邢́u[hvɂă`FbN
               # ($1)̏vȂAvO̊Ys
               # I

               # prefix ̏`FbN
               if [ $1 = p ] ; then

               # [hϐ($1) prefix ($2)菜
               prefix=$2 ; shift ; shift

               # t@Cw肳Ă邩ȒPɃ`FbN
               # w肳ĂȂƂ́A݂Ȃt@Cl[邱Ƃ
               # łȂ̂ŁAȂɂȂ
               if [$1 = ]; then
                    echo "no files given"
                    exit 0
               fi

               # vÖƂȂt@CɃ[v
               # t@CЂƂl[
               for file in $*
                   do
                   mv ${file} $prefix$file
               done

               # ŃvOI
                   exit 0
               fi

          # suffix l[邩`FbN
          # ł̎c̕͏LƂȂȂ̂ŁAĂق
          if [ $1 = s ]; then
              suffix=$2 ; shift ; shift

          if [$1 = ]; then
              echo "no files given"
              exit 0
          fi

          for file in $*
              do
               mv ${file} $file$suffix
              done
              exit 0
          fi

               # O̒uǂ`FbN
               if [ $1 = r ]; then
                   shift

               # [U̓ew肵ȂƂĂt@C_[W
               # 󂯂Ȃ悤ɁÃR[h܂߂
               if [ $# -lt 3 ] ; then
                   echo "usage: renna r [expression] [replacement] files... "
                   exit 0
               fi

               # ]vȏ폜
               OLD=$1 ; NEW=$2 ; shift ; shift

          #  for [v̓vOɗ^ꂽt@Cɏ
          # sed ƂvOgāAt@CЂƂl[
          # sed ͕W͂ǂݍŁA̕\^ꂽɒu
          # ł́AW͂t@Cw肵āAKvȕu
          for file in $*
              do
               new=`echo ${file} | sed s/${OLD}/${NEW}/g`
               mv ${file} $new
              done
              exit 0
          fi

               # ܂ŗƂƁAvOɈȂƂƂȂ̂ŁA
               # g\
               echo "usage;"
               echo " renna p [prefix] files.."
               echo " renna s [suffix] files.."
               echo " renna r [expression] [replacement] files.."
               exit 0

               # I

  12.4.  t@CύXXNvg(ȈՔ)

               #!/bin/bash
               # renames.sh
               # basic file renamer

               criteria=$1
               re_match=$2
               replace=$3

               for i in $( ls *$criteria* );
               do
                   src=$i
                   tgt=$(echo $i | sed -e "s/$re_match/$replace/")
                   mv $src $tgt
               done

  13.  ܂Ȃ(fobO)

  13.1.  bash ̌Ăяo

  ʓIȂ̂́AsڂɂƎ邱ƂłB

               #!/bin/bash -x

  ƁAo͂ɍۂɖʔ񂪕\܂B

  14.  ̕ɂ

  ĂA܂̕ɌfڂׂʔȂǂȂłCyɘA
  ĂBł邾f܂B

  14.1.  ()ۏ؂ɂ

  This documents comes with no warranty of any kind. and all that (}})

  ̕ɂ́AȂۏ؂܂B

  14.2.  |ɂ

  C^A: by Willy Ghelfi (wizzy at tiscalinet.it) 

  tX: by Laurent Martelli ( URL ͕s)

  ؍: Minseok Park http://kldp.org

  ؍: Chun Hye Jin ( URL ͕s)

  XyC: ҕs http://www.insflug.org

  Ƒ̖|󂪂Ǝv̂łA񂪂܂B䑶m̂
  ́A킽Ƀ[B̏͂XV܂B

  14.3.  ӎ

  o  ̕|󂵂ĂꂽЂƂ(O)

  o  Nathan Hurst ͏ڍׂɍZĂ܂B

  o  Jon Abbott ͐̕]ɂăRg𑗂Ă܂B

  o  Felix Hudson  renna XNvgĂ܂B

  o  Kees van den Broek (Zɋ͂A֗ȃR}h̏͂Cg
     ܂)

  o  Mike (pink)  bash ̈ʒu肵t@CeXg肷邱
     ƂɂĂĂĂ܂B

  o  Fiesh ̓[v̏͂ɂĂĂĂ܂B

  o  Lion ̓R}hG[ɂďqׂ悤ĂĂ܂
     B(./hello.sh: Command not found.)

  o  Andrea Beck ͍ZƃRgɂċ͂Ă܂B

  14.4.  

  o  |󂪐VKɒǉAB

  o  Kees ̃Cgɂ֗ȃR}h̏͂tB

  o  Ă啝ɎꂽB

  o  rɂĎ𑝂₵B

  o  v0.8 o[WOBtŏ[ƎvB

  o  v0.7 ӏBTO-DO ̏͂B

  o  v0.6 

  o  v0.5 _CNg̏͂ǉ

  o  v0.4 OC̃{Ẍӌł܂ł̃y[WŌJłȂȂA
     ɂƂĂ͍œK̏ꏊB <http://www.linuxdoc.org/>

  o  ȑÔƂ͊oĂȂBrcs  cvs gĂȂB

  14.5.  Qlz[y[W

  ( BeOS ł)bash ɊւЉ
  <http://org.laol.net/lamug/beforever/bashtut.htm>

  Bourne Shell ̃vO~O <http://207.213.123.70/book/>

  14.6.  {ɂ

  | U Ti  <ysenda@pop01.odn.ne.jp>
  Z  G  <shyugoro@pop12.odn.ne.jp>
        L  <takei@webmasters.gr.jp>
       ɓ S  <kade@kadesoft.com>

