技能点
$# :参数个数
-ne :判断条件,不等于 not equals
exit 1 :从当前位置退出脚本
$2 :第二个参数
grep -w :精确查询
wc -l :统计个数
A=`command` :将command结果复制给A,`为键盘1左边的按钮
# 注意判断中多个条件 [[ 之间 和 ]] 之间不能有空格
if [[ $A -ne 0 ]] && [[ $B -ne 0 ]]
# 创建组、创建用户并指定组、无交互修改密码
groupadd $1;useradd -g $1 $2;echo "$3" | passwd --stdin $2
注释很清楚,不做多余解释了,直接上脚本,如果有疑问可以通过篇末联系方式添加企鹅共同探讨!
1.创建脚本
#! /bin/bash
current=$(date "+%Y-%m-%d %H:%M:%S")
echo 操作时间 : $current
echo 操作内容 : $1 $2 $3
echo 在线IP : `w | grep root | awk '{print $3}' | awk '!a[$1]++{print}'
# 参数判断,参数要等于3,否则退出,参数依次为 组名、用户名、密码
if [ $# -ne 3 ]
then
echo "ABNORMAL NUMBER OF PARAMETERS"
exit 1
fi
# Linux 用户和Kerberos 实体都存在则退出
A=`grep -w $2 /etc/passwd | wc -l`
B=`kadmin.local -q "list_principals" | grep -w $2/[email protected] | wc -l`
if [[ $A -ne 0 ]] && [[ $B -ne 0 ]]
then
echo "USER ALREADY EXIST"
exit 1
fi
# Kerberos 实体存在则退出
#B=`kadmin.local -q "list_principals" | grep -w $2/[email protected] | wc -l`
#if [ $B -ne 0 ]
#then
# echo "KERBEROS PRINCIPAL ALREADY EXIST"
# exit 1
#fi
# create linux gproup/user/passwd
for i in fan102 fan103 fan104
do
ssh $i "groupadd $1;useradd -g $1 $2;echo "$3" | passwd --stdin $2"
done
# create kerberos principal
kadmin.local -q "addprinc -pw $3 $2/$1"
kadmin.local -q "xst -k /var/keytab/"$2".keytab $2/[email protected]"
# create hdfs user
kinit -kt /var/keytab/hdfs.keytab hdfs/hdfs
hadoop fs -mkdir /user/$2
hadoop fs -chown $1:$2 /user/$2
# 退出 kerberos 认证
kdestroy
2.删除脚本
#! /bin/bash
# 参数判断,参数要等于2,否则退出,参数依次为 组名、用户名
if [ $# -ne 2 ]
then
echo "ABNORMAL NUMBER OF PARAMETERS"
exit 1
fi
# delete linux user
for i in fan102 fan103 fan104
do
ssh $i "userdel -r $2"
done
# delete kerberos principal
# yes yes 因为kerberos删除实体时需要校验,这样写可避免等待输入
yes yes | kadmin.local -q "delprinc $2/$1"
rm -rf /var/keytab/"$2".keytab
# delete hdfs user
kinit -kt /var/keytab/hdfs.keytab hdfs/hdfs
hadoop fs -rm -r /user/$2
# 退出 kerberos 认证
kdestroy
3.校验
#! /bin/bash
# 判断所有节点Linux用户是否存在
unum=0
for i in fan102 fan103 fan104
do
# ssh到各节点查看是否存在目标用户,不存在r=0,存在r=1
r=`ssh $i cut -d ":" -f 1 /etc/passwd | grep -w $2 | wc -l`
# 所有节点上目标用户个数做累加
unum=$(($unum+$r))
done
A=$unum
if [ $A -lt 3 ];
then
A=0
else
A=1
fi
# 判断kerberos实体是否存在
k=`kadmin.local -q "list_principals" | grep -w $2/[email protected] | wc -l`
if [ $k -eq 0 ];
then
B=0
else
B=1
fi
# 判断hdfs用户是否存在
kinit -kt /var/keytab/hdfs.keytab hdfs/hdfs
# hadoop自带判断文件存在脚本
hadoop fs -test -e /user/$2
# $? 表示最后一次执行的命令的返回状态 0 代表存在 1代表不存在
if [ $? -ne 0 ] ;then
C=0
else
C=1
fi
kdestroy
echo $A$B$C
# 输出结果
#if [[ $A -eq 1 ]] && [[ $B -eq 1 ]] && [[ $C -eq 1 ]]
#then
# echo "200"
#else
# echo "100"
#fi
4. 调用
#! /bin/bash
if [[ $1 = "create" ]] && [[ $# -eq 4 ]]
then
G=$2
U=$3
optuser.sh $1 $2 $3 $4 >> /var/log/bigdtbase.log 2>&1
ckuser.sh $G $U | tee -a /var/log/bigdtbase.log
elif [[ $1 = "create" ]] && [[ $2 = "group" ]]
then
optuser.sh $1 $2 $3 >> /var/log/bigdtbase.log 2>&1
elif [[ $1 = "delete" ]] && [[ $# -eq 3 ]]
then
G=$2
U=$3
optuser.sh $1 $2 $3 >> /var/log/bigdtbase.log 2>&1
ckuser.sh $G $U | tee -a /var/log/bigdtbase.log
else
echo 400
fi
+++++++++++++++++++++++++++++++++++++++++
+ 如有问题可+Q:1602701980 共同探讨 +
+++++++++++++++++++++++++++++++++++++++++