Shell判断输入是否有效IP和字母

简介: Shell判断输入是否有效IP和字母

1、需求目的

   最近在研究ansible自动化工具,在主机表(/etc/ansible/hosts)添加管理节点信息时,几台到十几台还可以手动添加,到了百十台工作量就大了。于是想用脚本自动添加,减少工作量,刚开始想到for循环自动添加,但添加的IP、用户、密码,都不相同,实现起来比较困难,也没太多时间去研究,结果就用了手动交互输入。

用户信息表如下格式:

# cat /etc/ansible/hosts

192.168.1.100   ansible_ssh_user=user  ansible_ssh_pass=123

2、实现思路

   2.1  先输入IP,并判断输入的是否有效IP地址和输入的IP是否已经存在

   2.2  判断输入用户名是否为字母

   2.3  密码就不多说,如上述都满足条件,则通过变量引用将节点信息追加到主机表中,并打印输入内容

3、测试

wKioL1TNiiOCwn4QAALd2jSUE0s070.jpg

4、脚本内容如下

#====================================================
# Author: lizhenliang - EMail:zhenliang369@163.com
# Last modified: 2015-02-1
# Filename: input_hostinfo.sh
# Description: 
# blog:lizhenliang.blog.51cto.com
#====================================================
User_File=/etc/ansible/hosts
Check_IP()
{
while true
do
    read -p "Please input IP address: " ip
    IP_Count=`cat user_info |grep "\<$ip\>" |wc -l`     #统计用户信息文件中是否包含输入的IP,如果已存在则重新输入
    if [ -z $ip ];then      #输入不能为空
        echo "Enter not null." 
    elif [ $ip == exit -o $ip == quit -o $ip == q ];then        #如果输入exit、quit、q就退出输入模式
        exit 1;
    elif [  $IP_Count -eq 1 ];then
        echo "IP $ip is already! Please enter the IP agagin." 
    elif [[ $ip =~ ^[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[1-9]{1,3}$ ]];then     #输入的不是数字或不是IP格式,则重新输入
        #^$:从开始到结束是数字才满足条件,=~:一个操作符,表示左边是否满足右边(作为一个模式)正则表达式
        a=`echo $ip |cut -d. -f1`
        b=`echo $ip |cut -d. -f2`
        c=`echo $ip |cut -d. -f3`
        d=`echo $ip |cut -d. -f4`
        if [ $a -le 255 -a $b -le 255 -a $c -le 255 -a $d -le 255 ];then
        #当满足输入条件时,截取IP四段数字进行整数比较,判断四段数字是否小于或等于255,同时满足条件,跳出所有循环继续,如果其中一个不满足,则重新输入
            break;
        else
            echo "IP format error,Please enter the IP again."
        fi
    else
        echo "IP format error,Please enter the IP again."
    fi
done
}
########################################################
Check_User()
{
while true
do
    read -p "Please input username: " username
    if [ -z $username ];then        #输入不能为空
        echo "Enter not null."
    elif [[ ! $username =~ ^[a-z]+$ ]];then      #输入的不是字母,则重新输入
        echo "Enter the username must is letter."
    else
        break;      #当满足输入条件时,跳出所有循环
    fi
done
}
########################################################
Password()
{
    read -p "Please input pass: " Password
}
########################################################
Check_IP;
Check_User;
Password;
echo "$ip   ansible_ssh_user=${username}    ansible_ssh_pass=${Password}" >> $User_File
#如果上面输入都满足条件,将输入的信息追加到用户信息文件中,并打印追加内容
echo "------------------------"
tail -n 1 $User_File


相关文章
|
6月前
|
Shell Linux 网络安全
linux系统防CC攻击自动拉黑IP增强版(Shell脚本)
linux系统防CC攻击自动拉黑IP增强版(Shell脚本)
207 0
|
25天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
4月前
|
网络协议 Shell Linux
Shell脚本配置Centos静态ip地址
这是一个用于在CentOS上设置静态IP的Shell脚本摘要: - 脚本交互式获取用户输入的IP地址、子网掩码、网关和DNS。 - 使用`sed`命令动态更新`/etc/sysconfig/network-scripts/ifcfg-ENS33`配置文件。 - 修改`BOOTPROTO`为`static`,并设置IP、NETMASK、GATEWAY和DNS1字段。 - 用`systemctl restart network`重启网络服务。 - 提示用户新配置的静态IP信息。
156 5
|
4月前
|
移动开发 网络协议 Shell
查看IP访问量的shell脚本汇总
查看IP访问量的shell脚本汇总
|
6月前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)
|
6月前
|
Shell
Shell脚本检测服务器或者ip哪些端口是开放的都是开放了哪些端口
Shell脚本检测服务器或者ip哪些端口是开放的都是开放了哪些端口
47 0
|
6月前
|
Shell
Shell一键检测本地存活ip是否存活
Shell一键检测本地存活ip是否存活
49 0
|
6月前
|
网络协议 Shell Linux
系统初始化shell,包括:挂载镜像、搭建yum、设置主机名及IP地址和主机名映射、配置动态IP、关闭防火墙和selinux
系统初始化shell,包括:挂载镜像、搭建yum、设置主机名及IP地址和主机名映射、配置动态IP、关闭防火墙和selinux
92 2
|
11月前
|
存储 Shell Perl
使用shell脚本从ifconfig命令结果中提取IP地址
使用shell脚本从ifconfig命令结果中提取IP地址
157 0
|
运维 网络协议 Shell
shell脚本批量配置多台主机静态ip
shell脚本批量配置多台主机静态ip
108 0