Shell练习2

9.19 写一个脚本,遍历/data/目录下的txt文件,将这些文件做一个备份,备份的文件名增加年月日后缀,比如aming.txt备份为aming.txt_20230919

#!/bin/bash
#author: cqy
#version:v1
#data:2023-09-19

## 定义后缀变量,注意下面这个``(反引号)的含义
suffix=`date+%Y%m%d`

##找到/data/目录下的txt文件,用for循环遍历
for f in `find /data/ -type f -name "*.txt"`
do
	echo "备份文件$f"
	cp ${f} ${f}_${suffix}
done

知识点总结:
1、date命令的用法,可以根据日期、时间获取到想要的字符
2、for循环如何遍历文件

9.20 创建10个用户,并给他们设置随即密码,密码记录到一个文件里,文件名userinfo.txt。用户从user_00到user_09,密码要求:包含大小字母以及数字,密码长度15位。

#!/bin/bash
#author:cqy
#version:v1
#date:2023-09-20

##先查看/tmp/userinfo.txt文件是否存在,存在的话先删除,以免影响到本次脚本执行结果。(密码文件,如果存在,在里面写东西,可能会造成冲突)
if [ -f /tmp/userinfo.txt]
then
		rm -f /tmp/userinfo.txt
fi
##判断mkpasswd命令在不在,我们用该命令生成随即字符串,也就是用户的密码。(判断随即命令在不再)
if ! which mkpasswd
then
	##ub
	apt install -y expect
fi
##借助seq生成从00到09,10个数的队列
for i in `seq -w 0 09`
do
	##每次生成一个随即字符串,将该字符串赋值给p变量,这个就是用户的密码
	##mkpasswd命令默认生成的字符串会包含大小写字母和数字和特殊符号
	##如果不要求特殊符号,可以加-s 0来限定不使用特殊符号
	p=`mkpaswd -l 15 -s 0`
	##添加用户,并给该用户设置密码
	useradd user_${i} && echo "${p}" | passwd --stdin user_${i}
	echo "user_${i} ${p}" >> /tmp/userinfo.txt
done

关键知识点总结:
1、mkpasswd可以生成随即字符串,-l指定长度,-s指定特殊字符串个数,-c指定小写字母个数 -C指定大写字母个数,-d指定数字个数
2、seq可以生成序列,用法: seq 1 5; seq 5; seq 1 2 10;seq 10 -2 1; seq -w 1 10;
3、passwd – stdin username

9.21 用来检测本机所有磁盘分区读写是否正常

提示:可以遍历所有挂载点,然后新建一个测试文件;然后在删除测试文件,如果可以正常新建和删除,则说明该分区没有问题

#!/bin/bash
#author:cqy
#version:v1

for mount_p in `df | sed '1d' | grep -v  'tmpfs' | awk '{print $NF}'`
do
	## 创建测试文件,并删除,从而确定该磁盘分区是否有问题
	touch $mount_p/testfile && rm -f $mount_p/testfile
	if [$? -ne 0]
	then
		echo "$mount_p 读写有问题"
	else
		echo "mount_p 读写正常"
	fi
done

关键知识点总结:
1、&& 连接符表示当前的命令执行成功才会执行后面的命令
在本例子中,只有两条命令都执行成功了,返回值才是0,否则任何一条命令执行出错,返回之都是非0
2、写脚本的过程中,可以一边在命令行中运行命令测试一边写脚本
3、shell脚本里sed、grep、awk无处不在,所以用号这三个工具也是关键。
磁盘分区正常或者不正常有什么影响?

9.24 检查/data/wwroot/app目录下所有文件和目录,看是否满足下面条件

1、所有文件的权限为644
2、所有的目录权限为755
3、文件和目录所有者为www. 所属组root
如果不满足,改成符合要求
注意:不要直接改权限,一定要有判断的过程

##!/bin/bash
## author:cqy
## version:v1

cd /data/wwroot/app
##遍历所有目录和文件,用"find ."即可
for f in `find .`
do
	##查看文件权限
	f_p=`stat -c  %a $f`
	##查看文件所有者
	f_u=`stat -c %U $f`
	##查看文件所属组
	f_p=`stat -c %G $f`

	##判断是否为目录
	if [ -d %f ]
	then
		[ $f_p != '755' ] && chmod 755 $f
	else
		[ $f_p != '644' ] && chmod 644 $f
	fi

	## && 用在两条命令中间,可以起到if判断的作用
	## 当第一条命令成功,才会执行后面的命令
	[ $f_u != 'www' ] && chown www $f
	[ $f_g != 'root' ] && chown : root $f
done

关键知识点总结:
1、查看文件权限:stat -c %a 1.txt
2、查看文件所属组: stat -c %G 1.txt
3、查看文件所有者: stat -c %U 1.txt
&& 可以实现:当前命令执行成功再执行后面命令
|| 可以实现,当前命令不成功再执行后面命令

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值