免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 912 | 回复: 0
打印 上一主题 下一主题

[转]bash脚本小集 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-08 16:50 |只看该作者 |倒序浏览

bash脚本小集(测试过的)
环境:
winxp+vm+centos4.3

1.shell写的进度指示条(旋转型):
#!/bin/sh
proc() {
    c0=’-’
    c1=’\’
    c2=’|’
    c3=’/’
    begin=$1
    end=$2
    row=$3
    pos1=`expr $begin + 1`
    pos2=`expr $begin + 5`
    printf "\033[2J"
    while [ $begin -le $end  ]; do
        index=`expr $begin % 4`
        pro=`echo "scale=0; ${begin}*100/$end" | bc`
        eval printf \"’\033[${row};${bos1}H$c’$index  ’$pro%%  ’\"
        begin=`expr $begin + 1`
    done
    echo "done"
}
# call subroutine
proc 0 102 20
1.1 shell写的进度指示条2(旋转型):
drawper ()
{
_per=`expr $1 \* 100 / $2`
case `expr $_per / 4 % 4` in
0) _char="|" ;;
1) _char="/" ;;
2) _char="-" ;;
3) _char="\\" ;;
esac
printf "\r$_char  $_per%%"
if [ $1 -eq $2 ];then
printf "\n"
fi
}
i=1
while [ $i -le 100 ]
do
drawper $i 100
i=`expr $i + 1`
done
1.2 shell写的进度指示条3(方块前进型):
#!/bin/sh
abort() {
    printf  "\033[m\n"
    exit
}
# do nothing, just simulate time consume.
idle() {
    i=1
    sum=`date +%S`
    sum=`expr $sum \* $sum | cut -b 1`
    sum=`expr $sum \* 10`
    while [ $i -le $sum ]; do
        i=`expr $i + 2 `
        trap abort  2
    done
}
proc() {
    begin=$1
    end=$2
    row=$3
    pos1=`expr $begin + 1`
    pos2=`expr $end - 1`
    mid=`echo "($begin+$end)/2-2" |bc`
    printf "\033[2J"
    printf "\033[${row};${begin}H["
    printf "\033[${row};${end}H]"
    while [ $pos1 -le $pos2  ]; do
        pro=`echo "scale=0; ($pos1 - $begin)*100/($pos2-$begin)" | bc`
        if [ $pos1 -gt $mid ]; then
            printf "\033[7m\033[${row};${mid}H$pro%%\033[${row};${pos1}H:"
        else
            printf "\033[m\033[${row};${mid}H$pro%%\033[7m\033[${row};${pos1}H:"
        fi
        pos1=`expr $pos1 + 1`
        idle
        trap abort  2
    done
    printf "\033[m\n"
    echo "done"
}
# call subroutine
printf "### proc 1 80 10 ### hit ENTER to continue "
if read a; then
    proc 1 80 10
fi
printf "### proc 25 55 10 ### hit ENTER to continue "
if read a; then
    proc 25 55 20
fi
2.如何从PING 中提取出AVERAGE这个字段呀,怎么写这个脚本?
--------------------------
ping -c 5 -f hostname | tail -1 | awk '{ print $4 }' | awk -F "/" '{ print $2 }'

3.查找一个文件中的某个参数的值,找到后替换成一新值
--------------------
sed 's/id=1/id=5/g' test.txt > test2.txt

4.通过netstat查看同时连接某个端口的ip数  
-------------------------
netstat -na | grep 192.168.1.246:80 | grep TIME_WAIT  | cut --delimiter=" " --fields="21"  | cut --
delimiter=":" --
fields="1" | sort | uniq | wc -l

5.将linux的文本文件转换为windows格式的文本文件。
----------------------
unix2dos filename

6.如何在脚本文件中控制输出的颜色   
比如
echo "Error."
我想让Error显示为red
--------------------------
echo  '^[[40;31m显示内容'
注意:^[  的输入方法是ctrl+v键,再按ESC键
第二个 [  是直接输入 [ 的
;前的数字是背景色,后面为前景色
背景色:
40黑41红42绿43黄44青45蓝46青47白
前景色:
30黑31红32绿33黄34蓝35紫36青37白

7.怎样在当前目录及子目录下的文件中找到包含某单词的文件?  
------------------
find dir -print|xargs grep -l yourword

8.批量建立文件夹:
------------
mkdir a{1,2,3,4,5,6}
或者
for i in 1 2 3 4 5 6; do
    mkdir a$i
done

9.如何列出某段时间内的所有文件?
------------------------
begin='Jun 23 15:00'
end='Jun 24 15:00'
cat -

10.一次杀掉几个相同的进程:
-----------------------------
LINUX、FREEBSD下用
#killall httpd
or
# kill -9 `ps -ef |grep httpd|awk '{print $2}'`

11.如何实现从一个指定的字符串后取出一个字符串.
例如:
The WHO's top official for Asia, Dr. Shigeru Omi, announced Tuesday that the advisory warning against travel
to verb=Beijing is no longer needed. "After careful analysis, WHO has concluded that risk to travelers is now
minimal," said Dr. Omi.
The move now means there are no SARS-related verb=travel warnings anywhere in the world, after nearly four
months.
将"verb=" 后的词取出,本例是将Beijing    travel 取出
-----------
sed 's/.* verb=\([^ ]\{1,\}\) .*/\1/' filename
首先s///的意思是替换的意思,用后边的内容把前边的部分替换掉~
第一个".*"的意思是不"verb="前边的任何东西,可以是零个或多个
最后边的同理
中间的部分"\"是转意字符~ 两个小阔号中的内容就是后边的\1,这是sed中的后向引用."[^ ]"是非空格的意思,大阔号中的1代
表至少匹配一次~~~

12.每5 分钟检测网络连接,(ping 某主机地址192.1.1.1,看是否通)
如通,无任何提示,如不通,屏幕出现提示,并且发出声音告警,

----------------------------
更改一下目标地址和错误消息就可以了。
^G 的输入:Ctrl + v; Ctrl + g;
while( true; )
do
    ping -c 1 -w 1 TARGETADDR > /dev/null 2>&1;
    if [ "$?" -eq "1" ]; then
        echo "ERROR_MESSAGE" && echo ^G;
    fi;
    sleep 300;
done

13.ftp自动上传文件脚本
--------------------
ftp -n -i

14.磁带机操作:
----------------
1。先找到磁带机的设备文件
  ioscan -kfnCtape
2.比如是/dev/rmt/0m
3.将磁带插入磁带机
4。用tar cvf file.tar /directory写入磁带。
----------
tar cv file 是覆盖磁带的所有
tar rv file 是追加
tar xv 是显示

15.把文本中的某一列不打印出来,不知道AWK有没有这样的参数.例:
123,345,678,789
不打印第二列
123,678,789
-------------------
awk能做,但不如用cut更直接:
cut -d "," -f1,3 filename
----------------
awk -F, '{print $1 "," $3 }' filename

16 一个文件 行数未知.怎样给这个文件的每行添加一行号.
---------------
nl filename


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20647/showart_356176.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP