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

浙公网安备 33010602011771号