函数的定义和使用
函数1函数的定义1
函数的定义2
函数的调用
# 命令行下定义行数
[root@izuf6j02r724hog9g0lyndz shell_practice]# test()
> {
> echo "hello world"
> }
[root@izuf6j02r724hog9g0lyndz shell_practice]# test
hello world
[root@izuf6j02r724hog9g0lyndz shell_practice]#
案例1:定义脚本,当nginx进程挂掉之后会自动把进程拉起
如果通过ps -ef 抓取到进程后,通过echo ?=1进程已经死亡。假如我们在命名脚本的时候名字中包含nginx,此时我们执行脚本的时候脚本依旧作为一个进程,此时即使我们在脚本中过滤了grep 的进程,依旧会输出1,因此命名的时候不能讲脚本的名字中包含nginx。 ,grep -v $this_pid自然会过滤该脚本的进程
#!/bin/bash
#
this_pid=$$
while true
do
ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null
if [ $? -eq 0 ];then
echo "Nginx is running well"
sleep 3
else
systemctl start nginx
echo "Nginx is down,Start it...."
fi
done
向函数传递参数
shell中传参调用有参数的函数
使用$1,$2等参数
写一个脚本,可以实现"+-*/"
#!/bin/bash
#
function calcu
{
case $2 in
+)
echo "`expr $1 + $3`"
;;
-)
echo "`expr $1 - $3`"
;;
\*)
echo "`expr $1 \* $3`"
;;
/)
echo "`expr $1 / $3`"
;;
esac
}
calcu $1 $2 $3
#命令行调用
sh calcu.sh 20 + 30
函数返回值
返回值的方式返回1-255区间的值
使用echo返回
实例:返回值判断nginx进程是否存在,使用this_pid=$$的时候不能用空格
三元运算符#! /bin/bash
#
this_pid=$$
function n
{
ps -ef | grep nginx |grep -v grep | grep -v $this_pid &> /dev/null
if [ $? -eq 0 ];then
return
else
return 1
fi
}
n && echo "runnint" || echo "stoped"
输出所有用户,用echo做返回值
#! /bin/bash
#
function users
{
users=`cat /etc/passwd |cut -d: -f1`
echo $users
}
user_list=`users`
for i in $user_list
do
echo $i
done
局部变量与全局变量
全局变量局部变量
如上,虽然对var2变量进行了赋值,但是因为变量赋值的函数并没有被调用,因此var2输出还是null
这个var2赋值的函数test一旦被调用,var2就变成一个全局变量,此时可以输出var2的值,87
使用loal关键字,var2变成局部变量
函数库
为什么要用函数库函数库实例
函数库实例- 定义库函数:vi bash_function。注意这里的命令替换,假如用expr 做数学运算,要转义,同时要用命令替换,假如用$(())来做数学运算,不用转义,同时不用加``符号。
function add
{
echo "`expr $1 + $2`"
}
function reduce
{
echo "`expr $1 - $2`"
}
function mul
{
echo "$(($1 * $2))"
}
function mult
{
echo "`expr $1 \* $2`"
}
~
- 使用.来做命令替换
#! /bin/bash
#
. /root/shell_practice/bash_function
add 1 2
mult 3 4
mul 3 5
库函数的使用经验
网友评论