快速入门shell脚本编写(四)

Lee出品,转载请注明出处 http://blog.csdn.net/hnulwt/article/details/43234977

继续上次学的内容,这次学习 case 语句和 shell的函数概念。

case 语句

首先先看看测试程序:

  1 #! /bin/sh
  2
  3 animal=dog
  4
  5 case "$animal" in
  6 cat)
  7         echo "cat";;
  8 dog)
  9         echo "dog";;
 10 lion)
 11         echo "lion";;
 12 esac

上面程序运行结果很简单,输出:dog

他的结构是:

case "变量名" in

字符串一)

执行语句一;;

字符串二)

执行语句二;;

esac

需要特别注意的几点是:

1,case 后面的变量名要用引号括起来(上面例子程序中的第5行)

2,匹配条件,字符串前面没有括号,后面有括号 (上面程序中的6、8、10行)

3,执行语句结束位置要有双分号; (上面程序中的7、9、11行)

4,结尾要有倒置的case匹配,即esac

函数

首先我们看一个最简单的函数,下面是一段程序:

  1 #! /bin/sh
  2
  3 sayDog()
  4 {
  5         echo "dog"
  6         return $?
  7 }
  8
  9 sayDog
程序很简单,3-7行我们定义了sayDog函数。第六行其实也可以忽略,$? 在之前章节讲过是函数的返回值,在第9行我们调用了这个函数。

来看看程序的运行结果:

$ sh test.sh
dog

参数

如何给函数里面传入参数呢,shell不像我们写的java 、c++程序在括号里面传参数,传参数只需要直接在函数里面使用$n 既可(n代表传入的第几个参数)

看下面这一段程序:

  1 #! /bin/sh
  2
  3 sayAnimals()
  4 {
  5         echo $1
  6         echo $2
  7 }
  8
  9 sayAnimals cat dog
在上面函数的第5、6行,使用了传入的参数1、参数2。第9行调用函数,并且传入cat dog俩个参数,我们来看看执行结果:

$ sh test.sh
cat
dog

看到了吧?shell传入参数其实非常简单。
返回值
shell的返回值和我们理解的一般的程序返回值是不一样的,shell 函数返回值只能是整形数值,一般是用来表示函数执行成功与否的,0表示成功,其他值则表示失败。因而用函数返回值来返回函数执行结果是不合适的。如果return一个字符串,则会得到错误提示:“numeric argument required”

程序是死的,人是活的嘛,这样不行,我们可以通过定义全局变量,函数将计算结果赋给全局变量,然后脚本中其他地方访问这个全局变量,就可以达到我们的目的啦。

输入、输出重定向

使用过ant 等工具的人可能对这个概念已经不陌生了。

每个 Unix/Linux 命令运行时都会打开三个文件:

标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。

标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。

标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

shell的重定向用于将标准输出或标准错误输出重定向到其他位置。

标准输入,标准输出,标准错误输出是什么呢?我们可以理解为:键盘是标准输入,显示器是标准输出,错误输出默认仍然是显示器。

而重定向就是将本来要输出在显示器上的东西,定向到其他位置了,比如文件中。

输出重定向的语法为:指令 > 文件名

我们举个例子,我们在终端执行命令 ls > test,这时候我们在屏幕上看不到输出,本来ls就是现实当前目录下的文件,这时候我们已经把这些输出重定向到一个叫test的文件中了。我们通过vim test打开,可以看到结果。确实结果输出到test文件中了。这里不再图示,自己执行命令即可。

输出重定向还有一个格式:指令 >> 文件名

这个格式会保证 若已存在文件,则结果追加到输出到文件末尾,即不会覆盖。

输入重定向的语法:指令 < 文件名

例子:比如我们有一个文件test.txt,里面有3行内容。我们要统计他的行数,可以通过执行命令:wc -l < test.txt来统计

结果输出:3

好了,通过四节的内容,我们已经掌握shell的基本使用方式,可以写出一些简单的shell程序,但是距离真正编码还是有一段差距的,所以我们还要继续努力!多练习,多看别人写的shell程序,达到学习,提升自己的目的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。