1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来
#用grep匹配出所有以/sbin/nologin结尾的行,并用wc -l统计个数
[root@localhost ~]#
[root@localhost ~]# grep '/sbin/nologin$' /etc/passwd | wc -l
39
[root@localhost ~]#
#用grep匹配出所有以/sbin/nologin结尾的行,用cut取出第一列。
[root@localhost ~]# grep '/sbin/nologin$' /etc/passwd | cut -d ":" -f 1
bin
daemon
adm
lp
mail
operator
games
ftp
nobody
dbus
systemd-coredump
systemd-resolve
tss
polkitd
geoclue
rtkit
pulse
qemu
usbmuxd
unbound
rpc
gluster
chrony
libstoragemgmt
pipewire
saslauth
setroubleshoot
dnsmasq
radvd
clevis
cockpit-ws
sssd
colord
gdm
rpcuser
gnome-initial-setup
sshd
avahi
tcpdump
[root@localhost ~]#
2、查出用户UID最大值的用户名、UID及shell类型
#用sort对第三列的UID进行反向排序,取出最大值,最后用cut取出1 3 7列。
[root@localhost ~]# sort -n -t ":" -k 3 -r /etc/passwd | head -1 | cut -d ":" -f 1,3,7
nobody:65534:/sbin/nologin
[root@localhost ~]#
3、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
[root@localhost ~]#
#用ss获取当前和本机建立的连接,并用sed去掉第一行的描述,用cut和awk取出远程主机IP,并用uniq -c对重复的值进行统计
[root@localhost ~]# ss -nt | sed -n '2,$p' | cut -d ":" -f 2 | awk -F " " '{print $2}' | uniq -c
2 10.0.0.1
1 10.0.0.204
1 10.0.0.202
[root@localhost ~]#
[root@localhost ~]# ss -nt | sed -En 's/.*:[0-9]+[[:space:]]+(.*):.*/\1/p'|sort -nr| uniq -c
118 10.0.0.204
13 10.0.0.202
1 10.0.0.1
[root@localhost ~]#
4、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息
[root@localhost ~]# cat createuser.sh
#!/bin/bash
UserName=$(echo $1|grep -wE '[[:lower:]]{1,12}') #规范输入的用户名必须是1-12位小写字母,不规范匹配到的会是空值
if [ -z ${UserName} ]
then
echo Username format is not correct,try again!
exit 1; #如果用户名是空,退出脚本
else
id ${UserName} &> /dev/null
UserStaCode=$(echo $?)
if [ ${UserStaCode} -eq 0 ]
then
echo "User $1 already exist!" #如果用户已经存在则提示已经存在用户
else
useradd ${UserName} &> /dev/null #如果用户不存在,则创建该用户
echo "Create user ${UserName} :"
id ${UserName}
fi
fi
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh root
User root already exist!
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh zzz
Create user zzz :
uid=1001(zzz) gid=1001(zzz) groups=1001(zzz)
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh zzzaaaaaaaaaaaa
Username format is not correct,try again!
[root@localhost ~]#
[root@localhost ~]# cat createuser.sh #第二个版本,用短路与、短路或更简洁
#!/bin/bash
UserName=$(echo $1|grep -wE '[[:lower:]]{1,12}')
if [ -z ${UserName} ]
then
echo Incorrect Username,try again!
exit 1;
else
#直接用短路与、短路或代替嵌套if,脚本看起来更清晰明了
useradd ${UserName} &> /dev/null && (echo "Create User ${UserName}";id ${UserName}) || echo "User ${UserName} is exsit!"
fi
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh zzz
User zzz is exsit!
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh root
User root is exsit!
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh aaaaaaaaaaaaaa
Incorrect Username,try again!
[root@localhost ~]#
[root@localhost ~]# bash createuser.sh xxxx
Create User xxxx
uid=1006(xxxx) gid=1006(xxxx) groups=1006(xxxx)
[root@localhost ~]#
5、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
[root@localhost ~]# cat .vimrc #在~/.vimrc插入以下行代码即可
autocmd BufNewFile *.sh exec ":call SetTitle()"
let $author="zzz"
let $email="1234@qq.com"
let $qq="1234"
let $vers="1"
let $description="test"
func SetTitle()
if expand("%:e")=='sh'
call setline(1,"#!/bin/bash")
call setline(2,"#")
call setline(3,"#*************************************")
call setline(4,"#file name: ".expand("%"))
call setline(5,"#author: ".$author)
call setline(6,"#QQ: ".$qq)
call setline(7,"#email: ".$email)
call setline(8,"#version: ".$vers)
call setline(9,"#date: ".strftime("%Y-%m-%d"))
call setline(10,"#description: ".$description)
call setline(11,"#*************************************")
endif
endfunc
[root@localhost ~]#
[root@localhost ~]# vim test.sh
[root@localhost ~]#
[root@localhost ~]# cat test.sh
#!/bin/bash
#
#*************************************
#author: zzz
#QQ: 1234
#email: 1234@qq.com
#version: 1
#date: 2020-10-27
#description: test
#*************************************
echo "hello world"
[root@localhost ~]#
架构作业
1、安装配置redis的cluster集群
2、安装配置memcached高可用
3、安装xmware esxi'