您的位置:首页 > 运维架构 > Shell

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

2017-04-24 10:53 274 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell 编程 函数