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、测试

4、脚本内容如下

#====================================================# Author: lizhenliang - EMail:[email protected]# Last modified: 2015-02-1# Filename: input_hostinfo.sh# Description: # blog:lizhenliang.blog.51cto.com#====================================================User_File=/etc/ansible/hostsCheck_IP(){while truedo    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."    fidone}########################################################Check_User(){while truedo    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;      #当满足输入条件时,跳出所有循环    fidone}########################################################Password(){    read -p "Please input pass: " Password}########################################################Check_IP;Check_User;Password;echo "$ip   ansible_ssh_user=${username}    ansible_ssh_user=${Password}" >> $User_File#如果上面输入都满足条件,将输入的信息追加到用户信息文件中,并打印追加内容echo "------------------------"tail -n 1 $User_File
时间: 2024-08-27 13:06:20

Shell判断输入是否有效IP和字母的相关文章

shell 判断语句--实例解读

1 if 语句 if语句的格式: if 条件 then 命令 fi if 条件 then 命令 else 命令 fi if 条件 then 命令 elif 条件 then 命令 else 命令 fi 示例: 判断当前用户是否为root,如果是,则执行/home/test 目录压缩 #!/bin/bash if [ "$(id -u)" -eq "0" ];then tar czf /home/test.tar.gz /home/test fi 要求用户输入密码,并判

python学习——如何判断输入是数字

笨办法学python第35节 该节主要是讲分支与函数,主要遇到的问题是python中如何判断输入是数字. 首先原代码如下: from sys import exit def gold_room(): print "This room is full of gold. How much do you take?" next = raw_input("> ") if "0" in next or "1" in next: h

shell脚本--判断输入的ip是否正确

#!/bin/bash #It's written by caibingsen #!/bin/bash #It's written by caibingsen #date:2016-03-15 #while设置成死循环,在输入的ip不符合条件时,重新输入 while : do read -p "请输入要判断的ip地址:" ip #判断输入的ip地址是否仅由数字和点组成,并将值赋给m. #判断输入的ip地址的小数点的个数,复制给n m=`echo $ip |sed 's/[0-9.]//

shell脚本函数判断输入的IP地址是否符合规则

#判断IP是否符合标准规则 function judge_ip(){         #这里local $1出错,用2>/dev/null屏蔽掉错误,暂未发现影响输出结果         local $1 2>/dev/null         TMP_TXT=/tmp/iptmp.txt         echo $1 > ${TMP_TXT}         IPADDR=`grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' ${TMP_TXT}`     

判断输入的IP是否正确

编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255, 0<n3<255, 0<n4<255). #!/bin/bash check_ip(){ if echo $1 | egrep -q "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$";then a=`echo $1|awk -F. '{print $1}'` b=

Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数,需要的朋友可以参考下 $#代表了命令行的参数数量,可以看以下实例: 复制代码 代码如下: if [ $# != 1 ] ; then echo "USAGE: $0 TABNAME" echo " e.g.: $0 CDR_CALL_20040701" exit 1; f

华为OJ测试题——判断输入的字符串是不是一个有效的IP地址(附世上最全测试数据)

题目标题: 判断输入的字符串是不是一个有效的IP地址 详细描述: 请实现如下接口 boolisIPAddressValid(constchar* pszIPAddr) 输入:pszIPAddr 字符串 输出:true 有效的IP地址,false,无效的IP地址 约束 输入IP为XXX.XXX.XXX.XXX格式 字符串两端含有空格认为是合法IP 字符串中间含有空格认为是不合法IP 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP 子段为单个0 认为是合法IP,0.0.

用js正则判断输入的两位字符,第一位是数字16进制的,第二位是I、O、Q、U除外的字母(A到Z)

项目中遇到客户的需求变化,要验证某个数据的正确性,判断输入的两位字符,第一位是数字16进制的,第二位是I.O.Q.U除外的字母(A到Z). 本来对js不熟练,网上参考了一下js正则验证的规则,使用正则表达式完成了这个验证. 1 function check() { 2 var str = document.getElementById("txtEnglishName").value; 3 var reg=/^[0-9a-fA-F][^IOQU]$/; 4 if (str.length!

js判断输入字符串长度(汉字算两个字符,字母数字算一个):例如 要求输入12的字,24个字节

<html> <head> <title>js判断输入字符串长度(汉字算两个字符,字母数字算一个)</title> <style type="text/css"> .pbt { margin-bottom: 10px; } .ie6 .pbt .ftid a, .ie7 .pbt .ftid a { margin-top: 1px; } .cl:after { clear: both; content: ".&quo