04.17 Shell函数数组

来源:互联网 发布:软件什么是架构 编辑:程序博客网 时间:2024/06/10 07:37

第一章 统计字符串长度的方法

1. 统计字符串长度的方法

char=oldboyecho ${#char}    *****echo $char |awk '{print length}'echo $char |wc -Lexpr length $char
[root@nginx02_8 script]# vim char.sh#!/bin/bash. /etc/init.d/functionsfor char in I am oldboy teacher I like linuxdo    if [ ${#char} -lt 4 ]    then        echo $char    fidone

2. 打印选择菜单,按照选择一键安装不同的Web服务。
打印选择菜单,按照选择一键安装不同的Web服务。
1.[install lamp]
2.[install lnmp]
3.[exit]

#!/bin/bash. /etc/init.d/functionswhile true;do clearcat <<END    1.[install lamp]    2.[install nginx]    3.[exit]END    read -p "please input the number of you want" num    case "$num" in        1)            action "[install lamp]..." /bin/true            sleep 2            ;;        2)            action "[install nginx]..." /bin/true            sleep 2            ;;        3)            exit    esacdone

3. 监控网站是否可以打开

#!/bin/bash. /etc/init.d/functionsurl=(http://www.baidu.comhttp://oldboy.blog.51cto.comhttp://blog.oldboyedu.comhttp://10.0.0.7)check(){    wget -q -o /dev/null --spider --timeout=5 --tries=2 "$1"    if [[ $? -eq 0 ]]; then        action "$1" /bin/true    else        action "$1" /bin/false    fi}main(){    while true; do        for i in ${url[*]}; do            check "$i"            sleep 3        done    done}clearmain

第二章 企业Shell运维实战案例

  1. 使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy
#!/bin/bash. /etc/init.d/functions[ -d /oldboy ] && cd /oldboy || mkdir -p /oldboy && cd /oldboyfor i in `echo oldboy{00..10}`; do        word=`uuidgen|md5sum |tr "0-9" "a-z"|cut -c 1-10`        touch ${word}_$i.html        if [ $? -eq 0 ]; then                action "${word}_$i.html" /bin/true        fidone
  1. 将上次文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写。
#!/bin/bash. /etc/init.d/functionscd /oldboynew_File=_oldgirl.HTMLfor i in `ls /oldboy`; do        name=$(echo $i | awk -F "_" '{print $1}')        mv  $i ${name}${new_File}done
  1. 批量创建10个系统账号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字的混合)
#!/bin/bash. /etc/init.d/functionsfor i in `echo oldboy{01..10}`; do    oldboy_Password=`uuidgen|sed 's#-##g'|cut -c 1-10`    useradd $i && echo ${oldboy_Password} |passwd --stdin $i &>/dev/null    if [[ $? -eq 0 ]]; then        action "$i 用户创建" /bin/true    fi    echo "用户名:$i  用户密码:${oldboy_Password}" >>/tmp/passworddone
  1. 写一个Shell脚本,判断10.0.0.0/24网络里,当前在线的IP有哪些?
#!/bin/bash. /etc/init.d/functionsip="10.0.0."check="ping -w 2 -c 2"for i in `seq 254`; do    $check $ip$i &>/dev/null    if [[ $? -eq 0 ]]; then        action "$ip$i" /bin/true    else        action "$ip$i" /bin/false    fidone
  1. 写一个Shell脚本解决DOS攻击生产案例。
    请根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100(读者根据实际情况设定),即调用防火墙命令封掉对应的IP。防火墙命令为:iptables -I INPUT -s IP地址 -j DROP。
#!/bin/bash. /etc/init.d/functions#file=$1 定义一个变量接收命令行传参,参数为日志文件类型while true; do    awk '{print $1}' $1|grep -v "^$"|sort|uniq -c >/tmp/tmp.log    #分析传入的日志文件,并在排序去重后追加到一个临时文件里。    while read line; do        ip=$(echo $line|awk '{print $2}')  #获取文件中的每一行的第二列ip列        count=$(echo $line|awk '{print $1}')  #获取文件中的每一行的第一列        if [ $count -gt 500 ] && [ $(iptables -nL |grep "$ip"|wc -l -lt 1) ]; then            iptables -I INPUT -s $ip -j DROP        fi    done </tmp/tmp.log    sleep 3600  #日志的分隔或过滤分析得按分钟执行done
  1. MySQL启动脚本
[root@db02 scripts]# cat /etc/init.d/oldgirl#!/bin/bash# chkconfig: 2345 64 36# description: MySQL startup#Author:oldboy#Blog:http://oldboy.blog.51cto.com #Time:2017-07-07 09:24:34#Name:mysqld.sh #Version:V1.0#Description:This is a test script.[ -f /etc/init.d/functions ] && source /etc/init.d/functionsPort=3306User="root"Bindir="/application/mysql/bin"Datadir="/application/mysql/data"mysqld_pid_file_path="/application/mysql/`hostname`.pid"PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"export PATHreturn_value=0# Lock directory.lockdir='/var/lock/subsys'lock_file_path="$lockdir/mysql"log_success_msg(){     echo " SUCCESS! $@"}   log_failure_msg(){         echo " ERROR! $@"}  case "$1" in    start)                    # Start daemon        echo "Starting MySQL"        if test -x $Bindir/mysqld_safe        then            $Bindir/mysqld_safe --datadir="$Datadir" --pid-file="$mysqld_pid_file_path"  >/dev/null &            return_value=$?            sleep 2            # Make lock for CentOS            if test -w "$lockdir"            then                touch "$lock_file_path"            fi            exit $return_value        else            log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"        fi        ;;    stop)        if test -s "$mysqld_pid_file_path"        then            mysqld_pid=`cat "$mysqld_pid_file_path"`            if (kill -0 $mysqld_pid 2>/dev/null)            then                echo "Shutting down MySQL"                kill $mysqld_pid                return_value=$?                sleep 2            else                log_failure_msg "MySQL server process #$mysqld_pid is not running!"                rm -f "$mysqld_pid_file_path"            fi            # Delete lock for CentOS            if test -f "$lock_file_path"            then                rm -f "$lock_file_path"            fi            exit $return_value        else            log_failure_msg "MySQL server PID file could not be found!"        fi        ;;    restart)        if $0 stop; then            $0 start        else            log_failure_msg "Failed to stop running server, so refusing to try to start."            exit 1        fi        ;;    *)        echo "Usage: $0  {start|stop|restart}"        exit 1        ;;esacexit $return_value
原创粉丝点击