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,实现禁止和充许普通用户登录系统 #!/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 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登录时,将命令指示符变成红色,并自动启用如下别名: 在/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 !” 16、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等 17、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等 ```bash vim /root/reset.sh (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |