Linux中shell编程需要避免的坑之shell语法篇(四)

来源:互联网 发布:淘宝卖衣服规则 编辑:程序博客网 时间:2024/05/18 19:43
shell函数
1.带有返回值的函数,如下:
fun (){
a=10
b=20
echo "测试例子中的两个参数分别是$a 和 $b"
return $(($a+$b))
}
fun
echo "两数之和为 $? "
通过$?接收返回参数
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,调用函数时候直接函数名调用即可。
2.传参函数,如下:
fun(){
echo "输出执行文件名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"
}
fun 1 2 3
附注:当第十个参数时不能够$10去获取,当n>=10时,需要写成${10}。


shell的输入输出重定向
命令说明command > file将输出重定向到 file;注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。command < file将输入重定向到 file。command >> file将输出以追加的方式重定向到 file。n > file将文件描述符为 n 的文件重定向到 file。n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。n >& m将输出文件 m 和 n 合并。n <& m将输入文件 m 和 n 合并。<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

输出重定向示例
who > t.sh
结果:将命令who查出的信息输出到t.sh文件里面且会覆盖原有内容,若想末尾追加,使用>>操作符

输入重定向示例
从文件获取输入,读取内容
wc-l< t.sh
统计文本里面的行数,不携带任何其他信息,为什么这么说呢,因为单独执行 wc -l t.sh时会输出行数和文件名,而输入重定向仅仅输出读取的内容!!!!!!

二者结合的例子(从左往右执行)
命令 < inputFile > outputFile
从inputFile 里面读取内容输出到outFile里面
重定向深入讲解(理解就好,不过多解释了)
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写:
$ command2> file
如果希望 stderr 追加到 file 文件末尾,可以这样写:
$ command2>> file
2 表示标准错误文件(stderr)。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command> file2>&1或者$ command >> file2>&1
如果希望对 stdin 和 stdout 都重定向,可以这样写:
$ command< file1>file2
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

shell文件包含
包含外部脚本可以封装一些公用的代码作为一个独立的文件。
语法
. filename# 注意点号(.)和文件名中间有一空格source filename
示例:
创建t1.sh文件内容:
a=50
创建t2.sh文件的内容:
. ./t1.sh
#或者
#source ./t1.sh
echo "参数a等于 $a"

授予执行权限 chmod +X t2.sh
执行./t2.sh

总结:
前三篇的例子运行在deepin ubantu 15.3 妥妥的没问题,第四篇讲完后Linux shell的基本知识也就到此为止了,后续添加一些实际当中会用到的一些脚本!活学活用!持续更新......

先来几个shell脚本小栗子:
http://www.jb51.net/article/54488.htm
http://justcoding.iteye.com/blog/1943504

0 0