Shell编程之函数用法(详解)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fi
输出如下:
以上脚本首先通过了if语句进行各种判断, 判断用户输入的参数等等;在后面使用了函数 来定义了安装Nginx的操作,最后我们调用了函数使整个函数运行了 起来!!!
呃,大家可以参考参考,若写的不好请谅解~ 我感觉对刚开始接触shell的人还是蛮有帮助的,只不过使用了多分支的if语句,感觉有点繁琐,接下来就会更新 case语句了这样就可以解决多分支if语句很繁琐的问题!!!
以上此脚本中包含了特殊位置变量$#等等这些参数,大家看不懂的可以参考我之前的文章 最后运行的结果如下:
这不是重点,重点是我们使用shell函数来写整个过程,如下: function TS () {
echo "/root/sh/ $0" 请您输入一个网址 exit 1 }
function Check_url () { wget --spider -q -o /dev/null --tries=1 -T 3 $1 if [ "$?" -eq 0 ] then echo "$1 检测成功!" else echo "$1 检测失败" exit 1 fi
|
| || Server || ====================== |
| \ ////
一键安装服务
|
| ||| i i i |||
by Yankerp |
| ___ ___ ====================== |
|___‘. /--.--\ .‘___
|
+------------------------------------------------+
echo "我是张三!" #下面呢 我们执行操作.echo 我是张三
}
#最后 我们以 } 为结束
fj
#调用fj 函数
zhangsan #调用zhangsan函数
那么定义了两个函数,我们最终目的是要调用它所以 在函数的下面输入了fj 和 zhangsan 意思是说 我要调用这两个函数,那么这两个函数中有两个命令 输出 一个张三和凤姐,所以在我们执行脚本的时候结果就会是如下:
3、利用Shell函数开发企业级URL检测脚本 这是书上的一部分案例,但是我还会在这里通过我的想法来解释整个脚本中的全部过程! 1)首先我们不用函数来写一个检测URL的脚本如下:
#!/bin/bash #no.1 if [ "$#" -ne 1 ]
then echo "/root/sh/ $0" 请您输入一个网址 exit 1
#如果用户输入的传参参数不是1
then
# 那么
echo "/root/sh/ $0" 请您输入一个网址 #输出脚本路径和脚本名称 最后输出请您输入一个网址!
exit 1
#退出脚本
fi
#结束
#no.2
wget --spider -q -o /dev/null --tries=1 -T 3 $1 #如果用户输入传参数是对的,那么执行wget命令最后$1是用户输入的内容
2、Shell函数的语法
在shell中 if语句有它的语法,for循环也有它的语法,那么shell中的函数,那肯定也有它的语法有以下三种:
function 函数名 () { 指令... return -n
}
function 函数名 { 指令... return -n
}
函数名 () { 指令... return -n
if [ "$?" -eq 0 ] #如果以上wget测试成功了!
then #那么
echo "$1 检测是成功的!" #输出用户输入网址并输出是成功的
else #否则
echo "$1 检测是失败的!" #输出用户输入网址并输出是失败的
exit 1 #退出脚本
fi #fi结束
感觉不够养眼?没有关系,如下图
fi }
function JG () { #这是最后的函数JG(结果的意思)
if [ "$#" -ne 1 ] ##如果用户输入的传参参数不是1
then #那么
TS
#注意了!!! 调用TS
fi
Check_url $1 #如果上面传参是1 那么就调用Check_url函数
}
JG $* #这里的$*就是把命令行接收的所有参数作为函数传给函数内部
then echo "请您输入数值!" exit 1
fi
if [ "$NUM" -gt 8 ];then echo "请您输入比8小的数值" exit 1
elif [ "$NUM" -eq 0 ];then
echo "请您输入比0大的数值" exit 1 fi ###################### function Nginx_DIR() { yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel &>/dev/null if [ $? -eq 0 ]
在以上图中我们使用了alias命令 后面跟着N=XXX 那么这个N呢就是一个别名,简单的说,当我们启动Nginx服务的时候我们会输入绝对路径,这时候我们可 以设置一个别名,相当于N就等于xxx后面的那条路径,最后我们只输入N 那么就等于执行了启动命令。
函数也有类似于别名的作用,简单的说,函数的作用就是将程序里面多次被调用的代码组合起来,称为函数体,并取一个名字称为(函数名),当我们需要 用到这段代码的时候,我们就可以直接来调用函数名。
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
Shell编 程 之 函 数 用 法 ( 详 解 )
大家好,今天给大家分享的是shell编程中的函数用法,当然这个函数和数学的函数是不一样的,那么在shell中的函数是什么样的,那么一起来看一下。 1、首先在linux中它有一个命令是:alias 也就是别名的意思,那么这时候我们需要实际操作看看这个alias到底有什么用,如下:
例2:分离函数体执行函数的脚本文件 cat >>/etc/init.d/functions<< EOF function zhangsan () {
echo "我就是张三" } EOF 以上代码什么意思:我们可以看到第一行是cat >> /etc/....这个路径 我们完全可以理解为,把下面的内容 导入到/etc/init.d/functions这个文件中; 那么这个文 件是Linux系统内置的脚本函数库
yankerp
}
CDAN
LOG_DIR=/usr/local/src read -p "请您输入1-8任意数值:" NUM
if [ ${#NUM} -ne 1 ] then echo "请您输入1|2|3|4|5|6|7|8" exit 1
fi
expr $NUM + 1 &>/dev/null if [ "$?" -ne 0 ]
then cd $LOG_DIR && wget /download/nginx-1.12.2.tar.gz &>/dev/null && useradd -M -s /sbin/nologin nginx && \
tar zxf nginx-1.12.2.tar.gz && cd nginx-1.12.2/ && \ ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module
fi #no.2 wget --spider -q -o /dev/null --tries=1 -T 3 $1 if [ "$?" -eq 0 ]
then echo "$1 检测是成功的!"
else echo "$1 检测是失败的!" exit 1
fi
剖析:
#!/bin/bash
#no.1
if [ "$#" -ne 1 ]
那么在这里我们来一个总结: 当我们定义函数过多的情况下,我们可以把函数写在某一个文件中,当我们写脚本的时候需要用到这个函数中的某一个指令,那么我们就可以直接来调用文 件中的函数名!
例3:编写带参数的shell函数实例 #!/bin/bash function lisi () {
echo 我的名字叫: $1 } lisi $1 在这里我们定义了一个名字叫做lisi的函数,这里需要注意的是echo那行,正常的输出是没有问题的,但是在后面加了一个特殊的位置变量。$1 最后在我们调 用函数的时候 后面也加了特殊位置变量 $1 执行效果如下:
}
function JG () { if [ "$#" -ne 1 ] then TS fi Check_url $1
} JG $*
剖析:
function TS () { #定义一个名字为TS的函数 (提示的意思) echo "/root/sh/ $0" 请您输入一个网址 #执行的指令是 输出一个:请您输入一个网址 exit 1 #退出
}
提示:在以上的函数语法中,前面的funcation 表示声明一个函数!!! 可以不写 return -n 是指退出函数
例1:Shell函数实例如下
function fj () { echo "我是风姐!"
}
function zhangsan () { echo "我是张三!"
}
fj zhangsan
fi
if [ -e /usr/local/nginx/sbin/nginx ];then ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ && nginx && echo "Nginx安装并启动成功!!!"
fi }
if [ $NUM -eq 1 ] then echo "开始安装Nginx请稍等..." && Nginx_DIR
}
function Check_url () { #定义一个名字为Check_url的函数 (检测的意思) wget --spider -q -o /dev/null --tries=1 -T 3 $1 #如果用户输入传参数是对的,那么执行wget命令最后$1是用户输
入的内容
if [ "$?" -eq 0 ] #如果以上wget去测试成功了! then #那么 echo "$1 检测成功!" #输出用户输入网址并输出是成功的 else #否则 echo "$1 检测失败" # 输出用户输入网址并输出是失败的 exit 1 #退出
最后我们再次执行脚本
最后为了能够让大家清晰的看到if语句的脚本和函数脚本的对比,一张图解释:
4、案例二 实现菜单脚本,使用函数编写如下:
function CDAN(){
cat << yankerp
+------------------------------------------------+
|
|
| _o0o_
1安装Apache
|
| 88"."88
3. 安装MySQL
|
| (|-_-|)
4. 安装PHP
|
| 0\=/0
5. 部署LNMP环境
|
| __/ \__ 6. 安装zabbix监控 |
| ‘\ ///‘ 7. 退出此管理程序
|
| / Linux一键 \ 8. 关闭计算机
我们可以清楚的看到我们写的函数已经导入到了/etc/init.d/functions 这个文件中,那么接下来进行操作了 如下: #!/bin/bash if [ -f /etc/init.d/functions ]
then . /etc/init.d/functions
fi zhangsan 解释:if 如果/etc/init.d/functions是一个普通文件,那么我们执行. /etc/init.d/functions 在这里这个"."是用来加载functions 中的命令或者变量参数等;最后因为 我们在上面定义了zhangsan这个函数,那我们在最后一行可以调用这个zhangsan函数 输出如下:
剖析:
function fj () { echo "我是风姐!" }
# 前面的function是声明一个函数 名字叫 fj () { #下面呢 我们执行操作.echo 我是风姐
#最后 我们以 } 为结束
function zhangsan () { # 前面的function是声明一个函数 名字叫 zhangsan () {
相关文档
最新文档