bash 基本技巧
来源:互联网 发布:淘宝互联网生态系统 编辑:程序博客网 时间:2024/05/21 10:20
整理汇总从网上、书上看到的bash脚本的基本技巧,实验记录。
1. select 语句与异常处理
修改/etc/hosts文件增加3条记录
127.0.0.1 server01.demo.com127.0.0.1 server02.demo.com127.0.0.1 server03.demo.com用ssh-keygen -t rsa 生产密钥,并用cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys发布
demo10.sh
#!/bin/bashservers=( "server01.demo.com" "server02.demo.com" "server03.demo.com" "QUIT")PS3="connect to the server?"select server in "${servers[@]}"; do if [[ -z $server ]]; then echo "select the number" continue fi if [[ $server == "QUIT" ]]; then echo "quit!" exit 0 fi echo "connect $server" ssh "$server"done
oliver@bigdatadev:~/_src/shell$ ./demo10.sh1) server01.demo.com 3) server03.demo.com2) server02.demo.com 4) QUITconnect to the server?1connect server01.demo.comWelcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic x86_64) * Documentation: https://help.ubuntu.com/*** 需要重启系统 ***Last login: Sun Jul 24 17:15:33 2016 from localhostoliver@bigdatadev:~$ exit注销Connection to server01.demo.com closed.connect to the server?4quit!oliver@bigdatadev:~/_src/shell$2. 配置文件、管道处理重复操作(管理多台机器)
#!/bin/bashservers=( "server01.demo.com" "server02.demo.com" "server03.demo.com")for server in ${servers[@]}; do ssh "$server" "$@"done
oliver@bigdatadev:~/_src/shell$ demo11.sh hostnamebigdatadevbigdatadevbigdatadevoliver@bigdatadev:~/_src/shell$
配置文件和管道
$@参数列表、sed 在每行开头增加服务器名、&并发执行,wait等待完成,用group提取输出
运行脚本是利用< servers.txt 实现输入,>output.txt输出
#!/bin/bashwhile read server; do ssh -n "$server" "$@" 2>&1 | sed "s/^/$server: /" &donewait
oliver@bigdatadev:~/_src/shell$ ./demo12.sh "vmstat 1 5" < servers.txt > output.txtoliver@bigdatadev:~/_src/shell$ grep "server01" < output.txtserver01.demo.com: procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----server01.demo.com: r b swpd free buff cache si so bi bo in cs us sy id wa stserver01.demo.com: 4 1 0 2114224 92244 1106820 0 0 85 53 76 283 2 1 97 1 0server01.demo.com: 2 0 0 2114252 92244 1106876 0 0 0 0 57 203 0 0 99 1 0server01.demo.com: 2 0 0 2114252 92244 1106876 0 0 0 0 55 172 0 1 99 0 0server01.demo.com: 2 0 0 2114252 92244 1106876 0 0 0 0 50 170 1 0 99 0 0server01.demo.com: 4 0 0 2114252 92244 1106876 0 0 0 0 44 159 0 1 99 0 0oliver@bigdatadev:~/_src/shell$在脚本中处理重定向文件输入
#!/bin/bashfile=$1shiftwhile read server; do ssh -n "$server" "$@" 2>&1 | sed "s/^/$server: /" &done <"$file"wait
oliver@bigdatadev:~/_src/shell$ ./demo13.sh servers.txt free: ssh: Could not resolve hostname : No address associated with hostnameserver02.demo.com: total used free shared buffers cachedserver02.demo.com: Mem: 4039084 1924268 2114816 14640 92376 1106892server02.demo.com: -/+ buffers/cache: 725000 3314084server02.demo.com: Swap: 3905532 0 3905532server03.demo.com: total used free shared buffers cachedserver03.demo.com: Mem: 4039084 1921456 2117628 14640 92376 1106892server03.demo.com: -/+ buffers/cache: 722188 3316896server03.demo.com: Swap: 3905532 0 3905532server01.demo.com: total used free shared buffers cachedserver01.demo.com: Mem: 4039084 1921192 2117892 14640 92376 1106892server01.demo.com: -/+ buffers/cache: 721924 3317160server01.demo.com: Swap: 3905532 0 3905532oliver@bigdatadev:~/_src/shell$3. 进程监控
#!/bin/bashfunction monitor{ pgrep -x $1 >/dev/null 2>&1 return $?}if monitor "httpd"; then status="up"else status="down"fiwhile [[ true ]]; do monitor "httpd" rc=$? if [[ $rc -eq 0 && $status != "up" ]]; then status="up" logger -t "my_monitor" "httpd is up." fi if [[ $rc -ne 0 && $status != "down" ]]; then status="down" logger -t "my_monitor" "httpd is down." fi sleep 10done4. rsync、tee和mail
使用rsync备份、tee输出到文件和管道、mail发邮件,{}将命令放在一起重定向输出。
#!/bin/bashTEMPFILE=/tmp/snashot.log.$${ echo "=== Rsync from /data/ to snapshot/: ${data}" mount -o rw, remount /dev/sdc rsync -av /data/ /snapshot/ rc=$? mount -o ro,remount /dev/sdc if [[ $rc -eq 0 ]]; then echo "=== Snapshot succeded: ${date}" SUBJECT="Snapshot report {Succeeded}: else echo "=== Snapshot failed with rc=$rc: ${date}: SUBJECT="Snapshot report {Failed}" fi} 2>&1 | tee $TMPFILE | logger -t "snapshot"iconv -f utf8 -t gb2312 $TMPFILE | mail -s "$SUBJECT" admin@example.com
0 0
- bash 基本技巧
- bash 基本技巧
- Bash技巧
- bash技巧
- Bash技巧
- Bash readline 使用技巧
- Bash 使用技巧
- Bash Shell使用技巧
- bash小技巧
- bash shell小技巧
- Bash 使用技巧
- bash shell应用技巧
- Bash 技巧一点点
- bash参数使用技巧
- bash一些技巧
- [原]bash一些技巧
- bash使用技巧
- Bash小技巧
- CodeForces 166C - Median
- 多重继承的二义性以及解决方法
- 海思HI35XX之----视频处理单元各通道间的关系
- 关于rtsp客户端接收数据、解码、处理性能的有关问题
- 模式的秘密——模板方法模式
- bash 基本技巧
- MySQL存储引擎--MyISAM与InnoDB区别
- C++中的<limits.h>和<climits>(C++基本数据类型的最值)
- 大话设计模式16----状态模式
- **JQUERY** jQuery效果
- HttpContext.Current.Cache 与HttpRuntime.Cache的区别
- View的滑动冲突解决方案
- jQuery选择器
- 自定义view仿支付宝密码输入框