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

day030-Shell自动化编程-函数

文章目录

  • 1. 循环控制语句
    • 1.1 案例-通过交互方式获取用户需要检查的ip/域名,用户输入q则退出
  • 2. 函数
    • 2.1 用函数改造上面脚本
    • 2.2 案例-通过ip.txt文件,检查常用端口是否开启
    • 2.3 函数与参数
  • 3. 颜色
    • 3.1 案例-用户自定义函数库,自定义颜色
  • 4. 思维导图

1. 循环控制语句

1.1 案例-通过交互方式获取用户需要检查的ip/域名,用户输入q则退出

[root@oldboy99-Kylin /server/scripts/function_scripts]# cat check_ip.sh
#!/bin/bash
##############################################################
# File Name: check_ip.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:检查ip/域名
##############################################################
export LANG=en_US.UTF-8# vars
tmp_file=`mktemp`
# command
# while 读取ip
while true
doread -p '请输入ip或url,结束请输入q:' ip[ -z "$ip" ] && {echo "输出错误请重新输入"continue} [ "$ip" = "q" ] && {echo "输入结束,进行后续检查操作"break}echo $ip >> $tmp_file
done 
# 检查ip
while read line
do# ping ping -c 1 -W 1 $line >/dev/null 2>&1[ $? -eq 0 ] && echo "$line 可以ping通" || echo "$line 不能ping通"# wgetwget -S -T 1 -t 1 $line >/dev/null 2>&1[ $? -eq 0 ] && echo "$line 可以访问" || echo "$line 不能访问"
done <$tmp_file
[root@oldboy99-Kylin /server/scripts/function_scripts]# bash check_ip.sh
请输入ip或url,结束请输入q:baidu.com
请输入ip或url,结束请输入q:jd.com
请输入ip或url,结束请输入q:127.0.0.1
请输入ip或url,结束请输入q:q
输入结束,进行后续检查操作
baidu.com 可以ping通
baidu.com 可以访问
jd.com 可以ping通
jd.com 不能访问
127.0.0.1 可以ping通
127.0.0.1 不能访问

2. 函数

2.1 用函数改造上面脚本

[root@oldboy99-Kylin /server/scripts/function_scripts]# cat check_ip2.sh
#!/bin/bash
##############################################################
# File Name: check_ip.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:检查ip/域名
##############################################################
export LANG=en_US.UTF-8# vars
tmp_file=`mktemp`
# command
# while 读取ip
function input(){while truedoread -p '请输入ip或url,结束请输入q:' ip[ -z "$ip" ] && {echo "输出错误请重新输入"continue} [ "$ip" = "q" ] && {echo "输入结束,进行后续检查操作"break}echo $ip >> $tmp_filedone return $?
}
# 检查ip
function check_ip(){ping -c 1 -W 1 $line >/dev/null 2>&1[ $? -eq 0 ] && echo "$line 可以ping通" || echo "$line 不能ping通"return $?
}
# 检查wget
function check_wget(){wget -S -T 1 -t 1 $line >/dev/null 2>&1[ $? -eq 0 ] && echo "$line 可以访问" || echo "$line 不能访问"return $?
}
# 读取文件
function read_file(){while read line docheck_ipcheck_wgetdone < $tmp_filereturn $?
}
# main函数
function main(){inputread_filereturn $?
}
main
[root@oldboy99-Kylin /server/scripts/function_scripts]# bash check_ip2.sh
请输入ip或url,结束请输入q:  
输出错误请重新输入
请输入ip或url,结束请输入q:baidu.com
请输入ip或url,结束请输入q:jd.com
请输入ip或url,结束请输入q:q
输入结束,进行后续检查操作
baidu.com 可以ping通
baidu.com 可以访问
jd.com 可以ping通
jd.com 可以访问

2.2 案例-通过ip.txt文件,检查常用端口是否开启

[root@oldboy99-Kylin /server/scripts/function_scripts]# cat check_ip_port.sh
#!/bin/bash
##############################################################
# File Name: check_ip_port.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:检查ip的一些端口是否开启
##############################################################
export LANG=en_US.UTF-8# vars
file="/server/scripts/log/ip.txt"
ports="22,80,443,3306,8080"
source /etc/os-release
# 检查nmap是否存在,不存在则按安装
function check_cmd(){which nmap >/dev/null 2>&1 ||{case "$ID" in kylin|centos|rocky)yum clean allyum install -y nmap;;ubuntu|debian)apt install -y nmap;;*)echo "$ID未识别的系统请手动按照软件包:nmap,然后重新测试"exit 1esac}return $?
}
# 检查nmap
function check_nmap(){nmap -p $ports $line |grep '^[0-9]' |while read port state namedoif [ "$state" = "open" ];thenecho "服务器:$line ,端口:$port ,端口是否开启:是"elseecho "服务器:$line ,端口:$port ,端口是否开启:否/屏蔽"fidonereturn $?
}
# 读取文件
function read_file(){# 检查pingwhile read line doping -c 1 -W 1 $line > /dev/null 2>&1 || {echo "$line 无法访问"continue}check_nmapdone<$filereturn $?
}
# main
function main(){check_cmdread_filereturn $?
}# command
main
[root@oldboy99-Kylin /server/scripts/function_scripts]# bash check_ip_port.sh
服务器:10.0.0.200 ,端口:22/tcp ,端口是否开启:否/屏蔽
服务器:10.0.0.200 ,端口:80/tcp ,端口是否开启:是
服务器:10.0.0.200 ,端口:443/tcp ,端口是否开启:否/屏蔽
服务器:10.0.0.200 ,端口:3306/tcp ,端口是否开启:否/屏蔽
服务器:10.0.0.200 ,端口:8080/tcp ,端口是否开启:否/屏蔽
服务器:baidu.com ,端口:22/tcp ,端口是否开启:否/屏蔽
服务器:baidu.com ,端口:80/tcp ,端口是否开启:是
服务器:baidu.com ,端口:443/tcp ,端口是否开启:是
服务器:baidu.com ,端口:3306/tcp ,端口是否开启:否/屏蔽
服务器:baidu.com ,端口:8080/tcp ,端口是否开启:否/屏蔽
服务器:jd.com ,端口:22/tcp ,端口是否开启:否/屏蔽
服务器:jd.com ,端口:80/tcp ,端口是否开启:是
服务器:jd.com ,端口:443/tcp ,端口是否开启:是
服务器:jd.com ,端口:3306/tcp ,端口是否开启:否/屏蔽
服务器:jd.com ,端口:8080/tcp ,端口是否开启:否/屏蔽
服务器:csdn.net ,端口:22/tcp ,端口是否开启:否/屏蔽
服务器:csdn.net ,端口:80/tcp ,端口是否开启:是
服务器:csdn.net ,端口:443/tcp ,端口是否开启:是
服务器:csdn.net ,端口:3306/tcp ,端口是否开启:否/屏蔽
服务器:csdn.net ,端口:8080/tcp ,端口是否开启:否/屏蔽
服务器:520skx.com ,端口:22/tcp ,端口是否开启:是
服务器:520skx.com ,端口:80/tcp ,端口是否开启:是
服务器:520skx.com ,端口:443/tcp ,端口是否开启:否/屏蔽
服务器:520skx.com ,端口:3306/tcp ,端口是否开启:否/屏蔽
服务器:520skx.com ,端口:8080/tcp ,端口是否开启:否/屏蔽
服务器:www.520skx.com ,端口:22/tcp ,端口是否开启:是
服务器:www.520skx.com ,端口:80/tcp ,端口是否开启:是
服务器:www.520skx.com ,端口:443/tcp ,端口是否开启:否/屏蔽
服务器:www.520skx.com ,端口:3306/tcp ,端口是否开启:否/屏蔽
服务器:www.520skx.com ,端口:8080/tcp ,端口是否开启:否/屏蔽
Failed to resolve "孙克旭.com".
WARNING: No targets were specified, so 0 hosts scanned.
123waeffawe.com 无法访问

2.3 函数与参数

特殊变量脚本中的含义函数中的含义
$n脚本的第n个参数函数的第n个参数
$0脚本名字脚本名字
$#脚本参数个数函数参数个数
$*脚本所有参数函数所有参数
$@脚本所有参数函数所有参数
$?上一个命令的返回值上一个命令的返回值

3. 颜色

  • \E 或\033 表示要开启这种功能。

  • [1;31m

  • [字体效果;颜色m

  • \E[0m 颜色设置结束。

在这里插入图片描述

在这里插入图片描述

3.1 案例-用户自定义函数库,自定义颜色

[root@oldboy99-Kylin /server/scripts/function_scripts]# cat color_func.sh 
#!/bin/bash
##############################################################
# File Name: color_func.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:
###############################################################1.红色函数
function redecho() {str="$@"echo -e "\E[5;31m${str}\E[0m"}#2.红色函数
function greenecho() {str="$@"echo -e "\E[1;32m${str}\E[0m"}#3.红色函数
function yellowecho() {str="$@"echo -e "\E[1;33m${str}\E[0m"}#4.红色函数
function blueecho() {str="$@"echo -e "\E[1;34m${str}\E[0m"}

4. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX

http://www.xdnf.cn/news/955387.html

相关文章:

  • Ubuntu Linux环境查看服务器资源,查询CPU,内存,环境变量等命令
  • 标注工具核心代码解析——load_image【canvas.py]
  • NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
  • 深度解析:DDoS攻击及其防御策略
  • 【深度解析】以太坊中的挖矿难度调整机制:从动态调节到“冰河时代”的倒计时
  • FOPLP vs CoWoS
  • 二、ROS2完成Docker容器和宿主机通信,使用ros2 topic list看到,但是无法echo
  • 驭码 CodeRider 2.0 产品体验:智能研发的革新之旅
  • OceanBase 桌面版
  • 从零开始了解数据采集(二十八)——制造业数字孪生
  • Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
  • 基于FPGA的PID算法学习———实现P比例控制算法
  • 协同过滤算法进行电影推荐
  • java教程笔记(十三)-synchronized和ReentrantLock
  • Hilt vs Dagger2:Android 依赖注入框架对比
  • 2025年css+html面试题
  • PH热榜 | 2025-06-07
  • 有限自动机到正规文法转换器v1.0
  • 土建施工员考试:建筑施工技术重点知识有哪些?
  • Java中方法调用参数传递机制的理解和示例验证
  • NFT模式:数字资产确权与链游经济系统构建
  • 什么是VR全景展示?VR全景展示的用途
  • 微信小程序云开发平台MySQL的连接方式
  • STA(Station)模式与AP(Access Point)模式
  • LeetCode - 260. 只出现一次的数字 III
  • 镜像里切换为普通用户
  • VBA高级应用30例应用4:利用键盘设置来阻止自动运行事件
  • 研读论文《Attention Is All You Need》(14)
  • React---day11
  • 基于vue框架的多媒体教室管理系统72d6w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。