2007年3月15日星期四

shell简介入门

1 shell简介入门bash编程之执行

在Bourne Shell中有五种方式执行一个命令,而这五利方式所产生的结果有所不同:
  ::直接下命令:这个方式和在命令行中用命令的效果一样。
  ::使用sh命令sh command:这时的文件必须是Bourne Shell的脚本,但这个文件并不一定要设成
  可执行。除此之外和直接用命令的方式一样。
  ::使用"."命令command:这时和使用sh命令相似,只不过它不像sh一般会产生新的process,相反
  地,它会在原有的process下完成工作。
  ::使用exec命令exec command:此时这个脚本将会被所执行的命令所取代。当这个命令执行完毕
  之后,这个脚本也会随之结束。
  ::使用命令替换:这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参
  数时,就一定要使用这个方法。我们将命令行放在两个"`"符号。
  例如:
  str=`Current directory is ``pwd`
  echo $str
  结果如下:
  Current directory is /home/dfbb
  这个意思是pwd这个命令输出"/users/cc/mgtsai",然后整个字符串代替原来的pwd设定str变量,
  所以str变量的内容则会有pwd命令的输出


shell简介入门之bash编程之流程控制(1)


在介绍流程控制之前我们先来看看twst命令。test命令的参数是条件判式,当为真时则传回非零
  值,而条件为假时则传回零。在所有的流程控制都必须用到test命令来判断真假。另外一种方法
  是使用中括号[],一般都是用中括号居多。测试的种类有:
  A::字符串测试
  string1 = string 2 两字符串是否相等
  string1 != string2 两字符串是否不等
  string  字符串是否是空的
  -z string 字符串长度是否为0
  -n string 字符串长度是否非0
  B::整数测试
  -eq 等于
  -ne  不等
  -lt 小于
  -gt  大于
  -le 小于或等于
  -ge 大于或等于
  C::文件测试
  -b 区块文件
  -c 字符文件 
  -d 目录
  -f 一般文件
  -r 可读
  -w 可写
  -x 可执行
  -k 设定了限定位
  -g 设定了组位
  -u 设定了use id
  -p 管线
  -s 文件大小非0
  以下介绍各种流程控制
  A::
  if then
  语法如下:
  if (condition)
   then
   then-commands
  fi
  condition是一个test命令。往的一所介绍的各种流程中的conditon都是test命令。
  例如:
  test4.sh
  --------------------------------------------------
  #!/bin/bash
  if(test $# !=0)
   then
   echo Arg1:$1
  fi
  --------------------------------------------------
  $/test4.sh hello
  Arg1:hello
  $./test4.sh
  $
  B::
  if then else
  语法如下:
  if(confition)
   then
   then-commands
   else
   else-commands
  fi
  C::
  if then elif
  语法如下:
  if (conditon1)
   then
   commands1
  elif(condition2)
   then
   commands2
  else
   commands3
  fi
  例如:
  test5.sh
  -------------------------------------------------------------
  #!/bin/bash
  echo `word 1:`
  read word1
  echo `word 2:`
  read word2
  echo `word 3:`
  read word3
  if(test "$word1" = "$word2" -a "$word2" = "$word3")
   then
   echo `match:words 1,2 & 3`
  elif(test "$word1" = "$word2")
   then
   echo `match:word 1 & 2`
  elif(test "$word1" = "$word3")
   then
   echo `match:words 1 & 3`
  elif(test "$word2"="$word3")
   then
   echo `match:words 2 & 3`
  else
   echo `no match `
  ------------------------------------------------------
  $./test5.sh
  word 1:
  do
  word 2:
  do
  word 3:
  do
  match:words 1,2&3
  D::
  for in
  语法如下:
  for var in arg-list
   do
   commands
  done
  例如:
  test6.sh
  --------------------------------------------------
  #!/bin/bash
  for a in xx yy zz
   do
   echo $a
  done
  ---------------------------------------------------
  结果如下:
  xx
  yy
  zz
  E::
  语法如下
  for var
   do
   commands
  done
  例如
  test7.sh
  -------------------------------
  #!/bin/bash
  for a
   do
   echo $a
  done
  -----------------------
  $./test7.sh xx yy zz
  xx
  yy
  zz
  F::
  while
  语法如下:
  while(condition)
  do
   commands
  done
  例如:
  #!/bin/bash
  number=0
  while(test $number -lt 10)
   do
   echo "$number\c"
   number=`expr $number+1`
  done
  echo
  -----------------------------------------
  结果如下:
  0123456789
  G::
  until
  语法如下:
  until(condition)
  do
   commands
  done
  它和while的不同只在于while是在条件为真时执行循环,而until是在条件为假时执行循环。
  H::
  break及continue
  这两者是用于for,while,until等循环控制下的。break会跳到done后才执行,而continue会跳至
  done后才执行,而continue会跳至done执行,继续执行循环。
  I::
  case
  语法如下:
  case str in
   pat1) commands1;;
   pat2) commands2;;
   pat3) commands3;;
  esac
  而pat除了可以指定一些确定的字符串,也可以指定字符串的集合,如下:
  * 任意字符串
  ?   任意字符
  [abc]  a,b,c三字符其中之一
  [a-n]  从a到n的任一字符
  │    多重选择
  例如:
  test8.sh
  -----------------------------------------------------------
  #!/bin/bash
  echo `enter A,B,C:"
  read letter
  case $letter in
  A│a) echo `you entered A.`;;
  B│b) echo `you entered B.;;
  C│c) echo `you entered C,;;
  *) echo `not a,b,c`;;
  esac
  ---------------------------------------------------------------------- 
  J::
  函数
  格式如下:
  function-name()
  {
   commands
  }

没有评论: