check_cluster_web_status.sh
功能:
检查由10服务器组成的WEB集群中服务器是否在线,网站服务是否处于运行状态?
执行脚本时,可以设置要检查服务器的台数,和指定要检查的服务器的ip地址。不在线服务器的ip地址和不在线时的时间保存到文件/tmp/ser.txt里。并把信息显示到屏幕上,同时统计把不在线服务的台数。
#!/bin/bash
rpm -qa elinks || yum -y install elinks&>/dev/null
declare -a webip
read -p "请输入你要检查的服务器台数: " num
num=${num:=10}
for((i=1;i<=$num;i++))
do read -p "第个"$i"ip地址: " webip[$i]
done
sum=0
sum1=0
sum2=0
for((j=1;j<=`echo ${#webip[@]}`;j++))
do
ping -c1 ${webip[j]} &>/dev/null
if [ $?-ne 0 ] ;then
echo "${webip[j]} is not online"
echo "${webip[j]} notonline `date +%F-%T`">>/tmp/weberror.txt
let sum1++
else elinks --dump http://${webip[j]} &> /dev/null
if [ $? -ne 0 ] ;then
echo "${webip[j]} httpd isnot run"
echo "${webip[j]} notrun `date +%F-%T`">>/tmp/weberror.txt
let sum2++
fi
fi
sum=`expr $sum1 + $sum2`
done
echo "共有$sum个服务器不在服务状态"
正则表达式的课堂练习题 grep-lx.txt
1 显示文件中有字母或数字的行
grep "[a-Z0-9]" grep-lx.txt
2 显示文件中仅以一个空格开头的行
grep "^ [^ ]" grep-lx.txt
3 显示文件中以空格开头的行
grep "^ " grep-lx.txt
4 显示文件中有空格的行
grep " " grep-lx.txt
5 不显示文件中的空行
grep -v "^$" grep-lx.txt
6 显示文件中有tarena字样的行(不区分字母大写)
grep -i"tarena" grep-lx.txt
7 显示文件中以任意符号开头的行
grep "^[^a-Z0-9]" grep-lx.txt
8 显示httpd.conf文件里的有效行(没有注释符号和不是空行的的行)
grep -vE"^$|^#| #" /etc/httpd/conf/httpd.conf
9 统计/etc目录下有多少链接文件
ls -l /etc | grep "^l" | wc -l
10 显示文件中由任意3个字符组成的行
grep "^...$" grep-lx.txt
grep -E"^.{3}$" grep-lx.txt
11 显示文件中以3个数字开头的行
grep -E"^[0-9]{3}" grep-lx.txt
12 编写添加用户脚本时,使用password变量存储用户密码,
密码要求如下:
密码的总长度是8个字符 可以使用数字、字母、和下划线 但必须以数字 开头
#/bin/bash
read -p "请输入用户名: " username
read -p "请输入用户的密码(必须以数字开头的8位字符): "password
panduan(){
num=`echo $password | wc -c`
lenth=`expr $num - 1`
if [ $lenth -ne8 ]; then
echo"密码长度需要8位:"
exit
else
echo$password >/tmp/pass.txt
grep -E'^[0-9][a-Z0-9_]{7}$' /tmp/pass.txt &>/dev/null
if [ $?-ne 0 ] ;then
echo "密码可以用数字、字母、和下划线 但必须以数字开头"
exit
fi
fi
}
panduan $password
username=${username:?请输入用户名}
id $username &>/dev/null
if [ $? -eq 0 ];then
echo"$username 已存在"
exit
else
useradd$username
echo$password | passwd --stdin $username &>/dev/null
fi
~
13 显示文件中有root或daemon字样的行
grep -E"root|daemon" grep-lx.txt
14 编写匹配MAC地址的正则表达式
grep -E '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' mac.txt
15 编写匹配以下数据的正则表达式
IP地址 邮箱地址 主机名 ***号 手机号 区号
必做 必做 必做 可选 可选 可选
IP地址:grep --color -E \'^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$'
邮箱: grep --color -E “([a-Z0-9]+.)+@([a-z]+.)+[a-z]”
主机名:([a-Z0-9]+.)+|[a-z].|.
IP地址正则表达式:
'^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$'
sed练习题
1 删除文件中每行里的所有空格
Sed -i “s/ //g” a.txt
删除文件中的空行
Sed -i “/^$/d” a.txt
2 删除文件中每行的第一个空格
sed -r "s/^(.*$)/\1/" grep-lx.txt
3 给文件中的1-10加注释符#
Sed -r“1,10s/([.]*)/#\1/” a.txt
4 去掉文件中前5行的注释符#
sed -r"1,5s/^#([.]*)$/\1/" a.txt
5 给文件里的所有大写字母加小括号如 (A) (B)
sed -r "s/([A-Z])/(\1)/g" grep-lx.txt
6 把系统的运行级别修改为3 (若已经是3 就改为5)
sed "/id/s/[0-6]/5/" /etc/inittab
6.1 获取当前系统安装盘的名称
df -h |head -2 | tail -1| awk '{print $1}'
6.2 删除文件中的空行
Sed -i “/^$/d” a.txt
8 把文件里的每行输出3次
Sed “p,p,p” a.txt
9,删除文件每行的第一个字符。
sed -r"s/(^.)(.*)/\2/" grep-lx.txt
10,删除文件每行的第二个字符。
sed -r"s/(^.)(.)(.*)/\1\3/" grep-lx.txt
11,删除文件每行的最后一个字符
sed -r"s/(^.)(.*)(.$)/\1\2/" grep-lx.txt
12,删除文件最后一行倒数第二个字符。
sed -r "/$/s/(^.)(.)(.*$)/\1\3/"grep-lx.txt
13,删除文件最后一行倒数第二个单词。
sed -r "/$/s/(^.*)(.* )(.*$)/\1\3/" grep-lx.txt
14,交换文件最后一行的第一个单词和最后一个单词的位置。
sed -r "/$/s/(^.* )(.*)(.*$)/\3\2\1/" grep-lx.txt
15,删除文件每行里的所有数字。
sed -r"s/[0-9]//g" grep-lx.txt
16,只显示文件最后一行的第一个单词。
sed -r"/$/s/(^[a-Z]* )(.*$)/\1/" grep-lx.txt
17 复制文件中的2-5行到 第7行的下方 X
sed -r "2h;3,5H;7G" grep-lx.txt
18 剪切文件中的5-7行到 第9行的下方 X
sed -r "5h;6,7H;5,7d;9G" grep-lx.txt
19 删除文件所有有数字的行
sed "/[0-9]/d"grep-lx.txt
20 删除文件中每行里的数字
sed"/[0-9]/s/[0-9]//g" grep-lx.txt
21 给文件中每一行里的所有小写字母用小括号括起来
(a)A(b)C(f)F
sed -r "s/([a-z])/(\1)/g" grep-lx.txt
22 只删除文件里的偶数行
sed 'n;d' test.txt
23 不删除文件中有数字的行
sed '/[0-9]/!d'grep-lx.txt
24 把文件每一行里的每一个数字都替换为plj
sed -r 's/[0-9]/plj/g'grep-lx.txt
25 把文件每一行里的数字都替换为TARENA
sed -r 's/[0-9]/TARENA/g'grep-lx.txt
26 把文件每一行里的小写字母都修改为对应的大写字母
sed 's/[a-z]/\U&/g' grep-lx.txt
27 把文件含有数字行里的字母删除。
sed '/[0-9]/s/[a-Z]//g' text.txt
28 删除文件中有符号的行
Sed ‘/[^0-9a-Z]/d’ a.txt
29 删除文件中有root 或 daemon 字样的行
sed -r '/root|daemon/d' test.txt
30 把文件中所有在Ip地址,都修改为192.168.10.254 地址。
1,9*9乘法诀略
#!/bin/bash
for ((x=1;x<=9;x++))
do
for ((y=1;y<=$x;y++))
do
z=`expr $y \* $x`
echo -n " $y * $x = $z "
done
echo
Done
2,四则运算计算器
#!/bin/bash
sum(){
add=0
while [ $# -ge 1 ] ; do
add=`expr $add + $1`
shift
done
echo " The sum is $add "
}
cha(){
mun=$1
shift
while [ $# -ge 1 ] ; do
mun=`expr $mun - $1`
shift
done
echo " The cha is $mun "
}
shang(){
mun=$1
shift
while [ $# -ge 1 ] ; do
mun=`expr $mun \/ $1`
shift
done
echo " The shang is $mun "
}
cheng(){
mul=$1
shift
while [ $# -ge 1 ] ; do
mul=`expr $mul \* $1`
shift
done
echo " The ji is $mul "
}
read -p '请输入你要运算的类型:+ - * / :' X
case $X in
"+")
sum $*
;;
"-")
cha $*
;;
"*")
cheng $*
;;
"/")
shang $*
;;
*)
echo "你输入的计算类型错误,不是{+- * /}"
;;
esac
3,每5分钟检测系统跟目录的剩余空间,当剩余空间小于10G时想终端报警。
/bin/bash
let num=0
num=`df -k | head -2 | tail -1 | awk'{print $4}'` //df -h 结果可能是带小数的数值
num2=`expr 10 \* 1024 \* 1024`
if [$num -lt $num2 ]; then
wall "The root Available is lower 10G"
fi
cat <<eof >/var/spool/cron/root
*/5 * * * * root/tmp/homework3/check_root.sh
eof
4,编写脚本 backup_new_webpage.sh
每次执行脚本时,只备份网页目录下新产生的网页文件到目录/webbakdir里
!/bin/bash
cd /webbakdir 2>/dev/null ||mkdir /webbakdir
cd /var/www/html/
for i in `ls -l`
do
if [ ! -e /webbakdir/$i ];then
cp $i /webbakdir/
fi
done