shell脚本编程-函数
shell脚本编程-函数
变量、条件、循环、函数、数组、sed、awk
function --> 函数
语法格式:
//函数名
function_name () {
//函数体,在函数中执行的命令行
commands…
//参数返回,return语句可选的
//如果使用return语句,后面跟的值0-255;
//如果未使用,则以函数的最后一条命令的运行结果作为返回值。
return int :
}
function_name {
commands...
}
向函数中传递参數:
位置变量:
$0 :表示当前脚本的文件名
$# :显示一共有多少个参数
[email protected] :显示所有的参数
$1 :表示第一个参数
$2 :表示第二个参数
pass () {
a=$1
echo $0
echo $#
echo $1
echo $2
echo [email protected]
}
调用函数:
pass 函数名 one two three
执行结果:
pass.sh
3
one two three
one
two
one
局部变量和全局变量:
a=1
//全局变量
function a {
b=2
//这里的b并不是局部变量,而是全局变量
//如何在函数体内定义局部变量:
local a=2
local b=3
//local 将全局变量变为局部变量
echo $b
echo $a
}
a
echo $a
echo $b
//结果为空,因为b是在函数体内定义的
vim a. sh
cat a. sh
#!/bin/bash
a=1
b=5
function a {
b=2
echo $a
echo $b
}
a
echo $a
echo $b
#!/bin/bash
a=1
b=5
function a {
a=3
b=2
echo $a
echo $b
}
a
echo $a
echo $b
#sh a.sh
3
2
3
2
#!/bin/bash
a=1
b=5
function a {
local a=3
local b=2
echo $a
echo $b
}
a
echo $a
echo $b
系统变量: $FUNCNAME :表示当前函数的名称
tom(){
echo $FUNCNAME
}
jerry(){
echo $FUNCNAME
tom
}
jerry
执行结果:
Jerry
tom
//执行b函数的过程:
b(){
echo $FUNCNAME
a (){
echo $FUNCNAME
}
a
}
b
return:
//如果使用return语句,后面跟的值0-255;
//如果未使用,则以函数的最后一条命令的运行结果作为返回值。
检查-下某个进程是否存在?
checkpid () {
local i
//定义了一个局部变量
for i in i" ] && return 0
done
return 1
}
//进程存在返回0 不存在返回1
checkpid $pid1 ? = 0 ] ;then
echo"is running"
else
echo"not running"
fi
/proc 目录 :虚拟目录,系统内存的映射
屏蔽主机的Ping命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
函數调用的几种特殊情况:
$$ : shell本身的PID,就是脚本运行的当前进程ID号
$! :后台运行的最后一个进程的进程ID号
1.函数体中调用其他函数
2.将函数放入后台
3.递归调用函数函数体内调用自己
fork炸弹:
.(){.|.&};.
上一篇: 剑指offer 28 字符串的排列