Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1727478
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类:

2011-09-02 18:17:14

原文地址:常用SHELL脚本汇总 作者:cnb7ue

1.在文件的每一行结尾加上一个竖线

vi yourfile <:1,$s/$/|/g
:x
这个是在脚本里面写的,也可以vi直接编辑,用上面的命令做.

sed 's/$/|/g' datafile
 
2.删除文档里每一行最后一个字符
sed 's/.$//' Urfile
sed 's/|$//' urfile
后一种更严格些
 
3.查找各文件夹中对应文件并显示文件大小时间等信息
 
find ./ -name "*000004*" | xargs ls -ltr
 
4.显示一个文件中不包含特定字符串的行
 
grep -v "106.128.0.1" file1
 
5.文件夹中文件或子文件夹过多,删除方法
 

当一个文件中的文件数过多,在执行rm * 删除的时候会提示:
ksh: /user/bin/rm: 0403-027 The Parameter list is too long.
这个错误的根本原因是因为 /usr/include/limits.h 定义系统核心 LINE_BUFSZ 限制.
如果有大量文件数需要删除,
可以考虑用 xargs 的 -n 参数进行批量删除.参考如下示例:
find /backup/ -ctime 1 -print | xargs -n 10 rm -rf {} \;
find ./ -ctime 1 -exec rm -rf {} \;
-atime 1 (1天前被accessed)
-ctime 1 (1天前被changed)
 
6.每隔1秒显示AIX的剩余内存
#!/usr/bin/ksh
 
while [ 1 -eq 1 ]
do
    x=`svmon -G | grep memory | awk '{print $4}'`
    y=`expr $x \* 4 \/ 1024`
    echo '剩余'$y'M'
    echo `date +%T'
    sleep 1
done
   
7.通过进程名来kill进程
这样的命令当然也是有的
#pkill 进程名
#killall 进程名
来完成这个kill的任务
 
8.Shell脚本实现统计进程的CPU占用率
 
#!/bin/sh
pid=`ps -e|egrep "\b$1$" | awk '{print $1}'`#获取进程id
echo $pid
cpu=`top -n 1 -p $pid|tail -2|head -1|awk '{ssd=NF-4} {print $ssd}'`
#获取进程cpu占用
#echo $cpu
declare -i cpuall=0
declare -i time=0
while [ 1 ]
do
  cpu=`top -n 1 -p $pid|tail -2|head -1|awk '{ssd=NF-4} {print $ssd}'`
  cpuall=cpuall+cpu
  time=time+1
  average=`echo "scale=3;$cpuall/$time" |bc -l`
  #declare -i average=$cpuall/$time
  echo $average
  sleep 1
done

运行:
$./this.sh process
 
9.查看AIX操作系统版本
  oslevel -s
 
10.获取之前某天时间脚本
 
linux平台上:mydate=`date  -1d +%Y%m%d`
unix平台上:mydate=`TZ=GMT+16;export   TZ;date   +%Y%m%d`
             echo ${mydate}
 
11.aix上ftp获取文件脚本
getfile()
{
ftp -niv 127.0.0.1 <user ftppub ftppub
cd $1
lcd $HOME/spool/$filedate
bin
prompt
mget $2
bye
!
}
 
12.设置输入模式
set -o vi 表示编辑命令行用 vi 模式,默认状态是 vi 的 编辑状态,可以输入、修改,用 ESC 退出编辑状态后,可以用 h,l 来前进后退, j,k 来翻看历史命令,^光标到行首,$光标至行尾,dd 删除该行...等等,和 vi 的用法是一样的。习惯用 vi 的人可以用 set -o vi 这种模式加快命令行编辑。

此外,还有 set -o emacs,表示编辑命令行用 emacs 模式,不分编辑状态和控制状态。 可以直接输入,也可以用 [CTRL]-a 至行首,[CTRL]-e 至行尾,[CTRL]-k 删除光标处到末尾...等等,这和 emacs 的编辑方式是一样的。这是默认模式,也是最常见和大多数人习惯的方式。
13.查看文件中以'|'分隔的第二列出现重复的值
 
awk -F"[/|]+" '{print $2}' tbl_map.dat | sort | uniq -c
 
14.统计文本中所有行数值相加
 
#!/usr/bin/ksh
 
 count=0
 num=0
 for n in `cat /app/bcmsfile/tmp/1`
 do
     count=`expr $count + $n`
         num=`expr $num + 1`
             echo $num
             done
 
  x=`expr $count \/ $num`
  echo '平均值=' $x
 
15.SHELL如何实现判断FTP GET到的文件与源端大小是否一致
putfile()
{
ftp -niv 127.0.0.1 <ftp.log
user ftppub ftppub
cd ${LDIR}
lcd ${LDIR}
bin
mput *
ls -l
bye
!
}
for file in `ls ${LDIR}`
do
size_l=`ls -e ${LDIR}/$file | awk {'print $5'}`
size_f=`grep $file ftp.log | awk {'print $5'}`
if [ ${size_l} -eq ${size_f} ];then
echo "${file}: sizes ${size_l} ok"
else
echo "${file}: sizes ${size_l} ${size_f} not equal"
fi
done
 
16.修改文件访问时间
 
touch -a -m MMDDHHMM[YY] FILENAME
 
17.通过进程查找对应的程序
 
ps -ef 进程名
 
cd /proc/进程ID
$ ls -l /proc/18283
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 cwd -> /v8t/qhkf/risk_b/kssmdb
-r-------- 1 qhkf qhkf 0 01-06 11:14 environ
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 exe -> /v8t/qhkf/risk_b/kssmdb/A
阅读(548) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~