function:函数
函数只有被调用才会执行
如何调用:给定函数名
函数名出现的地方,会被自动替换为函数代码
函数的生命周期:被调用时创建,返回时终止
return命令返回自定义状态结果
0:成功
1-255:失败
语法一:
function f_name { ...函数体... }
语法二:
f_name(){
...函数体...
}
练习: 写一个脚本,完成如下要求
1.脚本可接受参数:start,stop,restart,status
2.如果参数非此四者之一,提示使用格式后报错退出
3.如果是start,则创建/var/lock/subsys/SCRIPT_NAME,并显示启动成功
考虑: 如果事先已经启动过一次,该如何处理
4.如果是stop,则删除/var/lock/subsys/SCRIPT_NAME,并显示停止完成
考虑: 如果事先已然停止过了,该如何处理
5 如果是restart,则先stop,在start
考虑:如果本来没有start,如何处理
6.如果是status,则:
如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示”SCRIPT_NAME is running“
如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示”SCRIPT_NAME is stopped“
#!/bin/bash proc=$(basename $0) file=/var/lock/subsys/$proc function start { if [ -e $file ]; then echo "$proc服务已启动。。。" else touch $file if [ $? -eq 0 ]; then echo "$proc服务启动成功" else echo "$proc服务启动失败" fi fi } function stop { if [ -e $file ]; then rm -rf $file if [ $? -eq 0 ]; then echo "$proc服务停止成功" else echo "$proc服务停止失败" fi else echo "$proc服务已停止" fi }
function restart { if [ -e $file ]; then stop start else start fi }
function status { if [ -e $file ]; then echo "$proc is running" else echo "$proc is stopped" fi }
while true; do case $option in start) start ;; stop) stop ;; restart) restart ;; status) status ;; esac read -p "Enter an option(start or stop or restart or status):" option if [[ $option != "start" && $option != "stop" && $option != "status" && $option != "restart" ]]; then read -p "wrong option,Enter an option again:" option fi done
test18.sh 脚本加入服务:
cp test18.sh /etc/rc.d/init.d chkconfig --add test18.sh chkconfig --list test18.sh chkconfig --level 2345 testsrv on
练习: 添加10个用户
#!/bin/bash # 添加是个用户,函数实现 function adduser { if [ $# -lt 1 ]; then return 2 # 2: no arguments fi if id $1 &> /dev/null; then echo "$1 exists." return 1 else useradd $1 [ $? -eq 0 ] && echo "add $1 success" && return 0 fi } for i in $(seq 1 1 10);do adduser myuser$i done
函数递归:函数直接或间接调用自身
1.阶乘:
#!/bin/bash fact() { if [ $1 -eq 0 -o $1 -eq 1 ]; then echo 1 else echo $[$1*$(fact $[$1-1])] fi } fact 5
2.斐波那契
#!/bin/bash fab (){ if [ $1 -eq 1 -o $1 -eq 2 ]; then echo 1 else echo $[$(fab $[$1-1])+$(fab $[$1-2])] fi } fab 10