shell脚本进阶&expect

10.1 写一个用户管理脚本

  • 脚本格式: ./script_file[ -h | -a | -d | -p PASSWORD | -m | -s SHELL ] USER_LIST_FILE
  • -a 创建用户列表文件中的用户此选项必须接-m或-p连用
  • -d 删除用户列表文件中的用户
  • -p PASSWDORD 设置用户统一的密码
  • -m 使用默认密码rehat
  • -s SHELL 指定用户的默认shell,如不指定默认/bin/bash
  • -h 显示帮助信息
  • /root/userlist文件内容:每行一个用户名
  • 注意事项:
    • 脚本参数无序也能执行
    • 脚本根据不同情况返回不同的状态码
    • 参数错误能报错
    • 短选项要支持连写
    • 不显示多余的输出信息
    • 用户已存在需提示
10.1.1 编写脚本
#!/bin/bash

user=alice
pflag=0
flag_pass=rehat
shell=/bin/bash

opt=`getopt -q hadms:p: $* | sed "s/'//g"`
set -- $opt

while :; do
	case $1 in
		-h)
			echo -e "	Usage: ./script_file[ -h | -a | -d | -p PASSWORD | -m | -s SHELL ]  USER_LIST_FILE"
			echo -e "	描述:此脚本用于管理用户"
			echo -e "\t-a \t\t 创建用户列表文件中的用户此选项必须接-m或-p连用"
			echo -e "\t-d \t\t 删除用户列表文件中的用户"
			echo -e "\t-p PASSWORD\t 设置用户统一的密码" 	
			echo -e "\t-m \t\t 使用默认密码rehat "
			echo -e "\t-s SHELL\t 指定用户的默认shell,如不指定默认/bin/bash"
			echo -e "\t-h \t\t 显示帮助信息"
			exit 0
		;;
		-a)
			flag="add"
			shift
		;;
		-d)
			flag="del"
			shift
		;;
		-p)
			pflag=1
			flag_pass=$2
			shift 2
		;;
		-m)
			pflag=1
			shift
		;;
		-s)
			shell=$2
			shift 2
		;;
		--)
			shift
			break
		;;
		*)
			echo "语法错误,使用 -h 获取帮助!!!"
			exit 1
		;;
	esac
done

if [ $# -ne 0 ]; then
	case $flag in
			add)
				file=$1
				while read line;do
					let n++
					user=$line
					id $user &> /dev/null
					if [ $? -eq 0 ];then
						echo "用户 $user 已经存在!!!"
					else
						useradd -s $shell $user
						echo "$flag_pass" | passwd --stdin $user >/dev/null 2>&1
						echo "用户 $user 添加成功!!!"
					fi
				done < $file
				exit 0
			;;
			del)
				file=$1
				while read line;do
					let n++
					user=$line
					id $user &> /dev/null
					if [ $? -eq 0 ];then
						userdel -r $user
						echo "用户 $user 删除成功!!!"		
					else
						echo "用户 $user 不存在!!!"
					fi
			done < $file
			;;				
	esac
else
	echo "语法错误,使用 -h 获取帮助!!!!!!"
	exit 1
fi

case $pflag in
	1)
		awk -F:'{print $1,$3}' /etc/passwd
esac
10.1.2 给执行权限
[root@localhost tmp]#chmod +x script_file 
10.1.3 创建/root/userlist文件,并写入内容
[root@localhost tmp]#touch /root/userlist
[root@localhost tmp]#cat /root/userlist
test1
test2
test3

在这里插入图片描述

10.1.4 测试 -h/-a/-m/-p
[root@localhost tmp]#./script_file     
语法错误,使用 -h 获取帮助!!!!!!
[root@localhost tmp]#./script_file -h
        Usage: ./script_file[ -h | -a | -d | -p PASSWORD | -m | -s SHELL ]  USER_LIST_FILE
        描述:此脚本用于管理用户
        -a               创建用户列表文件中的用户此选项必须接-m或-p连用
        -d               删除用户列表文件中的用户
        -p PASSWORD      设置用户统一的密码
        -m               使用默认密码rehat 
        -s SHELL         指定用户的默认shell,如不指定默认/bin/bash
        -h               显示帮助信息
[root@localhost tmp]#./script_file -a
语法错误,使用 -h 获取帮助!!!!!!
[root@localhost tmp]#./script_file -a -m 
语法错误,使用 -h 获取帮助!!!!!!
[root@localhost tmp]#./script_file -a -m /root/userlist
用户 test1 添加成功!!!
用户 test2 添加成功!!!
用户 test3 添加成功!!!
[root@localhost tmp]#./script_file -a -p 123 /root/userlist
用户 test1 已经存在!!!
用户 test2 已经存在!!!
用户 test3 已经存在!!!

在这里插入图片描述

去/etc/passwd文件下查看

[root@localhost tmp]#grep -E '^test[0-9]{1}\>' /etc/passwd
test1:x:1016:1017::/home/test1:/bin/bash
test2:x:1017:1018::/home/test2:/bin/bash
test3:x:1018:1019::/home/test3:/bin/bash

在这里插入图片描述

10.1.5 测试-d
[root@localhost tmp]#./script_file -d /root/userlist
用户 test1 删除成功!!!
用户 test2 删除成功!!!
用户 test3 删除成功!!!
[root@localhost tmp]#./script_file -d /root/userlist
用户 test1 不存在!!!
用户 test2 不存在!!!
用户 test3 不存在!!!

在这里插入图片描述

10.1.6 测试-s
[root@localhost tmp]#./script_file -d /root/userlist   
用户 test1 删除成功!!!
用户 test2 删除成功!!!
用户 test3 删除成功!!!
[root@localhost tmp]#./script_file -a -p 123 -s /sbin/nologin /root/userlist
用户 test1 添加成功!!!
用户 test2 添加成功!!!
用户 test3 添加成功!!!
[root@localhost tmp]#grep -E '^test[0-9]{1}\>' /etc/passwd
test1:x:1016:1017::/home/test1:/sbin/nologin
test2:x:1017:1018::/home/test2:/sbin/nologin
test3:x:1018:1019::/home/test3:/sbin/nologin

在这里插入图片描述

10.1.7 测试乱序以及多余参数
[root@localhost tmp]#./script_file -aa -aa -d  /root/userlist 
用户 test1 删除成功!!!
用户 test2 删除成功!!!
用户 test3 删除成功!!!
[root@localhost tmp]#./script_file -p 123 -a  /root/userlist       
用户 test1 添加成功!!!
用户 test2 添加成功!!!
用户 test3 添加成功!!!
[root@localhost tmp]#./script_file -q -w -e -r
语法错误,使用 -h 获取帮助!!!!!!
[root@localhost tmp]#./script_file -q -w -e -r -d /root/userlist
用户 test1 删除成功!!!
用户 test2 删除成功!!!
用户 test3 删除成功!!!
[root@localhost tmp]#./script_file -s /sbin/nologin -p 123 -a  /root/userlist
用户 test1 添加成功!!!
用户 test2 添加成功!!!
用户 test3 添加成功!!!
[root@localhost tmp]#grep -E '^test[0-9]{1}\>' /etc/passwd
test1:x:1016:1017::/home/test1:/sbin/nologin
test2:x:1017:1018::/home/test2:/sbin/nologin
test3:x:1018:1019::/home/test3:/sbin/nologin

在这里插入图片描述

10.2 编写expect脚本:模拟登陆到ftp服务器并下载文件fstab(预先搭建ftp服务器并拷贝文件到/var/ftp目录)

10.2.1 安装vsftpd/ftp
yum -y install vsftpd
yum -y install ftp
10.2.2 开启服务
systemctl restart vsftpd
10.2.3 拷贝共享文件
cp /etc/fstab /var/ftp/
10.2.4 关闭防火墙
iptables -F
10.2.5 编写脚本
#!/usr/bin/expect

set user "ftp"
set ip "127.0.0.1"
 
spawn ftp $ip
expect "Name (127.0.0.1:root): "
send "$user\r"
expect "Password:"
send "\r"
expect ">"
send "get fstab\r"
expect "ftp> "
send "exit\r"

expect eof
10.2.6 测试
[root@localhost tmp]#./33.exp   

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值