一、函数
1、function: 功能,函数
2、函数:把某个特定的功能或应该独立执行的代码封装成独立的功能并取个名字,使用时调用它即可;
3、函数特征:结构化编程,不能独立运行,需要调用时执行,可以被多次调用;
二、函数编程和应用
1、定义一个函数,方法一:
function FUNCNAME {
command(独立执行的命令)
}
2、定义一个函数,方法二:
FUNCNAME() {
command
}
3、函数自定义执行状态返回值:return #
#表示:0-255
4、接受参数的函数:./SHELLNAME.sh m n
参数$1: m
参数$2: n
如1:
#!/bin/bash
#
SHOWMENU() {
cat << EOF
d|D)show disk usages.
m|M)show menory usages.
s|S)show swap usages.
q|Q)quit.
EOF
}
SHOWMENU
read -p "Your are choice:" CHOICE
until [ $CHOICE == ‘q‘ -o $CHOICE == ‘Q‘ ];do
case $CHOICE in
d|D)
df -hP;;
m|M)
free -m | grep "^Mem";;
s|S)
free -m | grep "^Swap";;
*)
read -p "Your are choice again:" CHOICE;;
esac
SHOWMENU
read -p "Your are choice:" CHOICE
done
如2:
#!/bin/bash
#
ADDUSER() {
USERNAME=user20
if ! id -u $USERNAME &> /dev/null;then
useradd $USERNAME
echo $USERADD | passwd --stdin $USERADD &> /dev/null
return 0
else
return 1
fi
}
ADDUSER
if [ $? == 0 ];then
echo "user add finished."
else
echo "user add failuer."
fi
如3:
#!/bin/bash
#
TWOSUM() {
echo $[$1+$2]
}
for I in {1..10};do
let J=$[$I+1]
echo "$I plus $J `TWOSUM $I $J`" ---->传递2个参数
done
练习,写一个脚本:
判定192.168.0.200-192.168.0.254之间的主机哪些在线。要求:
1、使用函数来实现一台主机的判定过程;
2、在主程序中来调用此函数判定指定范围内的所有主机的在线情况。
方法一:
#!/bin/bash
#
PING() {
for I in {1..10};do
if ping -c 1 -w 1 192.8.8.$I &> /dev/null;then
echo "192.8.8.$I is up."
else
echo "192.8.8.$I is down."
fi
done
}
PING
方法二:
#!/bin/bash
#
PING() {
if ping -c 1 -w 1 $1 &> /dev/null;then
echo "$1 is up."
else
echo "$1 is down."
fi
}
for I in {1..10};do
PING 192.8.8.$I
done
方法三:
#!/bin/bash
#
PING() {
if ping -c 1 -w 1 $1 &> /dev/null;then
return 0
else
return 3
fi
}
for I in {1..10};do
PING 192.8.8.$I
if [ $? == 0 ];then
echo "192.8.8.$I is up."
else
echo "192.8.8.$I is down."
fi
done
写一个脚本:使用函数完成
1、函数能够接受一个参数,参数为用户名;
判断一个用户是否存在
如果存在,就返回此用户的shell和UID;并返回正常状态值;
如果不存在,就说此用户不存在;并返回错误状态值;
2、在主程序中调用函数;
扩展1:在主程序中,让用户自己输入用户名后,传递给函数来进行判断;
扩展2:在主程序中,输入用户名判断后不退出脚本,而是提示用户继续输入下一个用户名;
如果用户输入的用户不存在,请用户重新输入;但如果用户输入的是q或Q就退出;
参考:
#!/bin/bash
#
USER() {
if id -u $1 &> /dev/null;then
echo "$1 is UID and SHELL:`grep "^$1" /etc/passwd | cut -d: -f3,7`"
return 0
else
echo "Not user $1"
return 5
fi
}
read -p "Your input username:" USERNAME
until [ $USERNAME == q -o $USERNAME == Q ];do
USER $USERNAME
if [ $? == 0 ];then
read -p "Your input username:" USERNAME
else
read -p "Your input username again:" USERNAME
fi
done
Linux01-BASH函数编程42