踏踏实实干工作,推进开源大发展!

Shell编程:Linux系统环境程序设计之路

上一篇 / 下一篇  2008-03-20 09:26:36 / 个人分类:软件使用

  别的高级语言都有函数的感念,当然shell编程也有这个概念,当写一个比较大型的shell程序的时候,如果没有函数,则会到处都是重复的代码。当然也可以调用别的脚本,但是速度会比较慢。所以函数是必不可少并且非常重要的一个东西。

  定义函数的格式

  function_name(){...}

  例子:

  //~ fun_s

  show(){

  echo "show $*"

  }

  echo $*

  echo "after function"

  show c d

  echo $*

  exit 0

  /////////////////////////////

  $./fun_s a b

  结果是

  a b

  after function

  c d

  a b

  从上面的例子可以看出,当脚本调用函数的时候,脚本程序的位置参数会被替换成函数的位置参数,并且函数调用结束后还原。

  return:

  //~ return_s

  #!/bin/bash

  first(){

  echo "is return"

  }

  second(){

  echo "before return"

  return "0"

  echo "after return"

  }

  return_value="$(first)"

  echo $return_value

  second&echo "return 0"  echo "return other"

  exit 0

  //////////////////////////////////////

  输出

  is return

  before return

  return 0

  该例子说明可以捕获函数内echo的字符串,如echo $(first) , 函数在return后不会再执行下面的语句。

  second&echo "return 0"  echo "return other" 该句的输出为 return 0。这里有人可能会和C语言混淆,因为在C语言里0表示的是false。而这里的0表示函数执行成功,可以理解为true,所以会输出return 0。

  命令

  break,continue 和c语言基本类似

  echo 了解一点即可echo -n 输出没有换行。

  eval:

  例子:

  //~ eval_s

  #!/bin/bash

  var1=abcd

  var2=var1

  eval var3=\$$var2

  echo $var3

  exit 0

  ///////////////////////////

  eval相当于一个额外的$,它给出一个变量值的值,如例子里先是$var2使var3变成\$var1,又var1=abcd,所以var3变为abcd,连续解析了两次变量。

  export:

  看下面两个例子可以很好的说明export的作用。

  //~ export1_s

  #!/bin/bash

  var1="this is var1"

  var2="this is var2"

  export var2

  ./export2_s

  exit 0

  ///////////////////////////

  //~ export2_s

  #!/bin/bash

  echo "$var1"

  echo "$var2"

  exit 0

  /////////////////////////

  输出:

  this is var2

  输出结果说明var1为空而var2却有值,这正是export起的作用,把var2变成了一个环境变量。

  再看个例子:

  #!/bin/bash

  echo $var1

  echo $var2

  echo $var3

  exit 0

  //////////////////////////

  //~ set-a_s

  #!/bin/bash

  set -a

  var1="var1"

  var2="var2"

  var3="var3"

  ./set-a2_s

  exit 0

  //////////////////////////

  //~ set-a2_s

  输出:

  var1

  var2

  var3

  set -a的作用就是把它之后声明的所有变量都export

  printf:

  和C语言里的printf用法很相似的一个命令,使用非常方便。

  set:

  //~ set_s

  #!/bin/bash

  fun1()

  {

  echo "a b c d"

  }

  set $(fun1)

  echo $1

  echo $(date)

  set $(date)

  echo $1

  exit 0

  ///////////////////////

  输出: a 2008年 03月 06日 星期四 03:57:55 CST 2008年

  date的输出是几个由空格分隔的值,set的作用能分隔出每个域。

  shift:

  就是让$2变$1,$3变$2,依此类推。

  trap:

  非常有用的一个命令,用于指定接受到信号后进行的动作,系统定义了非常多的信号类型,用trap -l命令可以查看所有的信号。

  常见的几个信号有:

  INT(2) 中断,按下ctrl+c组合键引发的

  QUIT(3) 退出,按下ctrl+\引发

  例子:

  //~ trap_s

  #!/bin/bash

  trap var=2 INT

  echo "please enter ctrl+c"

  var=1

  while [ $var = 1 ]

  do

  echo "in while"

  sleep 1

  done

  exit 0

  /////////////////////////

  这个例子在我按下ctrl+c后改变了var的值,所以跳出循环,程序结束。

  shell下的程序设计非常强大,你可以用它做出很多小工具,让你的使用linux系统更加流畅。shell还有非常多的功能文中没有提到,需要大家发现问题后再自己去解决。

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-03  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 159016
  • 日志数: 569
  • 图片数: 2
  • 文件数: 21
  • 建立时间: 2006-07-04
  • 更新时间: 2008-11-21

RSS订阅

Open Toolbar