当前位置: 首页 > news >正文

Shell函数-4

1. 函数

  • 把多个代码(命令,判断,循环)打包,整体,可以反复使用
  • 函数相当于是命令,函数名字不要于命令名字冲突

2. 创建函数与使用

2.1. 函数格式

#创建 function 名字() { 命令 return $? } #使用 名字
  • 案例:创建函数show,其中包含多个echo命令
function show() { echo "shell编程要有目标" echo "shell编程要多书写于练习" echo "shell编程要写个超过300行的脚本" echo "shell编程目标:巡检脚本,部署脚本,优化脚本" echo "shell编程要阅读别人的代码" #设置函数返回值 return $? echo test }

2.2. 其他函数格式

show () { 命令 } function show { 命令 return $? }

3. 书写脚本使用函数

  • 案例21:通过ip.txt文件(ip,域名),一个一个检查
#!/bin/bash ############################################################## # File Name: 21-port_check.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #1.vars ip_list=/server/scripts/ip.txt ports="22,80,443,3306,8080" #2.check_nmap function check_nmap_pkg() { which nmap >/dev/null 2>&1 if [ $? -ne 0 ];then source /etc/os-release case "$ID" in kylin|centos|rocky) yum clean all yum -y install nmap ;; ubuntu|debian) apt -y install nmap ;; *) echo "未识别的操作系统,请手动安装nmap" exit 1 esac fi return $? } #3.while function check_port() { while read line do ping -c 1 -W 1 ${line} >/dev/null 2>&1 if [ $? -eq 0 ];then nmap -p ${ports} ${line} | grep '^[0-9]' | while read port status name do if [ "${status}" = "open" ];then echo "${line},${port}端口,开启" else echo "${line},${port}端口,关闭" fi done else echo "${line}不通" fi done <${ip_list} return $? } function main() { check_nmap_pkg check_port } main

3.1. 函数与参数

特殊符号名字

脚本中含义

$n

第n个参数

函数第n个参数

$0

脚本名字

脚本名字

$#

参数个数

函数参数个数

$*

所有参数

函数所有参数

$@

所有参数

函数所有参数

$?

上一个命令返回值

上一个命令返回值

#!/bin/bash ############################################################## # File Name: show_func.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## function show() { lang=$1 echo "脚本名字:$0" echo "函数参数个数:$#" echo "函数所有参数:$*" echo "${lang}编程要有目标" echo "${lang}编程要多书写于练习" echo "${lang}编程要写个超过300行的脚本" echo "${lang}编程目标:巡检脚本,部署脚本,优化脚本" echo "${lang}编程要阅读别人的代码" #设置函数返回值 return $? } show $* [root@ky201 /server/scripts]# bash show_func.sh shell python go 脚本名字:show_func.sh 函数参数个数:3 函数所有参数:shell python go shell编程要有目标 shell编程要多书写于练习 shell编程要写个超过300行的脚本 shell编程目标:巡检脚本,部署脚本,优化脚本 shell编程要阅读别人的代码

案例22:书写一个检查任意命令是否存在的函数,命令通过传参方式传递到函数中

#!/bin/bash ############################################################## # File Name: 22.cmd_check.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## function cmd_check() { cmd=$1 which ${cmd} >/dev/null 2>&1 rc=$? if [ $rc -ne 0 ];then echo "${cmd}命令不存在" exit 1 fi return $rc } cmd_check $1 #第2种写法 function cmd_check_v2() { fun_cmd=$1 if ! which $fun_cmd >/dev/null 2>&1;then echo "$fun_cmd 不存在" exit 1 fi return $? }

案例23:写一个检查任意站点是否可以ping通的函数,站点或ip通过传参方式传递到函数中

#!/bin/bash ############################################################## # File Name: 23.ping_check.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## function ping_check() { ip=$1 ping -c 1 -W 1 ${ip} >/dev/null 2>&1 if [ $? -ne 0 ];then echo "${ip}ping不通" rc=1 else echo "${ip}可以ping通" rc=0 fi } ping_check $1

3.2. 颜色函数

echo -e "\E[1;31m红色字oldboy\E[0m" echo -e "\E[2;31m红色字oldboy\E[0m" echo -e "\E[3;31m红色字oldboy\E[0m" echo -e "\E[4;31m红色字oldboy\E[0m" echo -e "\E[5;31m红色字oldboy\E[0m" echo -e "\E[6;31m红色字oldboy\E[0m" echo -e "\E[7;31m红色字oldboy\E[0m" echo -e "\E[8;31m红色字oldboy\E[0m" 1 加粗 2 正常 3 闪烁 \E 或\033 表示要开启这种功能。 [1;31m [字体效果;颜色m 1 加粗 2 正常 3 闪烁 31 红色 32 绿色 33 黄色 34 蓝色 \E[0m 颜色设置结束。 #创建颜色函数 redecho 内容 输出显示为红色闪烁 greenecho 内容 输出绿色加粗 yellowecho 内容 输出黄色加粗 blueecho 内容
  • 创建颜色函数库
function redecho() { str="$*" echo -e "\E[5;31m"$*"\E[0m" } function greenecho() { str="$*" echo -e "\E[1;32m"$*"\E[0m" } function yellowecho() { str="$*" echo -e "\E[1;33m"$*"\E[0m" } function blueecho() { str="$*" echo -e "\E[1;34m"$*"\E[0m" }
  • 使用颜色函数库
#加载颜色函数 func_file=/server/scripts/func.d/color_func.sh if [ -f ${func_file} ];then source ${func_file} else exit 1 fi

4. 总结

  • continue,break
  • exit,return
  • 函数传参区别
  • 创建使用颜色函数

http://www.jsqmd.com/news/464634/

相关文章:

  • Pycharm通过代码注释实现代码折叠
  • Shell编程-5
  • 豆包+Kimi降AI指令大全:25条实测有效的提示词分享
  • 安装linux系统
  • 比话降AI使用教程:知网专用降AI工具从入门到精通
  • Linux文件管理
  • 【Gormacs】Gromacs伞形采样原理
  • tomcat优化
  • OpenAI Gym 介绍
  • Linux优化-ssh配置
  • 论文分段降AI效果翻倍?手把手教你正确的段落式降AI技巧
  • ansible初体验
  • Shell编程-2
  • Linux核心文件和系统巡检
  • ansible剧本与变量
  • 基于SpringBoot实现的校园活动管理系统设计与实现
  • AutoDl-较大文件上传最快方法
  • 【redis】redis重新创建集群
  • 【限时免费】 claudecodeui:AI编程助手可视化界面
  • 对学生信息管理系统的改进
  • Shell编程-3
  • WSL端口代理配置全攻略:从零开始实现本地IP访问(附常见问题排查)
  • ansible变量-循环-判断-jinja2模板
  • 5分钟搞定Flink1.19本地部署:用JDK17运行WordCount示例教程
  • 7步掌握 Angular 项目的 Pull Request 评审流程:从提交到合并的完整指南
  • ansible变量-调试-优化
  • docker容器安装与使用
  • 【Gromacs】使用伞形采样研究Her2蛋白聚集的详细操作指南
  • 国产数据库新选择:GBase-8a单机版在Linux下的保姆级安装教程(附常见问题解决)
  • STM32以太网开发实战:DP83848 vs LAN8742选型指南(附CubeMX配置)