博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell编程(六) : Shell 函数 和 定向输出
阅读量:6980 次
发布时间:2019-06-27

本文共 2913 字,大约阅读时间需要 9 分钟。

  hot3.png

Shell 常用函数

  • 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用

Shell函数格式

linux shell可以用户定义函数,然后在shell脚本中可以随便调用

[ function ] funname [()]{    action;    [return int;]}
  • 说明
      1. 可以带funciton()定义,也可以直接fun()定义,不带任何参数。
      1. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)。

看一个实例,试着套用一下格式

  • 例子1(无返回值)
#!/bin/bash# author:husky# url:=my.oschina.net/ahuskydemoFun(){    echo "这是我的第一个 shell 函数!"}echo "-----函数开始执行-----"demoFunecho "-----函数执行完毕-----"

运行结果,你懂得,还是看看吧:

-----函数开始执行-----这是我的第一个 shell 函数!-----函数执行完毕-----
  • 例子2(包含返回值)
funWithReturn(){    echo "这个函数会对输入的两个数字进行相加运算..."    echo "输入第一个数字: "    read aNum    echo "输入第二个数字: "    read anotherNum    echo "两个数字分别为 $aNum 和 $anotherNum !"    return $(($aNum+$anotherNum))}funWithReturnecho "输入的两个数字之和为 $? !"

运行结果如下:

这个函数会对输入的两个数字进行相加运算...输入第一个数字: 1输入第二个数字: 2两个数字分别为 1 和 2 !输入的两个数字之和为 3 !

函数返回值在调用该函数后通过 $? 来获得。

注意:所有函数使用前必须定义。这意味着必须将函数放在脚本开始部分,直到shell解释器首次发现它时,才可以使用。 调用函数仅使用函数名即可。

函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

  • 带参数的函数示例:
funWithParam(){	echo "第一个参数为 $1 !"    echo "第二个参数为 $2 !"    echo "第十个参数为 $10 !"    echo "第十个参数为 ${10} !"    echo "第十一个参数为 ${11} !"    echo "参数总数有 $# 个!"    echo "作为一个字符串输出所有参数 $* !"}funWithParam 1 '你好' 3 4 5 6 7 8 9 34 73

输出结果:

第一个参数为 1 !第二个参数为 你好 !第十个参数为 10 !第十个参数为 34 !第十一个参数为 73 !参数总数有 11 个!作为一个字符串输出所有参数 1 你好 3 4 5 6 7 8 9 34 73 !

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

Shell输入/输出重定向

这个标题花里胡哨了,通俗的讲就是,因CLI中输入的命令而在CLI所产生的输入结果的 输出,这个输出一般是 CLI界面,当然,也可以是输出到指定的文件中。

重定向命令列表如下:

命令 说明
command > file 将输出重定向到 file。
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 之间的内容作为输入。

输出重定向

重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:

command1 > file1

上面这个命令执行command1然后将输出的内容存入file1。

注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。

  • 实例

执行下面的 who 命令,它将命令的完整的输出重定向在用户文件中(users):

$ who > users

执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件。

你可以使用 cat 命令查看文件内容:

$ cat users_mbsetupuser console  Oct 31 17:35 tianqixin    console  Oct 31 17:35 tianqixin    ttys000  Dec  1 11:33

输入重定向

和 输出重定向相反,Unix命令也可以从文件中获取输入,语法为:

command1 < file1

这样,本来需要从键盘输入的命令会转义到文件读取内容。 注意:输出重定向是大于号(>),输入重定向是小雨号(<)。

  • 实例

统计users文件的行数,执行以下命令

wc -l users

重定向深入讲解

一般情况下,每个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,可以这样写:

$ command 2 > file 或者$ command 2 >> file

标准错误文件(stderr) 如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

$ command > file 2>&1或者$ command >> file 2>&1

如果希望对 stdin 和 stdout 都重定向,可以这样写:

$ command < file1 >file2

command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

转载于:https://my.oschina.net/ahusky/blog/1834302

你可能感兴趣的文章
理解并取证:动态路由协议RIP的工作原理
查看>>
演示:思科路由器到路由器的IOS镜像管理
查看>>
Lync 小技巧-33-BlueStacks安卓模拟器 For Lync 2013
查看>>
从云原生看企业云的未来
查看>>
2013款Mac Pro“神秘”主机详解
查看>>
解决FastJson 1.2.39的bug
查看>>
谈谈VIP漂移那点破事
查看>>
通过脚本案例学习shell(三) --- 通过交互式脚本自动创建Apache虚拟主机
查看>>
hao123联盟新政的机制效用
查看>>
vSphere 6.5密码正确不能登录解决方法
查看>>
ACM HDU 1020Encoding
查看>>
Nvelocity中全选+批量删除
查看>>
jquery常用代码片段
查看>>
Lync 2010 标准版安装注意事项
查看>>
防不胜防 了解DNS缓存中毒攻击原理
查看>>
“.NET研究”如何发布你的Android应用程序
查看>>
等级滤波器(泛化的腐蚀、膨胀和中值滤波)
查看>>
软件开发告诫
查看>>
20120213 情人节前一天 南京 买的碧桂园凤凰城的房子
查看>>
Windows Image Lists
查看>>