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}'`