1 输入YES打印
INPUT=$1 if [ $INPUT == "YES" ];then echo "Please install LAMP." else echo "Please exit." fi
2 创建用户修改密码并输入到文件中
#!/bin/bash #auto modify user passwd #by author chy for i in 1 2 3 4 5 do useradd chy_$i echo "m_pwd_$i"|passwd --stdin chy_$i echo "用户名/密码:"chy_$i m_pwd_$i >>/tmp/user_list.txt done
3 在上一条命令的基础上循环修改密码
[root@192 sh]# more for_user.sh #!/bin/bash #auto modify user passwd #by author chy for i in chy_1 chy_2 chy_3 chy_4 chy_5 do echo "m_pwd"|passwd --stdin $i echo "用户名/密码:"chy_$i m_pwd >>/tmp/user_list2.txt done 注:echo "m_pwd"|passwd --stdin root //修改root密码
4 求和1-100
#!/bin/sh #auto add 1-100 j=0 for ((i=1;i<=100;i++)) do j=`expr $i + $j` done echo $j
5 找到相关log,然后批量打包
[root@192 sh]# more log.sh #!/bin/sh #auto tar log for i in ` find /var/log -name "*.log" ` do tar -cPzf 2016log.tgz $i echo "压缩" $i done echo "压缩完毕"
6 远程主机批量传输文件,可以用在设置密钥上
[root@192 sh]# more scp.sh #!/bin/sh #auto scp files for client #by authors chy 2016 for i in 131 135 do scp /root/test.txt root@192.168.57.$i:/root done
7 批量传输,可实现批量部署
[root@192 sh]# more while.sh #!/bin/sh while read i do IP=`echo $i|awk '{print $1}'` DIR=`echo $i|awk '{print $2}'` DES=`echo $i|awk '{print $3}'` echo scp -r $DIR/* root@$IP:$DES/ done < test.txt
8 while逐行读取某个(/etc/hosts)文件
[root@192 sh]# more read.sh #!/bin/sh while read line do echo $line; done < /etc/hosts
9 until条件判断数字
[root@192 sh]# more until.sh #!/bin/sh a=$1 until [[ $a -lt 0 ]];do #until [[ $a -lt 0 ]];do echo $a; ((a--)); done;
10 打包日志文件
[root@192 sh]# more auto_log_tgz.sh #!/bin/bash #auto log packages #by chy 20161130 LOGS_DIR="/var/log/" for i in `find $LOGS_DIR -name "secure-*"` do FILES=`echo $i|xargs basename` DIR=`echo $i|xargs dirname` cd $DIR echo "The tar -czPvf $FILES.tar.gz $FILES" tar -czPvf $FILES.tar.gz $FILES rm -rf $FILES done
11远程执行命令
#!/bin/sh CMD=$* FILES=/data/sh/test.txt if [ -z “$CMD” ];then echo -e "\033[32mUsage:{Please enter $0 CMD df-h|ifconfig ehto} \033[0m" exit fi for i in `cat $FILES` do echo -e "\033[32m-------------\033[0m" echo -e "\033[32mssh -l root $i $CMD\033[0m" ssh -l root $i "$CMD" done 远程执行命令脚本 [root@192 sh]# cat cat_List.sh #!/bin/sh ##sed有变量要用双引号 CMD=$* FILES=/data/sh/test.txt #####判断是否有命令输入######## if [ -z "$CMD" ];then echo -e "\033[32mUsage:{Please enter $0 IP and CMD df-h|ifconfig ehto} \033[0m" exit fi ########判断如果输入ip######### NUM=`echo $1|sed 's/\./\n/g'|wc -l` if [[ $NUM == 4 ]];then CMD=`echo $*|sed "s/$1//g"` echo -e "\033[32m$1\033[0m" ssh -l root $1 "$CMD" exit fi ############执行远程命令####3 for i in `cat $FILES` do echo -e "\033[32m-------------\033[0m" echo -e "\033[32mssh -l root $i $CMD\033[0m" ssh -l root $i "$CMD" done
12 read---可以传值
root@192 sh]# more read-p.sh #!/bin/sh read -p "Please enter a number:" NUM echo $NUM [root@192 sh]# ./read-p.sh Please enter a number:i love you i love you
13 while
小于10时一直输出 #!/bin/sh i=1; while [[ $i -lt 10 ]]; do echo $i; #((i++)); i=`expr $i + 1` done; 循环打印 [root@192 sh]# more while.sh 无限循环 #!/bin/sh i=1; while true; do echo $i; done; 执行命令并将命令输入到文本 #!/bin/sh while read i do echo ssh -l root $i 'df -h;ifconfig' done < test.txt
14 case条件打印菜单
[root@192 sh]# more case.sh #!/bin/sh #i=$1 read -p "Please Enter A OS system[centos|redhat|windows]:" i case $i in centos) echo "The OS System is $i" ;; redhat) echo "The OS System is $i" ;; windows) echo "The OS System is $i" ;; *) echo "The OS System is MAC" ;; esac
15 select打印菜单
#!/bin/sh PS3="What you like most of the open source system?" select i in CentOS RedHat Ubuntu do echo "Your Select System: "$i done 输出: [root@192 sh]# ./select.sh 1) CentOS 2) RedHat 3) Ubuntu What you like most of the open source system?1 Your Select System: CentOS What you like most of the open source system?2 Your Select System: RedHat What you like most of the open source system?3 Your Select System: Ubuntu What you like most of the open source system?
16 判断ip输入是否正确
[root@192 ~]# echo 192.168.57.132 |awk -F . '$1<=255&&$2<=255&&$3<=255&&$4<=255 {print $0}' 192.168.57.132
17 find
find 之-type f/d 类型是文件或者目录 [root@192 sh]# find / -name httpd.conf -type f /etc/httpd/conf/httpd.conf /usr/lib/tmpfiles.d/httpd.conf xargs将find找到的文件进行删除 \;——对应find {}——对应find的内容 [root@192 ~]# find /root/ -name "httpd.conf" |xargs rm -rf {} \; exec找到目录并删除 find /tmp/* -type d -exec rm -rf {} \; exec将find找到的内容进行复制 [root@192 ~]# find /etc/ -name "httpd.conf" -exec cp {} /root/ \; [root@192 sh]# for i in `find /etc/ -name "httpd.conf"`;do cp $i /root ;done exec——mv [root@192 ~]# find /root/ -name httpd.conf -exec mv {} /tmp \; find找到大于4M的文件 [root@192 ~]# find /root/ -type f -size +4M /root/download /root/root@192.168.57.132 /root/test.img find找到大于4M的文件并打包 [root@192 ~]# find /root/ -type f -size +4M -exec tar czPvf 2016.tar.gz {} \; find查找mtime100天以前创建的文件 [root@192 ~]# find /root/* -type f -mtime +100 /root/mysql-community-release-el7-5.noarch.rpm log中-大小size 时间mtime 权限 perm 剔除某个文件! -name [root@192 log]# find . -name "messages-*" -size +500k -mtime +1 ! -name "messages-20161129" -perm 755 ./messages-201611222 find找到一级目录名称 [root@192 ~]# find . -maxdepth 1 -type d ! -name -除去. 当前目录 sed-替换 [root@192 ~]# find . -maxdepth 1 -type d ! -name "." |sed "s/.\///g" .ssh g
18 sed
a 替换 将zabbix替换为mocha [root@192 ~]# sed -i 's/zabbix/mocha/g' passwd i-打印预览,没有i的话只打印不输入,可进行调试 1-3行将lib替换为mocha 没有g只替换1行,1-替换第一个,2-替换第2个 [root@192 ~]# sed -i '1,3s/lib/mocha/g' passwd b 查找 n -找到指定这一条 p-打印,p放在外面里面都可以 , -1到3行 ;-1和3行 [root@192 ~]# df -h|sed -n '/sda1/p' /dev/sda1 497M 125M 373M 25% /boot [root@192 ~]# df -h|sed -n '/sda1'/p /dev/sda1 497M 125M 373M 25% /boot [root@192 ~]# df -h|sed -n '1,2p' 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 18G 4.1G 14G 24% / [root@192 ~]# df -h|sed -n '1p;2p' 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 18G 4.1G 14G 24% / a -下一行添加,只在sed里生效,a后面可以有空格也可以没有空格,匹配到/home/ [root@192 ~]# sed '/home/aMy name is chy,you can do it' passwd rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin mocha:x:1000:1000::/home/mocha:/sbin/nologin My name is chy,you can do it ntp:x:38:38::/etc/ntp:/sbin/nologin i-上一行添加 [root@192 ~]# sed '/home/iMy name is chy,you can do it' passwd rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin My name is chy,you can do it mocha:x:1000:1000::/home/mocha:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin ^ -开头 & -添加 $ -结尾 [root@192 ~]# sed 's/^ntp/& you can do it/g' passwd rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin mocha:x:1000:1000::/home/mocha:/sbin/nologin ntp you can do it:x:38:38::/etc/ntp:/sbin/nologin [root@192 ~]# sed 's/ntp$/& you can do it/g' passwd rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin mocha:x:1000:1000::/home/mocha:/sbin/nologin ntp:x:38:38::/etc/ntp:/bin/ntp you can do it 找到/结尾的 [root@192 ~]# df -h |sed -n '/\/$/p' /dev/mapper/centos-root 18G 4.1G 14G 24% / 找到后面是/的,将G去掉,将%去掉 [root@192 ~]# df -h |sed -n '/\/$/p'|sed 's/G//g'|sed 's/%//g' /dev/mapper/centos-root 18 4.1 14 24 / 合并sed后,用; [root@192 ~]# df -h |sed -n '/\/$/p'|sed 's/G//g;s/%//g' /dev/mapper/centos-root 18 4.1 14 24 / 或者,用e [root@192 ~]# df -h |sed -n '/\/$/p'|sed -e 's/G//g' -e 's/%//g' /dev/mapper/centos-root 18 4.1 14 24 / 在文件的每一行末尾加you can do it/g [root@192 ~]# sed 's/$/& you can do it/g' aa.txt rpc you can do it rpcuser you can do it nfsnobody you can do it mocha you can do it ntp you can do it 在文件的每一行开头加you can do it/g [root@192 ~]# sed 's/^/& you can do it/g' aa.txt you can do itrpc you can do itrpcuser you can do itnfsnobody you can do itmocha you can do itntp 查找ip ifconfig|grep "inet"|sed '2,$d'|awk -F: '{print $2}'|awk '{print $1}' [root@test1 ~]# ifconfig|grep "inet" inet addr:10.8.202.162 Bcast:10.8.202.255 Mask:255.255.255.0 inet6 addr: fe80::c8c9:b6ff:fe78:1a09/64 Scope:Link inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host] [root@test1 ~]# ifconfig|grep "inet"|sed '2,$d' //sed的意思是删除第二行到最后一行 inet addr:10.8.202.162 Bcast:10.8.202.255 Mask:255.255.255.0
19 awk
awk NR 当前行数,从1开始 $0 当前记录 $1~$n 当前记录第n个字段 [root@192 ~]# cat aa.txt |awk 'NR==1 {print $0}' rpc 1 [root@192 ~]# cat aa.txt |awk 'NR==1 {print $1}' rpc [root@192 ~]# cat aa.txt |awk '{print $1}' rpc rpcuser nfsnobody mocha ntp NF 当前记录字段个数 (NF-1) [root@192 ~]# more aa.txt rpc 1 you can do it rpcuser 2 you can do it nfsnobody 3 you can do it mocha 4 you can do it ntp 5 you can do it [root@192 ~]# cat aa.txt |awk ' {print $NF}' it it it it it [root@192 ~]# cat aa.txt |awk ' {print $(NF-1)}' do do do do do ^it 匹配it开头的 [root@192 ~]# cat aa.txt |awk '/it/' rpc 1 you can do it rpcuser 2 you can do it nfsnobody 3 you can do it mocha 4 you can do it it 5 you can do it [root@192 ~]# cat aa.txt |awk '/^it/' it 5 you can do it 查找tcp开头的,打印最后一个域 [root@192 ~]# netstat -an|awk '/^tcp/ {print $NF}' LISTEN ESTABLISHED LISTEN LISTEN LISTEN 打印长度大于10的 [root@192 ~]# cat passwd |awk 'length($0)>10 {print}' rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin mocha:x:1000:1000::/home/mocha:/sbin/nologin ntp:x:38:38::/etc/ntp:/bin/ntp [root@192 ~]# cat passwd |awk 'length($0)>10 {print NR}' 1 2 3 4 5 tail -3 最后三行 [root@192 ~]# more passwd rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin mocha:x:1000:1000::/home/mocha:/sbin/nologin ntp:x:38:38::/etc/ntp:/bin/ntp [root@192 ~]# awk -F: '{print $1}' passwd|tail -3 nfsnobody mocha ntp
20 grep
grep -匹配 [root@192 ~]# grep --color mocha passwd rpc:x:32:32:Rpcbind Daemon:/var/mocha/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/mocha/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/mocha/nfs:/sbin/nologin mocha:x:1000:1000::/home/mocha:/sbin/nologin ^mocha开头 [root@192 ~]# grep ^mocha passwd mocha:x:1000:1000::/home/mocha:/sbin/nologin i-不区分大小写 [root@192 ~]# grep -i --color can aa.txt rpc 1 you can do it rpcuser 2 you can do it nfsnobody 3 you can do it mocha 4 you can do it it 5 you can do it YOU CAN DO IT n-打印行号 [root@192 ~]# grep --color -in mocha aa.txt 4:mocha 4 you can do it v-反向选择 [root@192 ~]# grep --color -v can aa.txt YOU CAN DO IT 不区分大小写,取反 [root@192 ~]# ls -l|grep -vi ^- 总用量 28180 drwxr-xr-x. 3 root root 35 11月 30 15:22 g grep+awk结合,cut截取 [root@192 ~]# more aa.txt |grep broadcast|awk '{print $2}' addr:192.168.57.131 [root@192 ~]# more aa.txt |grep broadcast|awk '{print $2}'|cut -d: -f1 addr [root@192 ~]# more aa.txt |grep broadcast|awk '{print $2}'|cut -d: -f2 192.168.57.131 [root@192 ~]# grep -v反相选择 [root@192 ~]# ifconfig |grep inet|awk '{print $2}'|cut -d: -f2|grep -v "127" 192.168.57.131 [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep [root@192 ~]# cat aa.txt |grep [yY]ou [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和 匹配三个数字的 [root@192 ~]# cat aa.txt |grep [0-5][0-5][0-9] inet addr:192.168.57.131 netmask 255.255.255.0 broadcast 192.168.57. 大小写一起匹配 [root@192 ~]# cat aa.txt |grep [Aa-zZ] grep-E {6} 重复执行某条命令6次,或者: \{6\} 重复执行某条命令 [root@192 ~]# grep -E "^[a-z]{6}" aa.txt rpcuser 2 you can do it nfsnobody 3 you can do it [root@192 ~]# grep "^[a-z]\{6\}" aa.txt rpcuser 2 you can do it nfsnobody 3 you can do it 匹配6和7,建议使用grep-E [root@192 ~]# grep -E "^[a-z]{6,7}" aa.txt rpcuser 2 you can do it nfsnobody 3 you can do it 匹配IP [root@192 ~]# grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" aa.txt inet addr:192.168.57.131 netmask 255.255.255.0 或者()将重复的东西作为一个变量 [root@192 ~]# grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" aa.txt inet addr:192.168.57.131 netmask 255.255.255.0 broadcast 192.168.57 /(../) 标记匹配字符,如'/(love/)',love被标记为1 [root@192 ~]# grep "\(rpc\)" aa.txt rpc 1 you can do it rpcuser 2 you can do it <>严格匹配 [root@192 ~]# grep "\<rpc\>" aa.txt rpc 1 you can do it c-统计 [root@192 ~]# grep -c "you" aa.txt 5 r.c-查找三个字符的,开头是r,结尾是c的 [root@192 ~]# grep "r.c" aa.txt rpc 1 you can do it rpcuser 2 you can do it [root@192 ~]# ^$-查找空格 [root@192 ~]# grep "^ss$" aa.txt ss [root@192 ~]# grep "^$" aa.txt A-下面三行打印 B—上面三行打印 c-上下三行 看日志会有用 [root@192 ~]# grep -B 3 "111" aa.txt mocha 4 you can do it it 5 you can do it YOU CAN DO IT 111 [root@192 ~]# grep -A 3 "111" aa.txt 111 inet addr:192.168.57.131 netmask 255.255.255.0 broadcast 192.168.57. 10.10.168.162 1.1.1.1 [root@192 ~]# grep -A 3 -B 3 "111" aa.txt mocha 4 you can do it it 5 you can do it YOU CAN DO IT 111 inet addr:192.168.57.131 netmask 255.255.255.0 broadcast 192.168.57. 10.10.168.162 1.1.1.1 [root@192 ~]# grep -C 3 "111" aa.txt 查找111这个配置在那个文件中 [root@192 test]# grep -ra "111" * a:111 aa.txt:111 脚本: 备份脚本---链接 更新 获取cpu [root@192 test]# cat /proc/cpuinfo|grep "physical id"|sort |uniq -c|wc -l 1 获取磁盘大小,注意修改参数 [root@192 test]# fdisk -l|grep "^Disk"|grep -v "lab"|grep -v "iden"|awk '{sum+=$3}END {print sum}' 21.3