41、写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个小于100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比预设数字大或者小。
42、写脚本,用来实现交换两个文件的文件名
43、找出文件中只有数字的行,grep,sed,awk,shell 任选其一
44、假如服务的输出日志是1.log,我要求每天归档一个,1.log第二天就变成1.log.1,第三天1.log.2, 第四天 1.log.3 一直到1.log.5。
45、写一个实时监控网络流量的脚本,提示:
/proc/net/dev 文件显示的数字就是网络总流量,单位是B(字节)。 可以用当前时刻的数字减去上一秒的数字来求出每秒的网络流量。单位根据实际情况显示为KB或者MB。 而实时显示,只能使用while 做死循环,而且显示结果要一直在屏幕的第一行,可以使用clear实现。
46、写一个shell脚本,把192.168.0.0/24网段在线的ip列出来。
47、写一个shell脚本,检查指定的shell脚本是否有语法错误,若有错误,首先显示错误信息,然后提示用户输入q或者Q退出脚本,输入其他内容则直接用vim打开该shell脚本。
48、写一个监控网站的脚本。发现不正常发邮件告警。每分钟检测一次。提示: 使用curl命令检测,根据结果判断。
49、三行变一行,
1
2
3
4
5
6
7
1 2 3
4 5 6
7
50、写一个脚本产生随机3位的数字,并且可以根据用户的输入参数来判断输出几组。 比如,脚本名字为 number3.sh。
执行方法:
bash number3.sh
直接产生一组3位数字。
bash number3.sh 10
插上10组3位数字。
思路:
可以使用echo $RANDOM获取一个随机数字,然后再除以10,取余获取0-9随机数字,三次运算获得一组。
41、
#!/bin/bash
#Auth: Cityzen Wang
#Script: Guess number
n=15
while :
do
read -p "please input a number: " m
a=`echo $m | sed 's/[0-9]//g'`
if [ -n "$a" ];then
echo "numbers only please"
else
if [ $m -eq $n ];then
echo "Correct"
continue
elif [ $m -lt $n ];then
echo "Input a larger one"
else
echo "Input a smaller one please"
fi
fi
done
echo "test"
这里的 echo 是配合 continue 使用,把 continue 编程 break,exit 测试一下,查看三者的区别。
42、
#! /bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-01
#Scripts: Change two files
function changefile() {
a=`ls $file1`
b=`ls $file2`
mv $file2 tmpfile
mv $file1 $file2
mv tmpfile $file1
}
while :
do
read -p "Please input two file: " file1 file2
if [ ! -e $file1 ] || [ ! -e $file2 ];then
echo "Two files must all exist!"
elif [ -d $file1 ] && [ -d $file2 ];then
changefile
exit
elif [ -f $file1 ] && [ -f $file2 ]; then
changefile
exit
else
echo "Can not change filename between Directory and File"
fi
done
43、
# egrep "^[^0-9]*[0-9][^0-9]*$" filename
#!/bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-02
#Scripts: Find line with only one number
a=`cat $1 | wc -l`
for i in `seq 1 $a`
do
n=`sed -n "$i"p $1 | grep -o '[0-9]\?' |wc -l `
if [ $n -eq 1 ]
then
sed -n "$i"p $1
fi
done
#!/bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-02
#Scripts: Show line with only one number
a=`cat -n $1 |grep -v -i '[a-z]'| awk '{print $1}'`
for i in $a
do
m=`awk "NR==$i" $1|wc -c`
if [ $m -eq 2 ]
then
echo "Line $i has only one number!"
awk "NR==$i" $1
fi
done
44、
#! /bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-02
#Scripts: Logrotate
function e_df()
{
[ -f $1 ] && rm -f $1
}
for i in `seq 5 -1 2`
do
i2=$[$i-1]
e_df /data/1.log.$i
if [ -f /data/1.log.$i2 ]
then
mv /data/1.log.$i2 /data/1.log.$i
fi
done
45、
#! /bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-04
#Scriptes: Monitoring Network Traffic real time.
while :
do
a=`cat /proc/net/dev | grep eth0| awk '{print $1}'| awk -F ':' '{print $2}'`
sleep 1
b=`cat /proc/net/dev | grep eth0| awk '{print $1}'| awk -F ':' '{print $2}'`
c=$[$b-$a]
clear
echo "Network Traffic is $c"
done
#! /bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-04
#Scriptes: Monitoring Network Traffic real time.
while :
do
eth=$1
RXfirst=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXfirst=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
sleep 1
RXlast=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXlast=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
clear
echo -e "\t RX `date +%k:%M:%S` TX"
RX=$[$RXlast-$RXfirst]
TX=$[$TXlast-$TXfirst]
if [ $RX -lt 1024 ];then
RX="${RX}B/s"
elif [ $RX -gt 1048576 ]; then
RX=$(echo $RX |awk '{print $1/1028576 "MB/s"}')
else
RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
fi
if [[ $TX -lt 1024 ]];then
TX="${TX}B/s"
elif [[ $TX -gt 1048576 ]];then
TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
else
TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
fi
echo -e "$eth \t $RX $TX "
done
46、
#!/bin/bash
#Auth: Cityzen Wang
#Date: 2017-05-04
#Scripts: Check ip
for i in `seq 1 10`
do
ping 192.168.32.$i |head -n2 > /tmp/ip.txt
a=`grep -i unreachable /tmp/ip.txt`
if [ -z "$a" ];then
echo "192.168.32.$i is reachable."
fi
done
47、
sh -n $1 2>/tmp/err
if [ $? -eq "0" ]
then
echo "The script is OK."
else
cat /tmp/err
read -p "Please inpupt Q/q to exit, or others to edit it by vim. " n
if [ -z $n ]
then
vim $1
exit
elif [ $n == "q" -o $n == "Q" ]
then
exit
else
vim $1
exit
fi
fi
48、
#!/bin/bash
url=http://www.apelearn.com
ip1=192.168.32.142
ip2=127.0.0.1
ip3=localhost
cop="--connect-timeout 3 -I"
check() {
curl $cop -x$1:80 $url 2>/dev/null > /tmp/curl.log
if [ $? != "0" ]
then
tag=1
else
code=`head -1 /tmp/curl.log |awk '{print $2}'`
if [ $code == "200" ]
then
tag=0
else
tag=2
fi
fi
if [ $tag != "0" ]
then
echo "$1 wrong"|mail -s apelearn_$1 312903444@qq.com 2>/dev/null
fi
}
check $ip1
check $ip2
check $ip3
49、
cat /tmp/1.txt | xargs -n 3 > /tmp/1.txt
50、
#!/bin/bash
get_a_num() {
n=$[$RANDOM%10]
echo $n
}
get_numbers() {
for i in 1 2 3; do
a[$i]=`get_a_num`
done
echo ${a[@]}
}
if [ -n "$1" ]; then
m=`echo $1|sed 's/[0-9]//g'`
if [ -n "$m" ]; then
echo "Useage bash $0 n, n is a number, example: bash $0 5"
exit
else
for i in `seq 1 $1`
do
get_numbers
done
fi
else
get_numbers
fi
#!/bin/bash
#Auth: Cityzen Wang
#Scripts: Echo random number
function get_number() {
n=$[$RANDOM%10]
}
function check_zero() {
if [ $n -eq 0 ]; then
n=$[$RANDOM%10]
fi
}
for i in `seq 1 $1`
do
get_number
check_zero
a=$[$n*100]
get_number
check_zero
b=$[$n*10]
get_number
check_zero
c=$[$a+$b+$n]
echo $c
done