脚本编程之函数:
function:功能
结构化编程,不能独立运行,需要调用时执行,可以被多次调用
定义一个函数(下面两种用法等效)
function FUNCTION {
command
}
FUNCNAME() {
command
}
例子:
#!/bin/bash
function SHOWMENU {
#SHOWMENU() {
cat << EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit.
EOF
}
SHOWMENU
read -p “Your choice:” CHOICE
until [ $CHOICE == ‘q’ -o $CHOICE == ‘Q’ ]; do
case $CHOICE in
d|D) df -lh ;;
m|M) free -m | grep “^Mem” ;;
s|S) free -m | grep “^Swap” ;;
*)
SHOWMENU
read -p "Your choice,again: " CHOICE ;;
esac
SHOWMENU
read -p "Your choice: " CHOICE
done
自定义执行状态返回值:
return #
0-255
例子:
#!/bin/bash
ADDUSER() {
USERNAME=hadoop
if ! id -u $USERNAME &> /dev/null; then
useradd $USERNAME
echo $USERNAME | passwd --stdin $USERNAME &> /dev/null
return 0
else
return 1
fi
}
ADDUSER
if [ $? -eq 0 ]; then
echo “add user finished.”
else
echo “Failuer.”
fi
接收参数的函数:
./a.sh m n
$1:m
$2:n
TWOINT 5 6
$1:5
$2:6
例子:
#!/bin/bash
TWOSUM() {
echo $[$1+$2]
}
SUM=`TWOSUM 5 6`
echo $SUM
执行过程:
/home/gaps>twosum.sh 5 6
11
/home/gaps>bash -x twosum.sh
++ TWOSUM 5 6
++ echo 11
+ SUM=11
+ echo 11
11
例子:ping测试IP地址
#!/bin/bash
PING() {
if ping -c 1 -W 1 $1 &> /dev/null; then
return 0
else
return 1
fi
}
for I in {200…206}; do
PING 192.168.0.$I
if [ $? -eq 0 ]; then
echo “192.168.0.$I is up.”
else
echo “192.168.0.$I is down.”
fi
done