shell脚本实战

先查漏补缺下,讲到哪就是哪儿,不过绝对是满满干货。

(1)grep的一些参数

—A(after) 此选项是显示匹配行和它后面的n行#grep -A 5 zabbix /etc/passwd -B(before)  此选项是显示匹配行和它前面的n行 #grep -B 5 zabbix /etc/passwd -C(center) 此选项是匹配行和它前后各n行 总体来说,-C覆盖面最大,这3个选项都是关于匹配行的上下文的。

实例:#grep -A 4 zabbix /etc/passwd

解释:搜密码文件,找到匹配“zabbix”字符串的行,显示该行后面紧跟的4行

建立用户的脚本

要求:执行脚本user_create.sh userlist  passwdlist,建立userlist列表中的用户,设定userlist列表中的用户密码为passlist列表中的密码。

注意:当脚本后面跟的文件个数不足时报错,当文件行数不一致时报错,当文件不存在时报错。

#!/bin/bashif ["$# -ne "2"]    then    echo "ERROR:please input userfile and passwd file follow scripts"    exit 1elif [! -e "$1"]    then    echo "ERROR:$1 is not exist"    exit 1elif [! -e "$2"]    then    echo "ERROR:$2 is not exist"    exit 1elif    USERFILE_line=`awk 'BEGIN{n=0}{n++}END{print n}' $1`    PASSFILE_line=`awk 'BEGIN{n=0}{n++}END{print n}' $2`    [ "$USERFILE_line" -ne "PASSFILE_line"]    then         echo "$1 line number diff with $2"        exit 1 fi ####################create user##################### for Line_Num in `seq 1 $USERFILE_line` do      USERNAME=`sed -n ${Line_Num}p $1`     PASSWORD=`sed -n ${Line_Num}p $2`     useradd $USERNAME     echo $PASSWORD |passwd --stdin $USERNAME &>/dev/null      echo "$USERANME have been created" done

数据库备份

要求:执行db_dump.sh  westos(数据库密码)

在脚本执行后会备份数据库中的所有库到/mnt/mysqldump目录中

备份文件名称为“库文件.sql”当此文件存在时报错并询问动作,输入“S”跳过备份,当输入“B”时备份“库文件.sql”文件,为“库名称_backup.sql”当输入“O”时,覆盖源文件。

#!/bin/bashDATABASE=`mysql -uroot -EN -e "show databases;"|grep -E "^\*/schema$" -v `mkdir -p /mnt/mysqldumpfor DATABASE_NAME in $DATABASEdo [ ! -e "/mnt/mysqldump/${DATABASE_NAAME}.sql" ]&&{mysqldump -uroot $DATABASE_NAME > /mnt/mysqldump/${DATABASE_NAME}.sqlecho -e "\033[32m${DATABASE_NAME}.sql is backup\033[0m"}||{read -p "[S]kip  [B]ackup    [O]verwriteplease input action: "ActionAction= `echo $ACTIVE|tr 'A-Z' 'a-z'`case $ACTION in s);;b) mysqldump -uroot $DATABASE_NAME >/mnt/mysqldump/${DATABASE_NAME}echo -e "\033[34m${DATABASE_NAME}_backup.sql is backup!!\033[0m]"o)mysqldump -uroot $DATABASE_NAME > /mnt/mysqldump/${DATABASE_NAME}.sqlecho -e "\033[31m${DATABASE_NAME}.sql is overwrite!!\033[0m";;exit)echo -e "\033[37mbye\033[0m"exit 0;;*)echo erroresac}done

服务自动部署实例

要求:执行脚本lamp.sh

脚本执行后部署好论坛,并设定apache的网络接口为8080

#!/bin/bashAuto_DISCUZ(){/usr/bin/expect<<EOFset timeout 30spawn ssh root@$1expect {    "yes/no" {send "yes\r";exp_continue}    "password:" {send "westos\r"}}expect "]#"  {send "yum install httpd -y\r"}expect "]#"  {send "yum install mariadb-server -y\r"}expect "]#"  {send "yum install php-mysql.x86_64 -y\r"}expect "]#"  {send "systemctl start httpd\r"}expect "]#"  {send "systemctl start mariadb\r"}expect eofEOF}Auto_httpd(){/usr/bin/expect <<EOFset timeout 30spawn ssh root@$1expect {    "yes/no" {send "yes\r";exp_continue}    "password:" {send "westos\r"}    }expect "]#" {send “sed” "/^listen/cListen 8080" -i /etc/httpd/conf/httpd.conf\r}expect

自动登录脚本

要求:执行auto_ssh.sh 172.25.254.100 westos,执行脚本后自动登录并保持(第一个参数为ip,第二个参数为密码)

#!/bin/bashfor NUM in {1..10}doping -c1 -w1 172.25.254.$i &>/dev/null && {/usr/bin/expect <<EOFspawn ssh root@172.25.254.$i "hostname"expect {    "yes/no" {send "yes\r";exp_continue}    "password" {send "$2\r"}    }expect eofEOF}

来源:老凯运维,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/127169

发表评论

登录后才能评论
侵权联系 投诉举报
返回顶部