运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)

一、系统指标巡检脚本

#!/bin/bash
menu(){
cat <<EOF
+---------------------------------------------+
|        日常巡检脚本                  |
|        1.查看磁盘使用率              |    
|        2.查看内存使用率              |
|        3.查看系统负载                |
|        4.统计系统连接数              |
|        5.统计系统进程数              |
|        6.统计当前磁盘分区信息        |
|        7.按q退出                     |
|        8.按h帮助                     |
+---------------------------------------------+
EOF
}
menu
while true
do
echo -en "\033[34m请输入你要查看的内容:\033[0m"
read  action
    if [ "$action" == "q" ];then
        echo "quiting...."
        break
    fi
    if [ "$action" == "h" ];then
        menu
    fi
    case $action in 
    1)
        df -h ;;
    2)
        free -h ;;
    3)
        uptime ;;
    4)
        ss -tan | grep -i "estab" | wc -l ;;
    5)
        ps aux | grep -v "grep" | wc -l ;;
    6)
        fdisk -l ;;        
    *)
        echo "Usage: $0 {1|2|3|4|5|6|q|h}"
    esac
done

二、自动创建用户脚本

#!/bin/bash
user (){
printf "
+----------------------------------------------------------------------------+
|                            自动创建用户小程序                 |
|    1.请在如下的提示中输入用户名前缀,用户密码,用户数量。例如:ren 123 5   |
|    2.按q退出                                         |
|    3.按h提供帮助信息                                                       |
|                    制作者:wolf_coder                 |
+----------------------------------------------------------------------------+
"
}
clear
user
while true
do    
    echo -en "\033[34m请输入用户前缀、密码及数量: \033[0m"
    read name pass num
    if [ "$name" == "q" ];then
        break
        user 
    elif [ "$name" == "h" ];then
        user
        continue
    elif [ -z "$name" -o -z "$pass" -o -z "$num" ];then
        echo -en "\033[35m请输入q退出,h帮助,或输入正确格式!\033[0m\n"
        continue
    else
        echo -en "\033[35m请输入q退出,h帮助,或输入正确格式!\033[0m\n"
        continue
    fi    
    for i in `seq -w $num`
    do
        useradd $name$i &>/dev/null
        if [ $? -eq 0 ];then
            echo "$name$i is created."
        else
            echo "useradd: user $name$i already exists"
        fi
        echo $pass | passwd --stdin $name$i &>/dev/null
    done
done

三、搭建跳板机脚本

#!/bin/bash
trap "" HUP INT QUIT
web1=192.168.64.6
web2=192.168.64.7
mysql=192.168.64.10
menu () {
printf "
+------------------------------------------------------------+
|    `echo -en "\033[33m请输入你要登录管理的主机\033[0m"`                             |
|        1.web1                                         |
|        2.web2                         |
|        3.mysql
|        4.管理员入口                     |
|    `echo -en "\033[36m1904班研发跳板机应用程序\033[0m"`                             |
+------------------------------------------------------------+
"
}
while true
do
clear
menu
echo -en "\033[31m请输入你要登录主机编号:\033[0m"
read num
    case $num in 
    1)
        ssh $web1;;
    2)
        ssh $web2;;
    3)
        ssh $mysql;;
    4)
        read -s -p "请输入操作密码:" pass
        pre_pass=`cat /root/.pass`
        if [ $pass -eq $pre_pass ];then
            break
        fi
        ;;
    *)
        echo "请输入正确编号!"
    esac
done

trap用法:

  脚本程序是从上到下的顺序解释执行的,所以必须在你想保护的那部分代码以前指定tarp命令。

一、tarp捕捉到信号之后,可以有三种反应方式:

  1)执行一段程序来处理这一信号;

  2)接受信号的默认操作;

  3)忽视这一信号。

二、tarp对上面三种方式提供了三种基本形式:

  tarp命令的参数分为两部分,前一部分时接收到指定信号时将要采取的行动,后一部分是要处理的信号名。tarpcommand signal

  1)第一种形式的tarp命令在shell接收到signal list清单中数值相同的信号时,将执行双引号中的命令串。

    trap 'commands' signal-list

    tarp "commands" signal-list

  2)tarp不指定任何命令,接受信号的默认操作,默认操作是结束进程的运行。

    tarp signal-list

  3)trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种。

    trap " " signal-list

三、kill -l 可以列出系统的信号名称

[root@s2 ~]# kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    

  通常我们需要忽略的信号有四个,即:HUP, INT, QUIT, TSTP,也就是信号1, 2, 3, 24 

  使用这样的语句可以使这些中断信号被忽略: 

  trap "" 1 2 3 24 或 trap "" HUP INT QUIT TSTP 

  用 trap 1 2 3 24trap HUP INT QUIT TSTP使其回复默认值。 

  用stty -a可以列出中断信号与键盘的对应:

[root@controller ~]# stty -a
speed 38400 baud; rows 27; columns 74; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

  tail -f /etc/passwd, 然后尝试用键盘中断,试试两种情况(默认和忽略)

信号说明:

信     号      说     明
HUP(1)        挂起,通常因终端掉线或用 户退出而引发
INT(2)        中断,通常因按下 Ctrl+C组合键而引发
QUIT(
3)       退出,通常因按下 Ctrl+\组合键而引发 ABRT(6)       中止,通常因某些严重的执 行错误而引发 ALRM(14)      报警,通常用来处理超时 TERM(15)      终止,通常在系统关机时发 送

 

posted @ 2019-11-13 22:03  Wolf_Coder  阅读(1008)  评论(0编辑  收藏  举报