Linxu Shell DAY18

31.获取网卡ip显示颜色

32.列出目录内容

33.下载文件

34.猜数字

35.根据名字得数字


获取网卡ip显示颜色

题目要求

提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题:  

  1. 输入的字符不符合网卡名字规范,怎么应对。

  2. 名字符合规范,但是根本就没有这个网卡又怎么应对。

  3. 获取网卡ip显示颜色

核心要点

ip add show dev eth0

代码

#!/bin/bash

ip add |awk -F ': ' '$1 ~ "^\[1-9\]" {print $2}' > /tmp/eth.list

while :

do

    eths=\`cat /tmp/eth.list |xargs\`                                                               #变成一行,空格分割

    read -p "Please input a if name(The eths is \`echo -e "\\033\[31m$eths\\033\[0m"\`): " eth          #显示网卡名颜色

    if \[ -z "$eth" \]

    then

        echo "Please input a if name."

        continue

    fi

    if ! grep -qw "$eth" /tmp/eth.list                                                           #不再网卡列表中

    then

        echo "The if name is error."

        continue

    else

        break

    fi

done

if_ip()

{

    ip add show dev $1 |grep ' inet ' |awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt    #   ' inet '精准匹配  

    n=\`wc -l /tmp/$1.txt|awk '{print $1}'\`

    if \[ $n -eq 0 \]

    then

        echo "There is no ip address on the eth."

    else

        echo "The ip addreess is:"

        for ip in \`cat /tmp/$1.txt\`

        do

            echo -e "\\033\[33m$ip\\033\[0m"                                    #ip地址颜色

        done

    fi

}

if_ip $eth

32.列出目录内容

题目要求

写一个脚本,实现如下功能:  

  1. 脚本可以带参数也可以不带

  2. 参数可以有多个,每个参数必须是一个目录

  3. 脚本检查参数个数,若等于0,则列出当前目录本身,否则显示每个参数包含的子目录。

核心要点

$#参数个数

test -d filename

find $d -type d

代码

#!/bin/bash

if \[ $# -eq 0 \]                                         # $# 参数个数

then

    echo "当前目录下的文件是:"

    ls .

else

    for d in $@                                         # $@ 是指一堆参数 xxx.sh 1 2 3 4 5 

    do

        if \[ -d $d \]

        then

            echo "目录$d下有这些子目录:"

            find $d -type d

        else

            echo "并没有该目录:$d"

        fi

    done

fi

33.下载文件

题目要求

定义一个shell函数,能接受两个参数,满足以下要求:  

  1. 第一个参数为URL,即可下载的文件,第二个参数为目录,即下载后保存的位置

  2. 如果用户给的目录不存在,则提示用户是否创建,如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本

  3. 如果给的目录存在,则下载文件,下载命令执行结束后测试文件下载成功与否,如果成功,则返回0给调用脚本,否则,返回52给调用脚本

核心要点

$#参数个数是否为2

$2是否为目录

代码

#!/bin/bash

if \[ $# -ne 2 \]

then

   echo "你必须要输入两个参数,第一个参数是网址,第二个参数是目录."

   exit 1

fi

if \[ ! -d $2 \]

then

    while :

    do

    echo "你输入的第二个参数,并不是一个存在的目录。是否要创建该目录呢?(y|n): "c

    case $c in

        y|Y)

            mkdir -p $2

            ;;

        n|N)

            exit 51

            ;;

        *)

            echo "请输入y或者n."

            continue

            ;;

    esac

    done

else

    cd $2

    wget $1

    if \[ $? -eq 0 \]

    then

        exit 0

    else

        echo "下载失败."

        exit 52

    fi

fi

34.猜数字

题目要求

写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比预设数字大或者小。

核心要点

$RANDOM可以生成一个随机数

随机数除以101取余则得到0-100的随机数字

代码

#!/bin/bash

n=$\[$RANDOM%101\]

while :do

    read -p "请输入一个0-100的数字:" n1

    if \[ -z "$n1" \]

    then

        echo "必须要输入一个数字。"

        continue

    fi

    n2=\`echo $n1 |sed 's/\[0-9\]//g'\`

    if \[ -n "$n2" \]

    then

        echo "你输入的数字并不是正整数."

        continue

    else

        if \[ $n -gt $n1 \]

        then

            echo "你输入的数字小了,请重试。"

            continue

        elif \[ $n -lt $n1 \]

        then

            echo "你输入的数字大了,请重试。"

            continue

        else

            echo "恭喜你,猜对了!"

            break

        fi

    fi

done

35.根据名字得数字

题目要求

写一个shell脚本,能实现如下需求:  

  1. 执行脚本后,提示输入名字(英文的,可以是大小写字母、数字不能有其他特殊符号),然后输出一个随机的0-99之间的数字,脚本并不会退出,继续提示让输入名字

  2. 如果输入相同的名字,输出的数字还是第一次输入该名字时输出的结果

  3. 前面已经输出过的数字,下次不能再出现

  4. 当输入q或者Q时,脚本会退出。

核心要点

判断名字合法性[a-zA-Z0-9]

$RANDOM除以100取余得到0-99之间的随机数

代码

#!/bin/bash

f=/tmp/user_number.txt

j_n()

{

    while :

    do

        n=$\[RANDOM%100\]

        if awk '{print $2}' $f|grep -qw $n

        then

            continue

        else

            break

        fi

    done

}

while :do

    read -p "Please input a username: " u

    if \[ -z "$u" \]

    then

        echo "请输入用户名."

        continue

    fi

    if \[ $u == "q" \] || \[ $u == "Q" \]

    then

        exit

    fi

    u1=\`echo $u|sed 's/\[a-zA-Z0-9\]//g'\`

    if \[ -n "$u1" \]

    then

        echo "你输入的用户名不符合规范,正确的用户名应该是大小写字母和数字的组合"

        continue

    else

        if \[ -f $f \]

        then

            u_n=\`awk -v uu=$u '$1==uu {print $2}' $f\`

            if \[ -n "$u_n" \]

            then

                echo "用户$u对应的数字是:$u_n"

            else

                j_n

                echo "用户$u对应的数字是:$n"

                echo "$u $n" >>$f

            fi

        else

            j_n

            echo "用户$u对应的数字是:$n"

            echo $u $n >> $f

        fi

    fi

done

转载于:https://my.oschina.net/u/3959701/blog/3102491

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值