用户建立脚本
执行 users_create.sh userfile passfile
建立 userlist 列表中的用户
设定 userlist 列表中的密码为 passlist 列表中的密码
当脚本后面跟的文件个数不足两时,报错
当文件行数不一致时报错
当文件不存在时报错
当用户存在时报错
#!/bin/bash
USER=`wc -l "/mnt/$1" |cut -d" " -f1`
PASS=`wc -l "/mnt/$2" |cut -d" " -f1`
if [ "$#" -ne "2" ]
then
echo 脚本后面不够两个文件
exit 1
elif [ ! -e "/mnt/$1" ]
then
echo $1不存在
exit 1
elif [ ! -e "/mnt/$2" ]
then
echo $2不存在
exit 1
elif [ "$USER" -ne "$PASS" ]
then
echo 文件内个数不相等
exit 1
else
for i in `seq 1 $USER`
do
USERNAME=`sed -n ${i}p $1`
PASSWORD=`sed -n ${i}p $2`
useradd $USERNAME && echo $PASSWORD|passwd --stdin $USERNAME||
echo $USERNAME已经存在
done
fi
数据库备份脚本
执行 db_dump.sh westos( 数据库密码 )
脚本执行后会备份数据库中的所有库到 /mnt/mysqldump 目录中
备份文件名称为 “库名称 .sql” 当此文件存在时报错并询问动作
输入“ S” 跳过备份,当输入“ "B" 时备份“库名称 .sql” 文件为“库名称 _backup.sql”, 当输入“ O” 时,覆盖源文件
#!/bin/bash DATA_ACTION() { read -p "${NAME}.sql already exit!S(jump) B(beifen) O(fugai)" action if [ "$action" = "S" ] then continue elif [ "$action" = "B" ] then cp /mnt/mysqldump/${NAME}.sql /mnt/mysqldump/${NAME}_backup.sql -p elif [ "$action" = "O" ] then mysqldump -uroot -pwestos $NAME > /mnt/mysqldump/${NAME}.sq elif [ "$action" = "exit" ] then exit 0 else DATA_ACTION fi } DATA_MESSAGE=` mysql -uroot -pwestos -EN -e "show databases;"|grep -E "^\*|schema$" -v` mkdir -p /mnt/mysqldump for NAME in $DATA_MESSAGE do if [ -e "/mnt/mysqldump/${NAME}.sql" ] then DATA_ACTION else mysqldump -uroot -pwestos $NAME > /mnt/mysqldump/${NAME}.sql fi done |
修改端口号并且启动
#!/bin/bash read -p "please input port " port sed -i "/^Listen/cListen $port" /etc/httpd/conf/httpd.conf systemctl restart httpd |
判断文件类型
vim test.sh
#!/bin/bash
SCRIPT()
{
if [ "$2" "$1" ];then
echo "$1 is a $3 file"
exit
fi
}
if [ -z "$1" ];then
echo "please input file after command!!!"
else
{
if [ -e $1 ];then
{
SCRIPT $1 -L link
SCRIPT $1 -S socket
SCRIPT $1 -b block
SCRIPT $1 -d directory
SCRIPT $1 -f comman
}
else
echo "$1 is not exist!!!"
fi
}
fi
Expect (自动回答)
vim /mnt/answer.sh
read -p "please input your name:" NAME
read -p "please input your age:" AGE
read -p "please input your class:" CLASS
echo "$NAME is $AGE at $CLASS"
vim /mnt/test.sh
#!/bin/bash
sh /mnt/answer.sh <<EOF
westos
20
linux
EOF
此脚本必须按照顺序来执行,如果缺少一个答案则会出现问题
chmod +x /mnt/answer.sh
yum install expect -y ##安装expect
vim /mnt/test.exp
#!/usr/bin/expect
set NAME [ lindex $argv 0 ] ###0脚本后面跟的第一个字符串
set AGE [ lindex $argv 1 ]
set CLASS [ lindex $argv 2 ]
spawn /mnt/answer.sh ###执行的命令
expect {
"name" { send "$NAME\r";exp_continue } ###name为关键字(我们只要找每行不同的字符串即可)
"age" { send "$AGE\r";exp_continue } ###exp_continue继续向下匹配
"class" { send "$CLASS\r" }
}
expect eof ###执行完就退出
ssh连接自动回答:
vim test.exp
#!/usr/bin/expect
set IP [ lindex $argv 0 ]
set PASSWD [ lindex $argv 1 ]
spawn ssh root@$IP
expect {
"yes/no" { send "yes\r";exp_continue }
"password" { send "$PASSWD\r" }
}
interact ###保持连接不会中断
找出文件中ip的hostname
vim test.sh
#!/bin/bash
SCRIPT()
{
/usr/bin/expect <<EOF
set timeout 10
spawn ssh root@$1 hostname
expect {
"yes/no" { send "yes\r";exp_continue }
"password" { send "$PASSWD\r" }
}
expect eof
EOF
}
num=`cat "$1" |wc -l`
for i in `seq 1 $num`
do
IP=$(awk "NR==$i{print \$1}" $1)
PASSWD=$(awk "NR==$i{print \$2}" $1)
ping -w1 -c1 $IP &>/dev/null &&{
SCRIPT $IP |grep -E "spawn|password|Permanently|connecting|Permission" -v
}
done