学习目标:
学习shell脚本函数使用
总结:
1- 函数使用和C语言类似。函数调用直接写函数名和传入参数;函数返回值可以借用$?处理。
2- shell中也有局部变量全局变量。局部变量加关键字local,不加的都是全局变量。
正文
1- 基本语法
a- 函数基本语法:有返回值、无返回值
/*1- 不关心返回值*/
#函数定义
func()
{
do something
}
#函数调用。函数调用可以传入参数,利用位置变量进行处理
func param
/*2- 利用返回值*/
#函数定义
func()
{
do something
return xxx
}
#函数调用。函数调用可以传入参数,处理利用$?,还可以单独定义一个变量进行处理
func param
#打印函数返回值
echo "\$?=$?"
b- 局部、全局变量
局部变量加关键字local,不加的都是全局变量。结合后面例子理解
func()
{
#全局变量g_para;局部变量l_para
g_para=$1
local l_para=$2
}
2- 示例
I- 检查用户是否存在
关于wc用法参考:https://www.cnblogs.com/cloudPython/p/4893221.html
对于who |grep "^$1" |wc -l命令是检查用户个数,对于输入不是完全匹配,可以过grep滤掉(找下grep过滤用法)。
#!/bin/bash
check_user()
{
check_cnt=`who |grep "^$1" |wc -l `
if [ $check_cnt -eq 1 ]
then
return 0
else
return 1
fi
}
while true
do
echo -n "Please Input username:"
read username
check_user $username
if [ $? -eq 0 ]
then
echo "$username online"
else
echo "$username not online"
fi
done
II- 全局变量、局部变量练习
调用函数func(),在函数体内部将第一个参数分别赋值给全局变量g_para和局部变量l_para。在函数体外部打印局部变量和全局变量。可以看到全局变量可以打印到,局部变量打印不到。
脚本:
#!/bin/bash
func()
{
g_para=$1
local l_param=$1
echo "\$1=$1"
echo "\$2=$2"
return 12
}
echo "func begain"
func hello world
echo "\$?=$?"
echo "g_para=$g_para"
echo "l_local=$l_local"
echo "func end"
结果:
func begain
$1=hello
$2=world
$?=12
g_para=hello
l_local=
func end