bash脚本
1 写一个脚本,当磁盘使用率超过85%时向系统管理员发送告警信息
#!/bin/bash
df -H |grep -vE '^Filesystem|tmpfns|dirctry'|awk '{print $5""$1}' | while read outputstr;
do
echo $outputstr
usep=$(echo $outputstr | awk '{print $1}'|cut -d '%' -f1 )
partition_nm=$(echo $outputstr | awk '{print $2}')
if [ $usep -ge 85 ];then
echo "Very little space \"$partition_nm($usep%)\" on $(hostname) as on $(date)" | mail -s "Alert: Oh no, you are running out of disk space $usep%" admin@servername.com
fi
done
2 编写一个脚本统计文件拥有者是当前用户的文件里面总共有多少行
#!/bin/bash
if [ $# -lt 1 ]
then
echo "$0 file ..."
fi
echo "$0 counting the lines of code"
lvar=0
nvar=0
svar=0
for fvar in $*
do
if [ -O $fvar ]
then
lvR=`wc -l $fvar|sed 's/^\([0-9]*\).*$/\1/'`
echo "$fvar:$l"
nvar=$[$nvar + 1]
svar=$[$svar + $lvar ]
else
continue
if
done
echo "$nvar files are ther in total, with total $svar lines"
3 编写一个脚本绘制一个特殊图形
#!/bin/bash
Max_Var=0
echo -n "Input a Number between(5 to 11): "
read Max_Var
if ![ $Max_Var -ge 5 -a $Max_Var -le 11 ];then
echo "The number has to be between 5 and 11, Tru Again"
exit 1
fi
clear
for ((ivar=1;ivar<=Max_Var;ivar++))
do
for ((svar=Max_Var;svar>=ivar;svar--))
do
echo -n " "
done
for ((jvar=1;jvar<=ivar;jvar++))
do
echo -n "*"
done
echo ""
done
for ((ivar=Max_Var;ivar>=1;ivar--))
do
for((svar=ivar;svar<=Max_var;svar++))
do
echo -n " "
done
for ((jvar=1;jvar<=ivar;jvar++))
do
echo -n "*"
done
echo ""
done
4 编写一个监控内存使用率的脚本
#!/bin/bash
while [ true ];do
used=`free -m|awk 'NR==3 {print $4}'`
if [ $used -lt 800 ] && [ $used -gt 600 ];then
echo "Free memory is below 800MB. Possible memory leak!!!"| /bin/mail -s "HIGH MEMORY ALERT!!!" myuser@mydomain.com
fi
sleep 5
done
5 编写一个删除空白文件的脚本
#!/bin/bash
if [ x"$1"="x" ];then
echo -n "Please enter directory where you want to delete empty folders:"
while read dir
do
test -z "$dir" && {
echo -n "Please enter directory:"
continue
}
break
done
else
dir=$1
fi
if [ !-d $dir ];then
echo "Directory does not exist"
exit 1
fi
MyDirList=/tmp/mydirlist.tmp
find $dir -type -d > $MyDirList
mydirs=`cat $MyDirList`
for dir in $mydirs
do
[ `ls $dir|wc -l` lt 1 ]||continue
echo -n "Shall I remove the empty directory $dir:[No/yes]"
read myanswer
case:
if [ "$myanswer"="yes" ];then
rmdir "$dir"
fi
done
输出的例子
Shall I remove empty directory /tmp/test/testDir1: [No/yes] yes
Shall I remove empty directory /tmp/test/testDir3/testDir5: [No/yes] yes
6 编写一个脚本获取内核版本信息
#!/bin/bash
myserverlistvar='my_server_list.txt'
myservervar=`cat $myserverlistvar`
myresultvar='myresult.txt'
echo -e "Servername \t\t kernel version" > $myresultvar
for server in $myserversvar
do
kernel='ssh root@${server} "uname -r"'
echo -e "$server \t\t $kernel" >> $myresultvar
done
My_server_list.txt文件的内容
mydev
myweb1
mysvn
7 如何创建一个脚本,等待特定的输出获取用户的输入,再根据输入执行特定的操作。例如:提示“username:”时输入用户名
Linux提供了一个名为expects的命令,可以实现这种交互的输入操作。
8 当你想要为你脚的本添加日志功能,例如将"MyCoolScritp"脚本的日志信息发送到/var/log/message中去。
如果你想要写入消息到/var/log/messags文件中,你可以使用日志工具命令syslogdapi来将信息发送到文件中
logger -t MyCoolScript Starting Application....
9 使用perl语言写一个命令在服务器上打印出所有的IP、广播地址、子网掩码等等配置信息,一行一项
首先你需要用ifconfig来获取到这些IP信息,然后再逐行的获取需要的信息
ifconfig -a | perl -n -l -e '/addr:([^].+)/ and print $1'
10 编写脚本,实现检查一个通过传参输入的文件它是否有写的权限,如果有就输出“有写权限”,否则输出“没有写权限”
#!/bin/bash
filename=$1
if [ -w $filename ]
then
echo "有写权限"
else
echo "没有写权限"
fi
11 你有一个bash脚本,但是它运行时没有达到预期的效果,你该如何调试它?
要调试一个bash脚本,需要在脚本指定解释器的第一行加入-x参数
#!/bin/bash -x
12 编写一个脚本,该脚本将遍历系统上的所有用户并写入用户的最后登录日期。如果该用户没有最后登录的信息,则写入“No data for ”。
#!/bin/bash
for i in `cat /etc/passwd|awk -F : '{print $1}'`;
do
last=`last $i|head -n 1`;
if [ "$last" != ""];
then
echo `last $i|head -n 1`;
else
echo "No data for $i"
fi
done
13 检测你在Linux shell中常用的命令有那些
通过history命令获取使用过的命令,再将其进行排序
history|awk '{h[$2]++}END{for(c in h){print h[c]" "c}}'|sort -nr|head
14 写一个脚本访问 http://www.whatismyip.org 和输出“Your IP is:\”
#!/bin/bash
ip='links --source http://www.whatismyip.org'
echo -n "Your IP is:"
echo $ip
15 编写一个bash的小型计算器的脚本,里面有一个函数dosomething可以实现根据输入的简单四则运算公式(如:4+4*4)输出结果。
#!/bin/bash
function dosomething
{
echo "${1}"|bc -l;
}
dosomething $1
16 创建一个名为KillUserProcs.sh的脚本,该脚本在运行时获取一个用户名的输入后,删除该用户的全部进程。
#!/bin/bash
kill -9 `ps aux|awk -v var=$1 '$1==var {print $2}'`