1、什么是函数?
2、如何定义函数
3、案例
(1)实现自定义命令行(临时命令行的定义,只在当前进程中有效)
#!/bin/bash
hell() //定义函数
{
echo "hello wolrd" 函数主体
love()
{
echo "i love you"
}
运行:
####运行之前要将命令读入生效
[root@server1 shells]# source han_shu.sh
[root@server1 shells]# hell
hello wolrd
[root@server1 shells]# love
i love you
当定义的命令行与当前用户定义的命令相同时,该脚本在读入变量时会爆语法错误:
[root@server1 shells]# source han_shu.sh
bash: han_shu.sh: line 2: syntax error near unexpected token `('
bash: han_shu.sh: line 2: `hello()'
但显然不是语法错误,而是该变量与用户定义变量冲突。定义当前用户bash信息在/home/xxx/.bashrc
要求:输入一个用户名,判断是否存在,若存在继续输入,若不存在,为其建立用户,然后显示用户已经创建,继续输入,直到输入exit,将退出程序。
代码如下:
#!/bin/bash
2 NAME=""
3 ADD()
4 {
5 useradd $NAME
6 read -s -p "please input password:" PASSWD
7 echo "$PASSWD" |passwd --stdin $NAME &> /dev/null
8 echo "$NAME is created"
9 READ
10 }
11
12 TEST()
13 {
14 id $NAME &> /dev/null
15 [ $? -eq 0 ] && echo "$NAME is exit" && READ
16 [ $? -ne 0 ] && ADD
17 }
18 READ()
19 {
20 read -p "please input username:" NAME
21 [ -z $NAME ] && READ || [ $NAME = "exit" ] && echo "bye" && exit || TEST
22
23 }
24
25 READ
4、return的用法及功能
(1)return返回命令状态值的设定
实验脚本如下:
#!/bin/bash
hell() //定义函数
{
echo "hello wolrd" 函数主体
love()
{
echo "i love you"
}
####当我们不设置return值时,运行成功默认返回0;
[root@server1 ~]# love
i love you
[root@server1 ~]# echo $?
0
#####设定love函数的返回值为10,再查看上一命令状态值:
[root@server1 shells]# love
i love you
[root@server1 shells]# echo $?
10
5、函数的调用
(1)当前命令行调用函数(只针对当前bash进程生效)
如前面所提的临时命令行设置,直接source将脚本中的函数生效,然后就可以在本进程中调用。
[root@server1 shells]# love
i love you
[root@server1 shells]# /bin/bash
[root@server1 shells]# love
bash: love: command not found...
(2)定义到用户的环境变量 (~/.bashrc)
(3)脚本中调用(注意传参)
6、实例
#!/bin/bash
function input_context()
{
input=""
while [ -z "$input" ]
do
read -p "$1" input
done
}
input_context "please input your name:" //调用函数,并给它传参。即”$1“
name="$input"
input_context "please input your age:"
age="$input"
input_context "please input your sex:"
sex="$input"
echo -e "name:$name\nage:$age\nsex:$sex"
执行结果:
[root@server1 shells]# sh jj.sh
please input your name:ky
please input your age:24
please input your sex:nv
name:ky
age:24
sex:nv