shell 函数
函数先定义后使用
shell中函数的定义格式如下:[function] funname [()]
{
action;
[return int;]
}
说明:
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面的例子定义了一个函数并进行调用:
demoFun(){
echo"这是我的第一个 shell 函数!"
}
echo"-----函数开始执行-----"
demoFun
echo"-----函数执行完毕-----"
输出结果:
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----
funWithReturn(){
echo"这个函数会对输入的两个数字进行相加运算..."
echo"输入第一个数字: "
read aNum
echo"输入第二个数字: "
read anotherNum
echo"两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo"输入的两个数字之和为 $? !"
这个函数会对输入的两个数字进行相加运算...
输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !
函数返回值在调用该函数后通过 $? 来获得。
echo "...."echo 与 " 中间要有空格
函数参数
重定向
$ command2>file
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command > file 2>&1
或者
$ command >> file 2>&1
如果希望对 stdin 和 stdout 都重定向,可以这样写:
$ command < file1 >file2
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
Here Document
Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。
它的基本的形式如下:
command << delimiter
document
delimiter
它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。
注意:**结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。开始的delimiter前后的空格会被忽略掉。**
实例
在命令行中通过 wc -l 命令计算 Here Document 的行数:
$ wc-l << EOF
欢迎来到
我的世界
www.runoob.com
EOF
3 # 输出结果为 3 行
$
我们也可以将 Here Document 用在脚本中,例如:
#!/bin/bash
# author:我的笔记
# url:www.com
cat << EOF
欢迎来到
shell教程
www.com
EOF
执行结果:
欢迎来到
shell教程
www.com
放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符
文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
实例
创建两个 shell 脚本文件。
test1.sh 代码如下:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
url="http://www.runoob.com"
test2.sh 代码如下:
#!/bin/bash
# author:我的笔记
# url:www.com
#使用 . 号来引用test1.sh 文件
. ./test1.sh
# 或者使用以下包含文件代码
# source ./test1.sh
echo"教程官网地址:$url"
接下来,我们为 test2.sh 添加可执行权限并执行:
$ chmod+x test2.sh
$ ./test2.sh
shell教程官网地址:http://www.shell.com
注:被包含的文件 test1.sh 不需要可执行权限。
例
#test.sh
fun(){
echo"函数的操作"
echo"输入第一个数字:"
read aNum
echo"输入第二个数字:"
read another
echo"数字分别为$aNum 和 $another"
return $(($aNum+$another))
}
fun
echo"输入两个的数之和为:$? !"
#test2.sh
./test.sh
echo"文件包含"
chmod +x test2.sh 给执行权限 ./test2.sh执行
函数的操作
输入第一个数字:
2
输入第二个数字:
5
数字分别为2 和 5
输入两个的数之和为:7 !
文件包含