SHELL脚本编程练习

1、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核 版本,CPU型号,内存大小,硬盘大小
#!/bin/bash
echo -e "\e[31mHostname: `hostname`\e[0m"
echo -e "\e[32mIP: `hostname -I`\e[0m" 
echo -e "\e[33mOS Version: `cat /etc/os-release |grep "PRETTY"|cut -d‘=‘ -f2`\e[0m"
echo -e "\e[34mKernel Version: `uname -r`\e[0m"
echo -e "\e[35mCPU:`lscpu | grep "Model name"|tr -s ‘ ‘|cut -d: -f2`\e[0m"
echo -e "\e[36mMemory Size:`lsmem | grep ‘online memory‘|tr -s ‘ ‘|cut -d: -f2`\e[0m"
echo -e "\e[37mDisk Size:`fdisk -l|head -1|cut -d‘,‘ -f1|cut -d: -f2`\e[0m"

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

#!/bin/bash
DIR1="/etc"
DIR2="/backup/etc`date +%F`"
echo -e "\e[31mStarting backup...\e[0m"
if [ -e `dirname $DIR2` ];then
  sleep 3
  cp -av $DIR1 $DIR2
else
  mkdir `dirname $DIR2`
  sleep 3
  cp -av $DIR1 $DIR2
fi  
echo -e "\e[31mBackup Finished...\e[0m"

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

#!/bin/bash
echo -e "\e[34mDisk of max percentage is `df -h|tr -s ‘ ‘ :|grep ‘/dev/sd‘|cut -d: -f5|sort -nr|head -1`.\e[0m"

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

#!/bin/bash
echo -e "\e[35mConnections:\e[0m`netstat -tan|grep "ESTABLISHED"|tr -s ‘ ‘ :|cut -d: -f6|sort -nr|uniq -c`"

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

#!/bin/bash
read -p "请至少输入一个文件路径(作为参数):" ARG
if [ $# -lt 0 ];then
  echo "至少应该给一个参数"
  exit
else
  grep ‘^$‘ $ARG |wc -l
fi

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

#!/bin/bash
read -p "请输入一个主机的IPv4地址:" IPADDR
ping -c 1 -W 1 $IPADDR &> /dev/null
if [ $? -eq 0 ];then
  echo -e "\e[31m此IP地址可访问\e[0m"
else
  echo -e "\e[31m此IP地址不可访问\e[0m"
fi

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

#!/bin/bash
WARNING=80
SPACE_USED=`df -h|tr -s ‘ ‘ %|cut -d% -f5|sort -nr|head -1`
INODE_USED=`df -hi |tr -s ‘ ‘ %|cut -d% -f5| sort -nr|head -1`
if [ $SPACE_USED -gt $WARNING ] && [ $INODE_USED -gt $WARNING ];then
  mail -s DiskWarning root
else
  echo "空间还很充裕"
fi

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

#!/bin/bash
read -p "请输入一个文件名:" FILENAME
[ ! -r $FILENAME -a -w $FILENAME ] 
if [ $? -eq 0 ];then
  echo -e "\e[31m此用户对该文件不可读并且不可写\e[0m" 
else
  echo -e "\e[34m此用户对该文件可读或者可写\e[0m"
fi

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

#!/bin/bash
read -p "请输入一个文件:" FILENAME
[[ "$FILENAME" =~ \.sh$ ]] && chmod +x $FILENAME || echo -e "\e[35m此文件为非脚本文件\e[0m"

10、编写脚本 nologin.sh和 login.sh,实现禁止和允许普通用户登录系统

#!/bin/bash
FILE=/data/nologin
[ ! -f FILE ] && touch /data/nologin && { echo "已禁止普通用户登陆系统"; exit ; } || { echo "已禁止普通用户"; exit ; }

#!/bin/bash
FILE=/data/nologin
[ -f FILE ] && rm -rf /data/nologin && { echo "已禁止普通用户登陆系统"; exit ; } || { echo "已禁止普通用户"; exit ; }

相关推荐