SHELL中的常用脚本

    用户建立脚本

执行 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

    


猜你喜欢

转载自blog.csdn.net/u010489158/article/details/80824578
今日推荐