运维常用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 24 或 trap 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) 终止,通常在系统关机时发 送