继续上次学的内容,这次学习 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
他的结构是:
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
来看看程序的运行结果:
$ 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
$ 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程序,达到学习,提升自己的目的。