0
点赞
收藏
分享

微信扫一扫

Rocky基础练习题-shell脚本-1

0、编写一个变量文件/etc/profile.d/color.sh 定义以下颜色变量:RED BULE GREEN YELLOW END

[root@rocky8 ~]# cat /etc/profile.d/color.sh 
#!/bin/bash

RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
PURPLE='\033[1;35m'
CYAN='\033[1;36m'
WHITE='\033[1;37m'
RAN="\033[1;$[RANDOM%6+31]m"
END='\033[0m'

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

#!/bin/bash
. /etc/profile.d/color.sh
echo -e "${CYAN}Hostname:${END}${RAN}$(hostname)${END}"
echo -e "${CYAN}IP: ${END}${RAN}$(hostname -I)${END}"
echo -e "${CYAN}Release: ${END}${RAN}$(cat /etc/os-release |head -n 2 |cut -d '"' -f2|xargs)${END}"
echo -e "${CYAN}Kernel: ${END}${RAN}$(uname -r)${END}"
echo -e "${CYAN}CPU: ${END}${RAN}$(lscpu|sed -rn 's/^Model name:[[:space:]]+([^[:space:]]+)/\1/p')${END}"
echo -e "${CYAN}Mem: ${END}${RAN}$(lsmem | sed -rn 's/^Total online.*([0-9]+.*)/\1/p')${END}"
echo -e "${CYAN}Disk: ${END}${RAN}$(lsblk |sed -rn 's/^sda.* ([0-9]+G).*/\1/p')${END}"

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

#!/bin/bash
. /etc/profile.d/color.sh
DIR="/backup/etc`date +%F`"
[ -e $DIR ] || mkdir -p $DIR
cp -av /etc/ $DIR && echo -e "${GREEN}备份成功${END}" || echo -e "${RED}备份失败${END}"

[root@rocky8 scripts]# crontab -l
0 0 * * * /root/scripts/backup.sh

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

#!/bin/bash
. /etc/profile.d/color.sh
Disk="`df | sed -rn 's#^/dev/sd.* ([0-9]{1,3}%).*#\1#p'|sort -rn |head -1`"
echo -e "${GREEN}Disk Used:${END} ${RAN}${Disk}${END}"

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

[root@rocky8 scripts]# cat links.sh 
#!/bin/bash
. /etc/profile.d/color.sh
Links=$(ss -nt |egrep '^ESTAB'|tr -s " " :|cut -d: -f6|sort |uniq -c|sort -rn)
printf '%-5s %-20s \n' count links
printf "%-5s %-20s \n" ${Links}
[root@rocky8 scripts]# ./links.sh
count links
2 172.20.0.27
1 10.0.0.1

5、​​编写脚本rm.sh​​,实现替代rm命令,将所有删除的文件移动到tmp-年月日-时分秒的目录。

[root@rocky8 scripts]# cat rm.sh 
#!/bin/bash
DIR=/tmp/`date +%F-%T`
[ -e $DIR ] || mkdir -p $DIR
path="`pwd`/$1:$DIR"


mv $1 $DIR && echo "$path" |tee path.log

[root@rocky8 scripts]# alias rm=/root/scripts/rm.sh
[root@rocky8 scripts]# rm fstab
/root/scripts/fstab:/tmp/2022-07-18-20:08:48
[root@rocky8 scripts]# ll /tmp/2022-07-18-20\:08\:48/
total 4
-rw-r--r-- 1 root root 615 Jul 18 20:08 fstab

6、​​编写脚本huishouzhan.sh​​ 运行该脚本,会显示当天所有被删除的文件名清单

[root@rocky8 scripts]# cat huishouzhan.sh 
#!/bin/bash
. /etc/profile.d/color.sh
read -p "请输入要查找的日期:" day
cat /root/scripts/path.log | grep "$day" || echo -e "${RED}未找到记录${END}"
[root@rocky8 scripts]# ./huishouzhan.sh
请输入要查找的日期:2022
/root/scripts/passwd--/tmp/2022-07-18-19:53:24
[root@rocky8 scripts]# ./huishouzhan.sh
请输入要查找的日期:2020
未找到记录

7、编写脚本huanyuan,实现在脚本后通过指定参数,即可从回收站还原到原始路径。huanyun 文件名

[root@rocky8 scripts]# cat huanyuan.sh 
#!/bin/bash
. /etc/profile.d/color.sh
read -p "请输入要还原的文件: " file
yuan=`cat /root/scripts/path.log|grep "$file"|cut -d: -f2,3,4`/$file
des=`cat /root/scripts/path.log|grep "$file"|cut -d: -f1|sed -rn 's#(.*)/[^/]+$#\1#p'`

cp $yuan $des && echo -e "${GREEN}已还原到原目录${END}" || echo -e "${RED}失败${END}"
[root@rocky8 scripts]# rm fstab
/root/scripts/fstab:/tmp/2022-07-18-20:42:47
[root@rocky8 scripts]# ./huanyuan.sh
请输入要还原的文件: fstab
已还原到原目录
[root@rocky8 scripts]# ls
backup.sh fstab huishouzhan.sh path.log systeminfo.sh
disk.sh huanyuan.sh links.sh rm.sh

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

[root@rocky8 scripts]# cat argsnum.sh 
#!/bin/bash
[ $# -lt 1 ] && { echo "至少应该给一个参数";exit; } || egrep '^[[:space:]]*$' $1 |wc -l
[root@rocky8 scripts]# ./argsnum.sh /etc/fstab
1
[root@rocky8 scripts]# ./argsnum.sh
至少应该给一个参数

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

[root@rocky8 scripts]# cat hostping.sh 
#!/bin/bash
. /etc/profile.d/color.sh
ping -c1 -W1 $1 &> /dev/null && echo -e "${GREEN}该IP地址可访问${END}" || echo -e "${RED}该IP地址不可访问${END}"
[root@rocky8 scripts]# ./hostping.sh 10.0.0.152
该IP地址可访问
[root@rocky8 scripts]# ./hostping.sh 10.0.0.153
该IP地址不可访问

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

[root@rocky8 scripts]# cat checkdisk.sh 
#!/bin/bash
DiskUsed=$(df |sed -rn 's#^/dev/sd.* ([0-9]{1,3})%.*#\1#p'|sort -rn|head -1)
DiskInodeUsed=$(df -i |sed -rn 's#^/dev/sd.* ([0-9]{1,3})%.*#\1#p'|sort -rn|head -1)

if [ $DiskUsed -ge 20 -o $DiskInodeUsed -ge 80 ];then
wall "磁盘空间或inode使用率快要用尽,磁盘使用率:${DiskUsed} Inode使用率:${DiskInodeUsed} " | mail -s "警告:磁盘快用用尽" magedu@163.com
fi

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

[magedu@rocky8 tmp]$ cat per.sh 
#!/bin/bash
[ ! -r $1 -a ! -w $1 ] && echo "文件不可读不可写" || echo "不满足"
[magedu@rocky8 tmp]$ ./per.sh fstab
文件不可读不可写
[magedu@rocky8 tmp]$ ll
total 8
drwxr-xr-x 2 root root 19 Jul 18 20:42 2022-07-18-20:42:47
-rw-r----- 1 root root 615 Jul 18 20:42 fstab

[magedu@rocky8 tmp]$ ll
total 8
drwxr-xr-x 2 root root 19 Jul 18 20:42 2022-07-18-20:42:47
-rw-r--r-- 1 root root 615 Jul 18 21:49 fstab
[magedu@rocky8 tmp]$ ./per.sh fstab
不满足

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

[root@rocky8 scripts]# cat excute.sh 
#!/bin/bash
[[ $1 =~ .*\.sh ]] && chmod +x $1 || echo "非脚本文件"
[root@rocky8 scripts]# ./excute.sh 1.sh
[root@rocky8 scripts]# ll 1.sh
-rwxr-xr-x 1 root root 0 Jul 18 21:55 1.sh
[root@rocky8 scripts]# ./excute.sh 2.txt
非脚本文件

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

#!/bin/bash
. /etc/profile.d/color.sh
read -p "请输入要禁止登陆的用户:" user
sed -i "/^$user/s#/bin/bash#/sbin/nologin#" /etc/passwd && echo -e "${RED}用户已经禁止登陆${END}" ## 也可以用usermod -s更改
[root@rocky8 scripts]# ./nologin.sh
请输入要禁止登陆的用户:magedu
用户已经禁止登陆


[root@rocky8 scripts]# cat login.sh
#!/bin/bash
. /etc/profile.d/color.sh
read -p "请输入您要允许登陆的用户:" user
sed -i "/^${user}\>/s#/sbin/nologin#/bin/bash#" /etc/passwd && echo -e "${GREEN}用户已经可以登陆${END}"
[root@rocky8 scripts]# ./login.sh
请输入您要允许登陆的用户:magedu
用户已经可以登陆

14、​​编写脚本testip.sh​​,要求如下

执行脚本会询问用户 ”请输入要测试的主机IP地址“ ,此时,如果输入的IP地址不合法,如大于255,直接提示,IP不合法,并退出脚本,如IP合法,判断所输入的主机是否在维护清单/root/weihu.txt中(该文本手动编写,格式如下)

192.168.0.1

192.168.0.200

……

如用户所输入主机在该清单中,则直接提示,该主机正在维护,然后退出脚本

如不在维护,开始判断是否通。如通。提示该主机正在运行,不通提示该主机已关机。

[root@rocky8 scripts]# cat testip.sh 
#!/bin/bash
. /etc/profile.d/color.sh
read -p "请输入要测试的主机IP地址:" IP
if [[ ! $IP =~ ^(([1-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5]|0)\.){3}([1-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5]|0)$ ]] ;then
echo -e "${RED}请输入正确的IP地址${END}"
exit 1
elif grep $IP /root/scripts/weihu.txt &> /dev/null ;then
echo -e "${RAN}该主机正在维护${END}"
exit 2
elif ping -c1 -w1 $IP &> /dev/null ;then
echo -e "${GREEN}该主机正在运行${EMD}"
else
echo -e "${RED}该主机已关机${END}"
fi

[root@rocky8 scripts]# ./testip.sh
请输入要测试的主机IP地址:10.0.0.999
请输入正确的IP地址
[root@rocky8 scripts]# ./testip.sh
请输入要测试的主机IP地址:10.0.0.152
该主机正在运行
[root@rocky8 scripts]# ./testip.sh
请输入要测试的主机IP地址:192.168.0.3
该主机正在维护

15.BMI=体重(以千克为单位)除以身高的平方(以米为单位)。

例如:一个人的身高为1.75米,体重为68千克,他的BMI=68/(1.75*1.75)=22.2。

中国成人正常的BMI应在18.5-23.9之间,如果小于18.5为体重不足,如果大于等于24为超重,大于等于28为肥胖。

#!/bin/bash
. /etc/profile.d/color.sh
read -p "请输入您的身高(单位/m):" Height
read -p "请输入您的体重(单位/Kg):" Weight

if [[ ! $Height =~ ^[1,2]\.[0-9]{,2}?$ ]];then
echo -e "${REN}请输入正确的身高,单位米!${END}"
exit 2
fi
if [[ ! $Weight =~ ^[0-9]{1,3}$ ]];then
echo -e "${RED}请输入正确的体重,单位公斤!${END}"
exit 3
fi
BMI=$(echo $Weight/$Height^2 |bc)
if [ $BMI -lt 18 ];then
echo -e "${RAD}买点人参枸杞大补丸补补吧!${END}"
elif [ $BMI -eq 24 ];then
echo -e "${RAN}单身狗身体棒!${END}"
elif [ $BMI -lt 28 ];then
echo -e "${RAN}都是啤酒惹的祸!${END}"
else
echo -e "${RAN}腾哥的脂肪险多买点,你这一身都是钱~!${END}"
fi
[root@rocky8 scripts]# ./bmi.sh
请输入您的身高(单位/m):1.8
请输入您的体重(单位/Kg):80
都是啤酒惹的祸!

举报

相关推荐

0 条评论