Linux基本功杂记——[007]——8月10日课后作业

/*答案不止一个,仅列出自认为最优雅的存在*/

作业要求:编写BASH脚本实现题目要求的内容。

一、显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小

1 #!/usr/bin/bash
2 printf 3 " Hostname: $(hostname)\n \
4 IPv4: $(ip addr | grep -oP ‘(\d+\.){3}\d+/\d+‘ | awk ‘BEGIN{ORS=" "}{print}‘)\n 5 OS_version: $(cat /etc/gentoo-release)\n 6 Kernel_version: $(uname -r)\n 7 Cpu: $(uname -p)\n 8 TotalMem(kiB): $(cat /proc/meminfo | grep -oP  ‘(?<=MemTotal:)\s*\d+‘ | sed ‘s/ \+//g‘)\n 9 TotalDisksize(kiB): $(cat /sys/block/sd*/size | gawk ‘BEGIN{printf "(";ORS=" + "}{print}END{printf "0) / 2\n"}‘ | bc)\n"
[email protected] ~/bash_script $ bash systeminfo.sh
 Hostname: z
 IPv4: 127.0.0.1/8 172.18.16.4/24
 OS_version: Funtoo Linux - baselayout 2.2.1
 Kernel_version: 4.4.16
 Cpu: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
 TotalMem(kiB): 16437364
 TotalDisksize(kiB): 1211193648

二、计算/etc/passwd文件中的第10个用户和第20用户的ID之和

#!/bin/bash
sed -n ‘10p;20p‘ /etc/passwd | gawk -F: ‘BEGIN{ORS=" + ";printf "("}{print $3}END{printf "0)" "\n"}‘ | bc
[email protected] ~/bash_script $ bash sumid.sh
1010

三、传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

[email protected] ~/bash_script $ cat sum_blanklines.sh
#!/bin/bash
read -p "请输入一个文件路径: " file1
read -p "请再输入一个文件路径: " file2
printf "这两个文件中的空白行数合计: $(grep -P ‘^\s*$‘ $file1 $file2 | wc -l)\n"
[email protected] ~/bash_script $ bash sum_blanklines.sh
请输入一个文件路径: passwd
请再输入一个文件路径: passwd1
这两个文件中的空白行数合计: 6

四、统计/etc, /var, /usr目录中共有多少个一级子目录和文件

#!/bin/bash
find /etc /var /usr -maxdepth 1 | wc -l

五、接受一个文件路径作为参数;若参数个数小于1,则提示“不能为空”,并再次提示输入;若参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

[email protected] ~/bash_script $ cat args_num.sh
#!/bin/bash
path() {
    printf "请输入一个文件路径: "
}
path
read Path
until [[ $Path != "" ]]
do
    printf "不能为空!\n"
    path
    read Path
done
    grep -P ‘^\s*$‘ $Path | wc -l

六、接受一个主机的IPv4地址做为参数,测试是否可连通,若能ping通,则提示用户“该IP可访问”;若不通,则提示用户“ 该IP不可访问”

#!/bin/bash
read -p "请输入一个IPv4地址: " IPv4
ping -w 1 -c 1 $IPv4 > /dev/null
if [[ $? == "0" ]]
then
    printf "该IP可访问\n"
else
    printf "该IP不可访问\n"
fi

七、判断硬盘的每个分区空间和inode的利用率是否大于80%,如果是,发邮件通知root磁盘将满

#!/bin/bash
InodeUsed=$(df -i | gawk ‘{if ($5 ~ /[8-9][0-9]%/) print $1 " " $5}‘)
SpaceUsed=$(df | gawk ‘{if ($5 ~ /[8-9][0-9]%/) print $1 " " $5}‘)
if [[ $InodeUsed != "" || $SpaceUsed != "" ]]
then
    printf "如下分区空间使用率已超过80%:\n${SpaceUsed}\n如下分区Inode使用率已超过80%:\n${InodeUsed}\n" | mail -s Disk_Space_Warning root
fi

八、计算1到100之间整数的和

#!/bin/bash
echo {1..100} | tr ‘ ‘ ‘+‘ | bc

九、判断输入的IP是否为合法IP(粗略判断,重点在于脚本中正则的应用)

#!/bin/bash
if [[ $1 =~ ([0-9]+\.){3}[0-9]+ ]]
then
    printf "IP合法\n"
else
    printf "IP不合法\n"
fi

十、输入起始值A和最后值B,计算从A+(A+1)...+(B-1)+B的总和

[email protected] ~/bash_script $ cat sum100diy.sh
#!/bin/bash
read -p "请输入两个正整数: " goal1 goal2
sum=0
if [[ goal1 -gt goal2 ]]
then
    g1=goal1
    g2=goal2
else
    g1=goal2
    g2=goal1
fi

until [[ $g1 -le $g2 ]]
do
    sum=$(($sum + $g1))
    g1=$(($g1 - 1))
done
sum=$(($sum + $g2))
printf "$sum\n"
时间: 2024-12-25 12:18:46

Linux基本功杂记——[007]——8月10日课后作业的相关文章

Linux基本功杂记——[002]——7月29日课后作业

1.file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和 方法一:[[email protected]7 fh]# echo $(tr ' ' '+' <file1) | bc 55 方法二:[[email protected]7 fh]# x=$(($(tr ' ' '+' <file1))) && echo $x 55 方法三:[[email protected]7 fh]# x=$(tr ' ' '+' <file1) | py

Linux基本功杂记——[004]——8月4日课后作业

一.找出ip addr命令结果中本机所有的IPv4地址 BASH: [email protected] ~/py $ ip addr | grep -oP '(?:\d+\.){3}\d+/\d+' 127.0.0.1/8 172.18.16.4/24 Python3: [email protected] ~/py $ cat ipaddr.py #!/usr/bin/python3 #-*- coding='utf-8' -*- import re import subprocess ipb

Linux基本功杂记——[008]——08月16日课堂练习{BASH脚本}

一.构显99乘法表 #!/usr/bin/env bash test() { for((i=1;i<10;i++)) do for((x=1;x<=$i;x++)) do echo -n "$x x $i = $(($i * $x)) " done echo -e "\n" done } test | gawk 'BEGIN{RS=""}{print}' [email protected] ~/bash_script/2016-08-

3月10日课后作业

整体感觉这个程序可以划分为很多的小模块,多个模块的堆积对应一个用户的要求是否有分数部分可以采用生成两个随机数并控制其范围,将其中一个作为分子,另一个作为分母:题目数量可以在测试函数中通过变量输入 打印方式导出到文本或者直接在命令行中输出关于是否有乘除法,是否包含括号,数值范围,加减有无负数....可以将几个功能划分为相应的模块,在用户输入对应的要求的时候调用相关功能模块,避免了代码的重复编写打印格式个人感觉用户自己定义的话不太容易单纯用C++简单的代码实现,考虑可以使用几个样式模板提供给用户,让

9月10日课程作业(练习)

linux运维实战练习-2015年9月10日课程作业(练习)安排 一.作业(练习)内容: 1.总结rpm和yum实现程序包的管理功能. (1)相关概念 内核功能:进程管理.内存管理.提供网络协议栈.驱动程序.... 应用程序功能:提供各种各样特定功能,如bash等 程序包的组成部分: 二进制程序:程序包的核心,存储在/bin, /sbin,/ /usr/bin, /usr/sbin等路径下 库文件:共享资源,存储在/lib64, /usr/lib64等路径下 配置文件:定义工作属性,存储在/et

linux运维实战练习-2015年9月10日课程作业(练习)安排

一.作业(练习)内容: 1.总结rpm和yum实现程序包的管理功能. 要求:作业要图文并茂 二.完成时间: 2015年9月15日之前. 三.提交方式: 请将作业的博文链接地址以评论本博客的形式提交.格式如: 学员编号+姓名   http://mageedu.blog.51cto.com/4265610/1687589

2015年9月10日课程作业【程序包管理:rpm, yum】_JY1506402-19+liuhui880818

<Linux系统管理> (1)磁盘和文件系统管理: (2)RAID, LVM; btrfs; (3)程序包管理:rpm, yum(dnf) (4)Linux的网络管理; (5)进程和作业管理:htop, glances, tsar: (6)sed和awk: (7)Linux系统的开机启动流程: (8)内核基础知识,内核定制编译: (9)系统安装:kickstart, pxe 一.作业(练习)内容: 1.总结rpm和yum实现程序包的管理功能. 要求:作业要图文并茂 二.完成时间: 2015年9

linux运维实战练习-2015年9月10日课程作业

总结rpm和yum实现程序包的管理功能 rpm实现程序包的管理功能 安装: 命令格式:rpm {-i|--install} [install-options] PACKAGE_FILE ... 选项: -i: -v:显示详细过程,-vv, -vvv -h: 每个rpm包都提供一个或多个capabilities --nodeps:忽略依赖关系安装 --replacepkgs:重装程序包 例子:

马哥linux+python&mdash;&mdash;2015年9月13日课程作业

一.作业(练习)内容: 1.描述shell程序的运行原理(可附带必要的图形说明): 什么是shell       shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用.用户在提示符下输入的命令都由shell先解释然后传