shell习题-21

题目要求

写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务:

1)使用格式:getinterface.sh [-i interface | -I ip]

2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项时,显示其指定ip所属的网卡。

例:
sh getinterface.sh -i eth0 或者

sh getinterface.sh -I 192.168.0.1

3)当用户使用除[-i | -I]选项时,显示[-i interface | -I ip]此信息。

4)当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1时)

有点小复杂,需要在多看看视频,现在还没有完全搞明白

参考答案

#!/bin/bash
#将网卡名记录到文件ifs.txt中
ip add |awk -F ‘: ‘ ‘$1 ~ "^[1-9]" {print $2}‘ > /tmp/ifs.txt
#一个函数 输入网卡名字获取ip
get_ip()
{
    ip add show dev $1 |grep inet |awk ‘{print $2}‘ |awk -F ‘/‘ ‘{print $1}‘
}
#遍历网卡获取ip
for eth in `cat /tmp/ifs.txt`
do
    myip=`get_ip $eth`
    if [ -z "$myip" ]
    then
    echo $eth
    else
    echo $eth $myip
    fi
#将ip信息记录到if_ip.txt文件中
done > /tmp/if_ip.txt 

#参数少于两个的时候直接报错,告知用户使用方法
if [ $# -ne 2 ]
then
    echo "请输入正确的格式: bash $0 -i 网卡 或者 bash $0 -I ip"
    exit
fi

#第一个参数为-i时,获取响应网卡的ip
if [ $1 == "-i" ]
then
    #打印出所有网卡,过滤是否含有参数2的网卡
    if awk ‘{print $1}‘ /tmp/if_ip.txt |grep -qw $2
    then
    eth=$2
    ip1=`awk -v aeth=$eth ‘$1==aeth‘ /tmp/if_ip.txt|sed "s/$eth //"`
        echo "网卡$2的ip是 $ip1"
    else
    echo "你指定的网卡不对,系统中的网卡有:`cat /tmp/ifs.txt|xargs`"
    exit
    fi
#第一个参数是-I时,获取响应ip的网卡信息
elif [ $1 == "-I" ]
then
    #过滤是否含有参数输入的ip
    if grep -qw " $2 "  /tmp/if_ip.txt
    then
    eth=`grep -w " $2 " /tmp/if_ip.txt|awk ‘{print $1}‘`
        echo "IP $2对应的网卡是$eth"
    else
    echo "你指定的ip不对,系统中的IP有:`ip add |grep inet |awk ‘{print $2}‘|awk -F ‘/‘ ‘{print $1}‘|xargs`"
    exit
    fi
else
    echo "请输入正确的格式: bash $0 -i 网卡 或者 bash $0 -I ip"
fi

```#### 题目要求
写一个脚本产生随机3位的数字,并且可以根据用户的输入参数来判断输出几组。 比如,脚本名字为 number3.sh。

执行方法:

1)bash  number3.sh  会产生一组3位数字。

2)bash number3.sh 10 会产生10组3位数字。

#### 参考答案

#!/bin/bash
get_number()
{
for i in seq 0 2
do
a[$i]=$[$RANDOM%10]
done
echo ${a[@]}|sed s‘/ //g‘
}

if [ $# -eq 0 ]
then
get_number
elif [ $# -eq 1 ]
then
n=echo $1|sed ‘s/[0-9]//g‘
if [ -n "$n" ]
then
echo "给定的参数必须是一个数字"
exit
fi
for i in seq 1 $1
do
get_number
done |xargs
else
echo "格式不对,正确的是格式是sh $0 [n],这里的n是一个数字。"
fi

#### 题目要求
写一个shell,先判断是否安装httpd和mysql,没有安装进行安装,安装了检查是否启动服务,若没有启动则需要启动服务。

#### 参考答案

#!/bin/bash
if_install()
{
rpm -q $1 >/dev/null 2>/dev/null
if [ $? -eq 0 ]
then
echo "$1已经安装"
return 0
else
echo "$1没有安装"
return 1
fi
}

if_install httpd
if [ $? -eq 0 ]
then
if ! pgrep httpd >/dev/null
then
service httpd start
fi
else
yum install -y httpd
fi

if_install mysql-server
if [ $? -eq 0 ]
then
if ! pgrep mysqld >/dev/null
then
service mysqld start
fi
else
yum install -y mysql-server
fi

#### 题目要求
用shell脚本判断输入的日期是否合法。

比如20170110就是合法日期,20171332就不合法。

#### 参考答案

#!/bin/bash
if [ $# -ne 1 ] || [ ${#1} -ne 8 ]
then
echo "请输入正确的格式,sh $0 yyyymmdd"
exit 1
fi

y=echo ${1:0:4}
m=echo ${1:4:2}
d=echo ${1:6:2}

if echo $d|grep -q "^0"
then
d=echo ${1:6:2}|sed ‘s/^0//‘
fi

if cal $m $y >/dev/null 2>/dev/null
then
if ! cal $m $y|grep -qw "$d"
then
echo "你给的日期是不合法的"
else
echo "日期合法"
fi
else
echo "你给的日期不合法"
fi

#### 题目要求
写一个监控网卡的脚本,需要满足以下要求:

1. 每10分钟检测一次指定网卡的流量。

2. 如果流量为0,则重启网卡。

#### 参考答案

#!/bin/bash
LANG=en
sar -n DEV 1 10|grep -w "$1" > /tmp/sar.tmp
in=grep "Average:" /tmp/sar.tmp|awk ‘{print $5}‘|sed ‘s/\.//‘
out=grep "Average:" /tmp/sar.tmp|awk ‘{print $6}‘|sed ‘s/\.//‘

if [ $in == "000" ] && [ $out == "000" ]
then
ifdown $1
ifup $1
fi

原文地址:https://blog.51cto.com/865516915/2435685

时间: 2024-11-03 20:55:03

shell习题-21的相关文章

linux shell习题训练

shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M

shell习题-26

题目要求 写一个脚本,依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,如: Hello, root,your UID is 0. 参考答案 #!/bin/bash #这个脚本用来问候用户 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-11 cat /etc/passwd |while read line do username=`echo $line|awk -F ':' '{print $1}'` uid=`echo $line|awk

习题 2-1 位数 2-2 水仙花数 2-3 韩信点兵 2-4倒三角形 2-6 调和级数 2-7近似计算 2-8 子序列的和

2-1 位数 #include<stdio.h> #include<math.h> int main () { int n; for (n=100; n<=999; n++) { if(n == pow(n/100,3) + pow(n/10%10,3) + pow(n%10,3) ) printf("%d\n",n); } system("PAUSE"); return EXIT_SUCCESS; } 2-2 水仙花数 #includ

Shell 学习21 - Shell 函数

函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () { list of commands [ return value ] } 如果你愿意,也可以在函数名前加上关键字 function: function function_name () { list of commands [ return value ] } 函数

shell学习:几道常见shell习题

1. 编写shell脚本,计算1-100的和: 2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止: 3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下: 4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组: 5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列

shell习题-批量同步代码

需求背景是: 一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具.有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上.但是其他2台服务器也需要做相同变更. 写一个shell脚本,把A服务器上的变更代码同步到B和C上. 其中,你需要考虑到不需要同步的目录(假如有tmp.upload.logs.caches) #!/bin/bash echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B,C机器上&quo

shell习题-清理日志

要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件.在堡垒机批量发布,也要批量发布到crontab里面. A类机器日志存放路径很统一,B类机器日志存放路径需要用*匹配(因为这个目录里除了日志外,还有其他文件,不能删除.匹配的时候可用*.log) A类:/opt/cloud/log/   删除7天前的B类: /opt/cloud/instances/  删除15天前的 要求写在一个脚本里面.不用考虑堡垒机上的操作,只需要写出shell脚本. #!/bin/bash dir1=/

shell习题-判断函数

请使用条件函数if撰写一个shell函数 函数名为 f_judge,实现以下功能 1)当/home/log 目录存在时 将/home目录下所有tmp开头的文件或目录移/home/log 目录. 2)当/home/log目录不存在时,创建该目录,然后退出. #!/bin/bash f_judge (){     if [ -d /home/log ]     then          mv /home/tmp* /home/log/     else         mkdir -p /home

shell习题第10题:打印每个单词的字数

[题目要求] 用shell打印下面这句话中字母数小于6的单词. Bash also interprets a number of multi-character options. [核心要点] for循环遍历所有单词 wc -L获取字符串长度 [脚本] #!/bin/bash c="Bash also interprets a number of multi-character options." n=`echo $c|awk -F '[ +-.]' '{print NF}'` for