shell脚本开发之函数
把复杂的命令执行过程,通过逻辑代码,组成一个脚本文件,再去执行该文件。(function)
函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 function name () { <commond> } function name { <commond> } name () { <commond> }
定义和调用在同一个文件,直接函数名调用
定义和调用不在同一个文件,可以 source xx.sh
加载到 shell 环境中。就可以调用。
查看当前定义的函数,可以 set | grep ^name
查看。
实践
三岁小孩都会,不写了
函数传参
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash hello () { echo "Hello world!!!" } helloP () { echo "Hello, your param is $1 $2 $3 , 一共是$# 个参数" }
1 2 3 4 5 6 7 8 9 10 #!/bin/bash path=`pwd ` [ -f $path /func.sh ] && { . $path /func.sh } || exit hello helloP a b c
检测网站是否可访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/bash function usage () { echo "Usage: $0 url" exit 1 } check_url () { wget --spider -q -o /dev/null --tries=1 -T 5 $1 if [ "$?" == 0 ]; then echo "$1 is running..." else echo "$1 is down..." fi } main () { if [ "$# " -ne "1" ]; then usage fi check_url $1 } main $*
美化输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #!/bin/bash lsb_functions="/lib/lsb/init-functions" if test -f $lsb_functions ; then . $lsb_functions else init_functions="/etc/init.d/init-functions" if test -f $init_functions ; then . $init_functions fi fi function usage () { echo "Usage: $0 url" exit 1 } check_url () { wget --spider -q -o /dev/null --tries=1 -T 5 $1 if [ "$?" == 0 ]; then log_success_msg "$1 is running..." else log_failure_msg "$1 is down..." fi } main () { if [ "$# " -ne "1" ]; then usage fi check_url $1 } main $*
评价是:没啥用,更丑了…
rsync 启停脚本开发
完结撒花!!!