shell基础练习题

Posted sstjustdoit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell基础练习题相关的知识,希望对你有一定的参考价值。

shell 基础练习题

1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小

#!/bin/bash
echo -e "e[1;35mThis computer is hosted by: e[0m"
hostname
echo "    "
echo -e  "e[1;35mMy ip addr is:e[0m"
ifconfig  | sed -n '2p'|sed -r  '[email protected]*inet (.*) net.*@[email protected]'
echo "     "
#
echo -e  "e[1;35mMy OS version is:e[0m"
cat /etc/centos-release

echo "  "


echo -e "e[1;35mMy CPU is: e[0m"
lscpu

echo "   "

echo -e "e[1;35mMy memory is: e[0m"
free -m
echo " "

echo -e "e[1;35mMy disk is: e[0m"
lsblk | sed -n  '2p'

2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中

#!/bin/bash
echo -e "e[1;35mbackup ing.... e[0m"
sleep 3
cp -av  /etc/  /data/etc`date +%F`
echo -e  "e[1;35mbackup is done e[0m"

3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

#!/bin/bash
echo -e "e[1;35mThe biggst ratio of your disk's space is e[0m"
df | grep "/dev/sd"  | tr -s " " %   | cut -d% -f5 | sort -nr |   head -n1

4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序



5、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和


#!/bin/bash
[ $# -ne 2 ] && echo "Args num must be 2" && exit
[[ ! "$1" =~ ^[0-9]+$ ]] && echo "$1 is not digital" && exit
[[ ! "$2" =~ ^[0-9]+$ ]] && echo "$2 is not digital" && exit
UID1="`head -n$1 /etc/passwd | cut -d: -f3 |tail -n1`"
UID2="`head -n$2 /etc/passwd | cut -d: -f3 |tail -n1`"
sumid=$[$UID1+$UID2]
echo $sumid

6、编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

#!/bin/bash
echo -e "e[1;35mThe files's blankline is : e[0m"
grep ^$ $1 $2 | wc -l

7、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

#!/bin/bash
echo -e "e[1;35mThe number of /etc /var /usr is : e[0m"
a="`find /etc -maxdepth 1 |wc -l`"
b="`find /usr -maxdepth 1 |wc -l`"
c="`find /var -maxdepth 1 |wc -l`"
sum=$[a+b+c]
echo $sum


8、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

#!/bin/bash
[ $# -lt 1 ] && echo -e "e[1;33m至少应该有一个参数 e[0m"  && exit
[ $# -ge 1 ] && grep ^$ $1 $2 $3 |wc -l

9、编写脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

10、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

#!/bin/bash
a="`df | grep "/dev/sd.*" | tr -s " " % |cut -d% -f5 | sort -nr | head -n1`"
b="`df -i | grep "/dev/sd.*" | tr -s " " % |cut -d% -f5 | sort -nr | head -n1`"
[ $a -ge 80 ] && echo -e "e[1;35mYour disk space is warmming!! e[0m"
[ $b -ge 80 ] && echo -e "e[1;35mYour inode numbers is warmming!! e[0m"


11、编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写

#!/bin/bash
[ -r $1 -a -w $1 ] ||  echo -e "e[1;35m您对此文件无读写权限 e[0m"

12、编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件

#!/bin/bash
[[ $1 =~  .sh$   ]] && [[ -f $1 ]] || { echo -e "e[1;35m该文件非脚本文件 e[0m" ; exit;  }
chmod +x $1
echo -e "e[1;35m该文件已添加X权限 e[0m"

13、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
nologin.sh

#!/bin/bash
echo -e "e[1;35mYOU WILL OPEN NOLOGIN,PLEASE WAIT e[0m"
[ -a /etc/nologin ] && exit  || touch /etc/nologin
echo -e "e[1;35mdone!!!e[0m"

login.sh

#!/bin/bash
[ -e /etc/nologin ] && `rm -f /etc/nologin` || echo -e "e[1;35mnow,you can login e[0m"


14、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin
在 /etc/profile.d/env. sh 文件,重新添加PATH变量。

PS1="[e[1;36m][[email protected]h W]\$[e[0m]"
PATH=/usr/local/apache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

15、用户root登录时,将命令指示符变成红色,并自动启用如下别名:
rm=‘rm –i’
cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’ (如果系统是CentOS7)
命令符红色:

在/etc/profile.d/env.sh中定义
PS1="[e[1;31m22][[email protected]h W]\$[e[0m]"

定义别名:

在 ~/.bashrc中将放入以下命令:
alias rm=‘rm –i’
alias cdnet=‘cd /etc/sysconfig/network-scripts/’
alias editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
alias editnet=‘vim  /etc/sysconfig/network-scripts/ifcfg-eno16777736 或  ifcfg-ens33 ’ 

3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous !”
在/etc/profile.d/env.sh 中添加
echo -e "e[1;31mHi,dangerous ! e[0m"

16、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等

17、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等
```bash
vim /root/reset.sh

以上是关于shell基础练习题的主要内容,如果未能解决你的问题,请参考以下文章

linux学习--基础shell练习

shell脚本基础小习题

Linux练习题-shell脚本编程基础篇(施工中)

基础脚本编程练习题

201555332盛照宗—网络对抗实验1—逆向与bof基础

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础