打开支付宝首页搜“523966799”领红包,领到大红包的小伙伴赶紧使用哦!

 找回密码
 立即注册

QQ登录

只需一步,快速开始

shell脚本实现添加用户

2021-8-16 17:30| 发布者: zhaojun917| 查看: 1597| 评论: 0

摘要: 主方法:定义变量,调用函数。shell中的特殊变量$#:脚本输入参数的个数$? 上个命令的退出状态,或函数的返回值$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID$0:当前脚本的文件名$n 传递给脚本或 ...
主方法:定义变量,调用函数。
shell中的特殊变量

$#:脚本输入参数的个数
$? 上个命令的退出状态,或函数的返回值
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
$0:当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
$@:脚本输入的所有参数
$* 传递给脚本或函数的所有参数

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" “)包含时,都以”$1" “2 " … " 2" … "2"…"n” 的形式输出所有参数。
但是当它们被双引号(" “)包含时,”$*" 会将所有的参数作为一个整体,以"$1 $2 … n " 的 形 式 输 出 所 有 参 数 ; " n"的形式输出所有参数;"n"的形式输出所有参数;"@" 会将各个>参数分开,以"$1" “2 " … " 2" … "2"…"n” 的形式输出所有参数。

#------------------------------Main--------------------------------
basePath=`pwd`
log_file=${basePath}/add_user.log
db_name="test"
#This role_id is admin.
role_id="402880cd5f1a685f015f1a6969500017"
secret_level="0"
#1:can login.2:can not.
state="1"
user_name=""
user_name_zh=""

if [ -f "$log_file" ]; then
    rm -f $log_file
fi

if [ "$#" -gt 0 ]; then
    for user in "$@"
    do
        uid=`uuidgen | sed 's/-//g'`
        user_name=$user
        user_name_zh=$user
        add_user
    done
else
    echo "Usage: sh add_user.sh user1 user2 user3 ..."
    exit -1
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
添加用户
首先判断操作系统是否存在此用户,若不存在,则报错。若存在,则检查数据库中是否存在此用户,若数据库中存在,则提示数据库已经存在此用户,若数据库不存在则插入数据库。

function add_user(){
    is_exist_os=`check_user_os`
    if [ "$is_exist_os" == 0 ]; then
        is_exist_db=`check_user_db`
        if [ "x$is_exist_db" = "x" ]; then
            insertDB
            if [ $? == 0 ]; then
                msg="Add user $user_name success!"
            else
                msg="Add user $user_name error!"
            fi
        else
            msg="The user $user_name is exist in DB:test, table:USER!"
        fi
        write_log "$msg"
        echo "$msg"
    else
        msg="The user $user_name is not exist in OS!"
        write_log "$msg"
        echo "$msg"
    fi
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
判断用户是否存在于操作系统

function check_user_os(){
    if id -u $user_name > /dev/null 2>&1; then
        echo "0"
    else
        echo "-1"
    fi
}
1
2
3
4
5
6
7
判断用户是否存在于DB
通过查询数据表来进行判断

function check_user_db(){
    id=`select_user_db`
    echo $id
}
1
2
3
4
查询数据表中是否存在用户

function select_user_db(){
mysql $db_name <<EOF
select ID from USER where USER_NAME='$user_name';
EOF
}
1
2
3
4
5
插入用户,并赋予权限

EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.
EOF一般会配合cat能够多行文本输出.
其用法如下:
<<EOF //开始
EOF //结束
还可以自定义,比如自定义:
<<BBB //开始
BBB //结束

function insertDB(){
mysql $db_name << EOF
insert into USER values('$uid', null, $secret_level, $state, '$user_name', '$user_name_zh');
insert into USER_ROLE values('$uid', '$role_id');
EOF
}
1
2
3
4
5
6
打印日志

function write_log(){
    echo `date` " :$1" >> $log_file
}
1
2
3
完整代码

#!/bin/bash

function write_log(){
    echo `date` " :$1" >> $log_file
}

function check_user_os(){
    if id -u $user_name > /dev/null 2>&1; then
        echo "0"
    else
        echo "-1"
    fi
}

function select_user_db(){
mysql $db_name <<EOF
select ID from USER where USER_NAME='$user_name';
EOF
}

function check_user_db(){
    id=`select_user_db`
    echo $id
}

function add_user(){
    is_exist_os=`check_user_os`
    if [ "$is_exist_os" == 0 ]; then
        is_exist_db=`check_user_db`
if [ "x$is_exist_db" = "x" ]; then
            insertDB
            if [ $? == 0 ]; then
                msg="Add user $user_name success!"
            else
                msg="Add user $user_name error!"
            fi
        else
            msg="The user $user_name is exist in DB:test:USER!"
        fi
        write_log "$msg"
        echo "$msg"
    else
        msg="The user $user_name is not exist in OS!"
        write_log "$msg"
        echo "$msg"
    fi
}

#if mysql db has a password, use this command.
#mysql -utest -ptest test
function insertDB(){
mysql $db_name << EOF
insert into USER values('$uid', null, $secret_level, $state, '$user_name', '$user_name_zh');
insert into USER_ROLE values('$uid', '$role_id');
EOF
}

#------------------------------Main--------------------------------
basePath=`pwd`
log_file=${basePath}/add_user.log
db_name="test"
#This role_id is admin.
role_id="402880cd5f1a685f015f1a6969500017"
secret_level="0"
#1:can login.2:can not.
state="1"
user_name=""
user_name_zh=""

if [ -f "$log_file" ]; then
    rm -f $log_file
fi

if [ "$#" -gt 0 ]; then
    for user in "$@"
    do
        uid=`uuidgen | sed 's/-//g'`
        user_name=$user
        user_name_zh=$user
        add_user
    done
else
    echo "Usage: sh add_user.sh user1 user2 user3 ..."
    exit -1
fi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
赋:批量创建linux用户

#!/bin/bash

_name=user
_passwd=111111
i=1
while [ $i -lt 10 ]; do
    _username=$_name$i
    useradd -d /apps/users/$_username $_username
    echo
    echo $_passwd | passwd --stdin $_username
    i=$(( $i + 1 ))
done

关闭

站长推荐上一条 /7 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )

GMT+8, 2024-9-20 02:42 , Processed in 0.022538 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部