shell常用脚本

1、创建10个文件

#!/bin/sh
for f in `seq 10`
do
    [ ! -d /oldboy ] &&  mkdir -p /oldboy
    touch /oldboy/oldboy-$f
done

注:简单用命令可以创建touch oldboy-{1..10} 


2、投机(修改十个文件名字针对上面的文件)
#!/bin/sh
for f in `seq 10`
do
    [ ! -d /oldboy ] &&  mkdir -p /oldboy
    mv /oldboy/oldboy-$f /oldboy/linux-$f
done


3、将十个文件统一改成linux

#!/bin/sh
[ -d /oldboy ] && cd /oldboy
for f in `ls linux*`
do
    mv $f `echo $f|sed 's#linux#oldboy#g'`
done

注:简单用命令更改rename oldboy linux *oldboy*


4、将文件后缀改成大写

#!/bin/sh
for f in `ls *.html`
do
    mv $f `echo $f|sed 's#html#HTML#g'`

done
注:rename HTML jsp /server/scripts/*HTML

5、批量创建10账户和密码

#!/bin/sh
for i in `seq -w 10`
do
    useradd oldboy$i && echo "oldboy$i"|passwd --stdin oldboy$i
    
done
执行结果:

[root@localhost scripts]# sh 03.sh
更改用户 oldboy01 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy02 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy03 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy04 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy05 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy06 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy07 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy08 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy09 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 oldboy10 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost scripts]# su - oldboy01
[oldboy01@localhost ~]$ su oldboy02
密码:
su: 鉴定故障
[oldboy01@localhost ~]$ su oldboy02
密码:
[oldboy02@localhost oldboy01]$ su root
密码:
6、建立十个用户和随机密码并且可以正常登陆

#!/bin/sh
rm -f /tmp/user.log
for i in `seq -w 26 30`
do
    pass=`echo $RANDOM|md5sum|cut -c 1-8`    
    useradd oldboy$i && echo "echo $RANDOM|md5sum|cut -c 1-8"|passwd --stdin oldboy$i
    echo -e "user:oldboy$i \t pass:$pass" >>/tmp/user.log
    
done

7、企业实战查看局域网内的IP存活

#!/bin/sh

for n in `seq 254`
do
    ping -c2 49.5.6.$n >/dev/null 2>&1
    if [ $? -eq 0 ]
      then
        echo "49.5.6.$n is up " >>/tmp/uplist.log
    else
        echo "49.5.6.$n is down" >>/tmp/downlist.log

    fi

done
8、解决DOS攻击,每个IP大于25次以上的给予丢弃

#!/bin/sh
while true
        do
        awk '{print $1}' 12.log |sort|uniq -c |sort -n >/tmp/tmp.log

        exec </tmp/tmp.log
        while read line
        do
           ip=`echo $line|awk '{print $2}'`
           count=`echo $line|awk '{print $1}'`
             if [ $count -gt 25 ] && [ `iptables -L -n|grep "$ip"|wc -l` -lt 1 ]
              then
               iptables -I INPUT -s $ip -j DROP
               echo "$line is dropped">>/tmp/droplist.log
             fi
        done
        sleep 5
done
9、根据网络连接数过滤

#!/bin/sh
while true
        do
        #awk '{print $1}' 12.log |sort|uniq -c |sort -n >/tmp/tmp.log
        grep EST a.log |awk -F '[ :]+' '{print $6}'|sort|uniq -c >/tmp/tmp.log
        exec </tmp/tmp.log
        while read line
        do
           ip=`echo $line|awk '{print $2}'`
           count=`echo $line|awk '{print $1}'`
             if [ $count -gt 25 ] && [ `iptables -L -n|grep "$ip"|wc -l` -lt 1 ]
           #if [ `echo $line|awk '{print $1}'` -gt 25 ]
              then
               iptables -I INPUT -s $ip -j DROP
               #iptables -I INPUT -s `echo $line|awk '{print $2}'` -j DROP
               echo "$line is dropped">>/tmp/droplist.log
             fi
        done
        sleep 5
done
10、mysql数据库分库备份

#!/bin/sh
MYUSER=root
MYPASS=oldboy123
SOCKET=/data/3306/mysql.sock
MYCMD="mysql -u$MYUSER -p $MYPASS -S $SOCKET"
MYDUMP="mysqldump -u$MYUSER -p $MYPASS -S $SOCKET"
for database in oldboy ff dd
do
  $MYDUMP $database|gzip >/server/backup/${database}_$(date +%F).sql.gz
done
根据循环进行分库备份数据库

#!/bin/sh
MYUSER=root
MYPASS=oldboy123
SOCKET=/data/3306/mysql.sock
MYCMD="mysql -u$MYUSER -p $MYPASS -S $SOCKET"
MYDUMP="mysqldump -u$MYUSER -p $MYPASS -S $SOCKET"

for database in `$MYCMD -e "show databases;"|sed '1,2d'|grep -v "mysql|schema"`
do
  $MYDUMP $database|gzip >/server/backup/${database}_$(date +%F).sql.gz
done
按表进行分库分表备份

#!/bin/sh
MYUSER=root
MYPASS=oldboy123
SOCKET=/data/3306/mysql.sock
MYCMD="mysql -u$MYUSER -p $MYPASS -S $SOCKET"
MYDUMP="mysqldump -u$MYUSER -p $MYPASS -S $SOCKET"

for database in `$MYCMD -e "show databases;"|sed '1,2d'|grep -v "mysql|schema"`
do
   mkdir /server/backup/${database} -p
   for table in `$MYCMD -e "show tables form $database;"|sed '1d'`
   do
      $MYDUMP $database $table|gzip >/server/backup/${database}/${database}_${table}_$(date +%F).sql.gz
   done
done
11、用bash for 打印下面这句话中不大于6的字幕?

I am oldboy teacher welcome to oldboy training class.

#!/bin/sh
for word in I am oldboy teacher welcome to oldboy training class.

do
  [ ${#word} -le 6 ] && echo $word

  #[ `echo $word|wc -L` -le 6 ] && echo $word
done
#########################################################   


#!/bin/sh

array=(I am oldboy teacher welcome to oldboy training class.)
for ((i=0;i<${#array[@]};i++))
do

  if [`expr lenngth"${array[i]}"` -le 6]
    then ${array[$i]}
  fi
done

#########################################################################################################
[root@localhost scripts]# echo "I am oldboy teacher welcome to oldboy training class."|awk '{for(i=1;i<=NF;i++)if(length($i)<=6)print $i}'

执行结果:
I
am
oldboy
to
oldboy
class.
12、打印51行里面的1 11 21 31 41 51

#!/bin/sh
for i in `seq 1 10 51`
do
   cat -n /server/scripts/13.log |sed -n "${i}p"
done
注:简单命令实现

cat -n 13.log |sed -n '1~10p'

1~10p“~”中间是步长

方法3:

#!/bin/sh

for ((i=1;i<=52;i=i+10))
do
  cat -n /server/scripts/13.log |sed -n "${i}p"
done
方法4:

 cat -n 13.log|awk '{if(NR%10==1)print $0}'

 13、删除建立的用户

#!/bin/sh

for i in $(cat /etc/passwd |grep /bin/bash | grep -v root |grep -v nagios |cut -d ":" -f1)
         do
             userdel -r $i
         done




posted @ 2017-11-09 16:25  狮子座713  阅读(184)  评论(0)    收藏  举报