[轻松学会shell编程]-2、函数

目录

1、定义新的函数(必须先定义后使用)

1.1、main函数

1.2、函数嵌套和变量的作用域问题

1.3、用case和while循环写一个脚本

1.4、函数使用两种变量

1.4.1、return

1.4.2、return和exit的区别

1.4.3、直接将函数的输出结果赋值给变量,不是返回值给变量

2、函数库文件

3、case

4、while

 4.1、三种无限循环的写法

4.1.1、自增的两种方法


1、定义新的函数(必须先定义后使用)

格式:

调用已定义的函数:函数名

向函数内传递参数(可以`使用位置参数):函数名 参数1 参数2

1.1、main函数

做脚本的需求分析的时候,把每一个功能都做成函数。最后写一个main函数,通过case语句带哦也能够所有的其他函数,main函数作为脚本的唯一的入口。

1.2、函数嵌套和变量的作用域问题

  • 函数里可以调用其他的函数,但是被调用函数需要提前定义
  • 函数自己也可以调用自己
  • A函数里的变量i,B函数是可以引用的,默认函数里的变量是全局变量,其他函数可以使用,所以要注意变量名不要重复

1.3、用case和while循环写一个脚本

[root@fttswlp fun]# date +%b
Jun

1.4、函数使用两种变量

全局变量:在函数内部定义的变量,脚本主代码可以获取,脚本主代码定义变量,函数内部也可以获取

局部变量:"local 变量名",确保变量仅在函数内部使用

1.4.1、return

return的值在0~255

 

1.4.2、return和exit的区别

  •  return是退出函数的时候,指定返回值,而且return后面的语句不再执行。如果没有指定返回值,默认是0。
  • return出现在函数中的,并且用来退出函数的;exit出现在进程(脚本)中,并且用来退出进程的
[root@fttswlp fun]# cat fun.sh 
func(){
	if (($1 > S2))
	then
		echo "$1 > $2"
		return 10
	else
		echo "$1 < $2"
		return 20
	fi
}
func 30 50
echo $?
exit 90
echo "hello beautiful world"


###############  结果
[root@fttswlp fun]# bash fun.sh 
30 > 50
10
[root@fttswlp fun]# echo $?
90

1.4.3、直接将函数的输出结果赋值给变量,不是返回值给变量

[root@fttswlp fun]# cat fun2.sh 
func(){
	echo "$1"
	return 10
}

num=func
num1=$(func 200 )

echo $num $num1

########  结果
[root@fttswlp fun]# bash fun2.sh 
func 200

2、函数库文件

如果多个脚本需要调用重复的函数,没必要在每个脚本中定义,只需要创建函数库文件,将需要的函数都放到这个库文件。每个脚本只需要一条语句调用库文件即可。

注意:不能把库文件当作普通脚本 一样在脚本中运行,那样那些函数将不会出现在脚本中。

[root@fttswlp fun]# cat fun3.sh 
. fun2.sh

func 5000


######### 结果
[root@fttswlp fun]# bash fun3.sh 
func 200
5000

在脚本中调用库文件(注意库文件的路径)

方法:使用source或者 "." (操作符) + 库文件路径

3、case

针对变量的不同取值,分别执行不同的命令序列

[root@fttswlp fun]# cat case.sh 
#!/bin/bash

case $1 in
start)
	echo "启动服务"
	mkdir -p ff && echo "yy"
	;;
stop)
	echo "停止服务"
	;;
restart|reload)
	echo "停止服务"
	echo "正在启动服务"
	;;
*)
	echo "usages: please use start|stop|restart"
	;;
esac

###############运行结果
[root@fttswlp fun]# bash case.sh start
启动服务
yy
[root@fttswlp fun]# bash case.sh stop
停止服务
[root@fttswlp fun]# bash case.sh restart
停止服务
正在启动服务
[root@fttswlp fun]# bash case.sh relopd
usages: please use start|stop|restart
[root@fttswlp fun]# bash case.sh reload
停止服务
正在启动服务

4、while

 4.1、三种无限循环的写法

  • while :
  • while true
  • while [1]
[root@fttswlp fun]# cat while.sh 
#!/bin/bash

#控制循环次数的例子
i=1
while (( i < $1 ))
do
	echo $i
	((i++))
done

# 死循环控制退出
k=1
while :
do
	if (( $k == 3 ))
	then
		break
	fi
	echo $k
	((k++))
done


####### 结果
[root@fttswlp fun]# bash while.sh 6
1
2
3
4
5
1
2

4.1.1、自增的两种方法

i++(先引用再运算)和++i(先运算再引用)

[root@fttswlp fun]# i=1
[root@fttswlp fun]# n=$((i++))
[root@fttswlp fun]# echo $i $n
2 1
[root@fttswlp fun]# i=1
[root@fttswlp fun]# m=$((++i))
[root@fttswlp fun]# echo $i $m
2 2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FanMY_71

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值