SHELL脚本练习题(二)

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

[20:01:37 root@sh-pd-lvyq-10-101 script]#cat -A -n ../f1.conf 
     1	1$
     2	  2$
     3	   $
     4	$
     5	 5  5$
     6	6  6$
     7	  $
     8	^I^I8$
     9	^I^I^I$
[20:01:42 root@sh-pd-lvyq-10-101 script]#cat argsnum.sh 
#!/bin/bash
#----------------------------------------------
#Author:	Gabriel
#Filename:	argsnum.sh
#CreateDate:	2021-12-22
#Description:	接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数;
#-----------------------------------------------
ARG=$1
[ $# -lt 1 ]&&{ echo"至少应该给一个参数";exit; }||echo "$1共有`egrep '^[[:space:]]*$' $1|wc -l`空白行"
[20:01:47 root@sh-pd-lvyq-10-101 script]#argsnum.sh ../f1.conf 
../f1.conf共有4空白行
[20:02:00 root@sh-pd-lvyq-10-101 script]#

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

[20:21:03 root@sh-pd-lvyq-10-101 script]#cat hostping.sh 
#!/bin/bash
#----------------------------------
#Author:	Gabriel
#FileName:	hostping.sh
#CreateDate:	2021-12-22
#Description:	接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”;
#-------------------------------------
IP=$1
ping -c1 -w1 $IP>/dev/null && echo "该IP地址$IP可访问"||echo "该IP地址$IP不可访问" 
[20:21:09 root@sh-pd-lvyq-10-101 script]#hostping.sh 192.168.1.5
该IP地址192.168.1.5可访问
[20:21:24 root@sh-pd-lvyq-10-101 script]#hostping.sh 192.168.1.6
该IP地址192.168.1.6不可访问
[20:21:32 root@sh-pd-lvyq-10-101 script]#

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

[20:50:22 root@sh-pd-lvyq-10-101 script]#cat checkdisk.sh 
#!/bin/bash
#-------------------------------------------
#Author:	Gabriel
#FileName:	checkdisk.sh
#CreateDate:	2021-12-22
#Description:	检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满;
#-------------------------------------------
WARNING=80
DISK=`df|egrep -o "[0-9]{1,3}%"|egrep -o "[0-9]*"|sort -nr|head -n1`
INODE=`df -i|egrep -o "[0-9]{1,3}%"|egrep -o "[0-9]*"|sort -nr|head -n1`
[ $DISK -ge $WARNING -o $INODE -ge $WARNING ]&&echo "警告!!磁盘:$DISK,INODE:$INODE,空间将满!"||echo "开心玩耍吧"
[20:50:04 root@sh-pd-lvyq-10-101 script]#df -i
Filesystem                Inodes  IUsed    IFree IUse% Mounted on
devtmpfs                  228610    403   228207    1% /dev
tmpfs                     232879      1   232878    1% /dev/shm
tmpfs                     232879    917   231962    1% /run
tmpfs                     232879     16   232863    1% /sys/fs/cgroup
/dev/mapper/centos-root 52428800 130218 52298582    1% /
/dev/mapper/centos-data 26214400     17 26214383    1% /data
/dev/sda1                 172944    342   172602    1% /boot
tmpfs                     232879      9   232870    1% /run/user/42
tmpfs                     232879      1   232878    1% /run/user/0
[20:49:10 root@sh-pd-lvyq-10-101 script]#df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   914440       0    914440   0% /dev
tmpfs                      931516       0    931516   0% /dev/shm
tmpfs                      931516   10452    921064   2% /run
tmpfs                      931516       0    931516   0% /sys/fs/cgroup
/dev/mapper/centos-root 104806400 4730752 100075648   5% /
/dev/mapper/centos-data  52403200   33012  52370188   1% /data
/dev/sda1                 1038336  189204    849132  19% /boot
tmpfs                      186304      12    186292   1% /run/user/42
tmpfs                      186304       0    186304   0% /run/user/0
[20:49:08 root@sh-pd-lvyq-10-101 script]#bash checkdisk.sh 
开心玩耍吧
[20:49:17 root@sh-pd-lvyq-10-101 script]#cp /dev/zero /boot/im.jpg
^C
[20:49:58 root@sh-pd-lvyq-10-101 script]#df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   914440       0    914440   0% /dev
tmpfs                      931516       0    931516   0% /dev/shm
tmpfs                      931516   10452    921064   2% /run
tmpfs                      931516       0    931516   0% /sys/fs/cgroup
/dev/mapper/centos-root 104806400 4730732 100075668   5% /
/dev/mapper/centos-data  52403200   33012  52370188   1% /data
/dev/sda1                 1038336  952224     86112  92% /boot
tmpfs                      186304      12    186292   1% /run/user/42
tmpfs                      186304       0    186304   0% /run/user/0
[20:50:00 root@sh-pd-lvyq-10-101 script]#bash checkdisk.sh 
警告!!磁盘:92,INODE:1,空间将满!

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

[21:08:09 root@sh-pd-lvyq-10-101 script]#cat per.sh 
#!/bin/bash
#------------------------------
#Author:	Gabriel
#FileName:	per.sh
#CreateDate:	2021-12-22
#Description:	判断当前用户对指定参数文件,是否不可读并且不可写;
#----------------------------------------------
FILE=$1
USER=`whoami`
[ -w $1 ] && echo "用户$USER对文件$1有写的权限"||echo "用户$USER对文件$1无写的权限"
[ -r $1 ] && echo "用户$USER对文件$1有读的权限"||echo "用户$USER对文件$1无读的权限"

[21:08:15 root@sh-pd-lvyq-10-101 script]#

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

[21:42:58 root@sh-pd-lvyq-10-101 data]#excute.sh /data/f1.conf 
/data/f1.conf是非脚本文件
[21:43:05 root@sh-pd-lvyq-10-101 data]#excute.sh /data/script/per.sh 
/data/script/per.sh是脚本文件,已为您添加执行权限.
[21:43:20 root@sh-pd-lvyq-10-101 data]#cat script/excute.sh 
#!/bin/bash
#---------------------------------
#Author:	Gabriel
#FileName:	excute.sh
#CreateDate:	2021-12-22
#Description:	判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件;
#-----------------------------------
FILE=$1
[[ $FILE =~ .*\.sh$ ]] && { chmod +x $FILE; echo "$FILE是脚本文件,已为您添加执行权限."; } || echo "$FILE是非脚本文件"
[21:43:38 root@sh-pd-lvyq-10-101 data]#

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

[10:41:04 root@Centos8 data]#cat -n nologin.sh 
     1	#!/bin/bash
     2	#-------------------------------------------
     3	#Author:	Gabriel
     4	#FileName:	nologin.sh
     5	#CreateDate:	2021-12-23
     6	#Description:	实现禁止普通用户登录系统
     7	#------------------------------------------
     8	#思路,禁止用户登录的常规方法有:usermod -L user;usermod user -s /sbin/nologin.此脚本采用第一种方式。
     9	#判断用户是否为普通用户
    10	read -p "请输入用户名:" USER
    11	USERID=`id $USER|cut -d' ' -f1|egrep -o "[0-9]+"`
    12	USERID_MIN=`grep '^UID_MIN\>' /etc/login.defs|egrep -o "[0-9]+"`
    13	USERID_MAX=`grep '^UID_MAX\>' /etc/login.defs|egrep -o "[0-9]+"`
    14	[ $USERID -ge $USERID_MIN -a $USERID -le $USERID_MAX ] && echo "$USER是普通用户" || { echo "$USER不是普通用户,程序终止!";exit; }
    15	usermod -L $USER
    16	echo "现在已将此用户登录系统的权限禁用,请知悉;如您想恢复权限,请执行login.sh脚本。谢谢"
[10:41:26 root@Centos8 data]#cat -n login.sh 
     1	#!/bin/bash
     2	#-------------------------------------------
     3	#Author:	Gabriel
     4	#FileName:	login.sh
     5	#CreateDate:	2021-12-23
     6	#Description:	实现允许普通用户登录系统,此脚本是为了恢复nologin.sh脚本禁用的用户
     7	#------------------------------------------
     8	#思路,nologin.sh采用了usermod -L user的方式禁用,那么恢复就需要使用;usermod -U user的方式;
     9	#判断用户是否为普通用户
    10	read -p "请输入用户名:" USER
    11	USERID=`id $USER|cut -d' ' -f1|egrep -o "[0-9]+"`
    12	USERID_MIN=`grep '^UID_MIN\>' /etc/login.defs|egrep -o "[0-9]+"`
    13	USERID_MAX=`grep '^UID_MAX\>' /etc/login.defs|egrep -o "[0-9]+"`
    14	[ $USERID -ge $USERID_MIN -a $USERID -le $USERID_MAX ] && echo "$USER是普通用户" || { echo "$USER不是普通用户,程序终止!";exit; }
    15	usermod -U $USER
    16	echo "现在已将此用户登录系统的权限恢复,请知悉。谢谢"
[10:41:54 root@Centos8 data]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值