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
添加用户
首先判断操作系统是否存在此用户,若不存在,则报错。若存在,则检查数据库中是否存在此用户,若数据库中存在,则提示数据库已经存在此用户,若数据库不存在则插入数据库。
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
}
判断用户是否存在于操作系统
function check_user_os(){
if id -u $user_name > /dev/null 2>&1; then
echo "0"
else
echo "-1"
fi
}
判断用户是否存在于DB
通过查询数据表来进行判断
function check_user_db(){
id=`select_user_db`
echo $id
}
查询数据表中是否存在用户
function select_user_db(){
mysql $db_name <<EOF
select ID from USER where USER_NAME='$user_name';
EOF
}
插入用户,并赋予权限
EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.
EOF一般会配合cat能够多行文本输出.
其用法如下:
<…
EOF //结束
还可以自定义,比如自定义:
<…
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
}
打印日志
function write_log(){
echo `date` " :$1" >> $log_file
}
完整代码
#!/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
赋:批量创建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