3.Shell字符串对比

Shell字符串对比

1.字符串比对,字符串必须使用双引号

[ "name" = "name" ] 
[ "name" != "name" ] 
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0
  1. -z字符串为空,输出正确 -n字符串为非空,输出正确
    [root@web ~]# name=""
    [root@web ~]# [ -z $name ]
    [root@web ~]# echo $?
    0
    [root@web ~]# [ ! -z $name ]
    [root@web ~]# echo $?
    1
    [root@web ~]# name="alex"
    [root@web ~]# [ -z $name ]
    [root@web ~]# echo $?
    1
    [root@web ~]# [ -n $name ]
    [root@web ~]# echo $?
    0
  1. -z 案例:
    read -p "请输入名字" name1 
    [ -z $name1 ] && echo "请输入姓名否则不继续执行" && exit
    read -p "请输入年龄" age1
    echo $name1 $age1

Shell正则比对

  1. [[ ]]
    [[]]
    [root@web01 scripts]# [ "$USER" = "root" ]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# [[ "$USER" =~ ^r ]]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# [[ "$USER" =~ t$ ]]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
    [root@web01 scripts]# echo $?
    1

2.判断传参的参数是否为整数

    方法一:
    [root@web01 scripts]# age=188
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# age=188q
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
    1
    [root@web01 scripts]# age=18.8
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
    [root@web01 scripts]# echo $?
    1
    方法二:
    expr $1 + 0 >/dev/null 2>&1
    [ $? -ne 0 ] && exit

多整数比对

  1. -a and
    -o or

    [ 10 -eq 10 -a 100 -ne 100 ]
    [root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
    [root@web01 scripts]# echo $?
    1
    [root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
    [root@web01 scripts]# echo $?
    0
    
    [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
    [root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]]
    -bash: 条件表达式中有语法错误
    -bash: `-a' 附近有语法错误
    [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
    [root@web01 scripts]# echo $?
    1
    [root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
    [root@web01 scripts]# echo $?
    0
    

    2.案例:传入两个数字 比对两个数字的大小

例如:sh count.sh 10 10 要求判读是否传入两个参数 要求数字加判读是否为整数(禁止if)

​ 10=10

    #!/bin/sh
    [ $# -ne 2 ] && echo "please input two number" && exit
    [[ ! $1 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 50
    [[ ! $2 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 100
    [ $1 -eq $2 ] && echo "$1=$2"
    [ $1 -gt $2 ] && echo "$1>$2"
    [ $1 -lt $2 ] && echo "$1<$2"

3.案例:批量创建用户 批量创建10个用户 oldboy1 oldboy2 oldboy3...oldboy10

要求密码统一设置为123456

1.输入用户的前缀oldboy,判断如果为空 则退出

2.输入需要创建用户的个数 10,判断是否为整数

        #!/bin/sh
        #read -p "please input prefix: " name
        #read -p "创建的个数: " num
        for i in {1..10}
        do
            echo oldboy$i
        done

        [root@web01 scripts]# cat useradd.sh 
        #!/bin/sh
        read -p "please input prefix: " name
        read -p "创建的个数: " num
        for i in `seq $num`
        do
            useradd $name$i >/dev/null 2>&1
            echo 123456|passwd --stdin $name$i &>/dev/null
            [ $? -eq 0 ] && echo "$name$i create is ok"
        done

4.案例:判断当前10.0.0.0/24网络中 有哪些IP地址在线 ping通则在线

        #!/bin/sh
        [ -f /etc/init.d/functions ] && . /etc/init.d/functions
        for i in `seq 254`
        do
            { IP=10.0.0.$i
            ping -c 1 -W 1 $IP >/dev/null 2>&1
            [ $? -eq 0 ] && action "ping $IP is" /bin/true
            } &
        done

网络知识

        ip addr add 10.0.0.3/24 dev eth0  临时生效 重启失效
        面试题 配置一条默认网关
        route add default gw 10.0.0.254
        删除网关
        route add default gw 10.0.0.254
        其他方法 静态路由方式
        ip route add 0/0 via 10.0.0.254
        策略路由
        服务器使用vpn常用 网关被替换成vpn
        pptpstup 拨号命令
        查看网关
        route -n
        开机启动配置文件(/etc/rc.local) +x 权限 rc.d/rc.local  (禁止使用alias和变量)

if判断

1.单分支

    if [你有房];then       [ -f file ] && echo ok
    
    if [你有房]
    then
        我就嫁给你
    fi

    双分支
    if [ 你有房 ]          [ -f file ] && echo ok || echo error
    then
        我就嫁给你
    else
        拜拜
    fi

2.多分支

    if [ 你有房 ]
    then
        我就嫁给你
    elif [ 你有钱 ]
    then
        我也嫁给你
    elif [ 你爸是李刚 ]
    then
        我也嫁给你
    elif [ 活好!运维技术好 ]
    then
        我倒贴也嫁给你
    elif [ 你在老男孩学运维 ]
    then
        我考虑考虑
    else
        拜拜
    fi

3.案例:输入两个数字 是否为整数 使用if方式

    #!/bin/bash
    read -p "请输入第一个数字:" num1
    read -p "请输入第二个数字:" num2
    if [ -z $num1 ]
    then
       echo "您输入的第一个数字为空"&& exit
    elif [ -z $num2 ]
    then
       echo "您输入的第二个数字为空"&& exit
    elif [[  "$num1" =~ ^[0-9]+$ && "$num2" =~ ^[0-9]+$ ]]
    then
     
    if [ $num1 -lt $num2 ]
    then
       echo "$num1<$num2"
    elif [ $num1 -gt $num2 ]
    then
       echo "$num1>$num2"
    else
       echo "$num1=$num2"
    fi

    else
        echo "您输入了错误的值!"&& exit
    fi 

4.案例:根据操作系统不同的版本安装不同的源

1.如何取出版本号

2.如何做版本号的比对

3.比对完成执行相对应的安装源

#!/bin/sh
ve=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
#centos6.x使用以上命令获取不到版本号
if [ ${ve%%.*} -eq 7 ]
then
    #判断网络是否通畅ping 如果不通 则重启systemctl restart network 通继续执行
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    #测试wget是否已安装 无安装先安装wget
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
elif [ ${ve%%.*} -eq 6 ]
then
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
fi

5.案例:猜数字

生成一个随机数 1-100之间

RANDOM 随机数的范围 0-32767

取余

echo $((RANDOM%100+1))

用户输入一个数字

判断用户输入的数字如果相等则退出提示猜对了 大了 提示比随机数大 小了 提示 比随机数小

    #!/bin/sh
    ran=`echo $((RANDOM%100+1))`
    while true
    do
        let i++
    read -p "请输入一个数字[1-100]: " num
    if [ $num -gt $ran ];then
        echo "你输入的数字大了"
    elif [ $num -lt $ran ];then
        echo "你输入的数字小了"
    else
        echo "恭喜你猜对了 总共猜了 $i 次"
        exit
    fi
    done
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342