文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>unix下几个有用的小shell脚本

unix下几个有用的小shell脚本

时间:2006-03-22  来源:科罗拉多

unix下几个有用的小shell脚本

2005-10 余枫

替换字符串的脚本trans_par.pl,它可以把unix下文本文件里出现的字符进行替换,生成新的.new文件。
----------------------------------------------------------------------------------------------
#!/usr/bin/perl
# parameter_0 is filename
# parameter_1 is source char will be replaced
# parameter_2 is target char

$filename=$ARGV[0];
$filecontent='';

undef $/;

open(FH,$filename);
$filecontent = ;
close FH;

$filecontent =~ s/$ARGV[1]/$ARGV[2]/g;

open(FH,">${filename}.new");
print FH $filecontent;
close FH;
----------------------------------------------------------------------------------------------

调用方式举例:

$cat a.txt

1234 1234
1234 * 4321

$./trans_par.pl a.txt '12' '78'

$cat a.txt.new

7834 7834
7834 * 4321

        文件名取子串的方法:

                after_file_name=`echo $file_name|awk '{print substr($file_name,1,12)}'`

                pre_file_name=`echo $file_name|awk '{print substr($file_name,1,2)}'`
       
        Unix格式文件转换成Dos格式文件:
       
                unix2dos -q -k filename
       
        Dos格式文件转换成Unix格式文件:
       
                dos2unix -q -k filename

        根据定时生成的文本文件字节数是否一样来判断程序是否运行正常,如果一段时间内数据没有变化,发邮件通知.
----------------------------------------------------------------------------------------------
cd /beijing

dt2=`date --date '10 minutes ago' "+%Y%m%d%H%M00"`;export dt2
filename2=english_company_name_$dt2.txt;export filename2
ls -l $filename2>filename2.txt
cat /beijing/filename2.txt|awk '{print $5}'>size2.txt

dt1=`date --date '5 minutes ago' "+%Y%m%d%H%M00"`;export dt1
filename1=english_company_name_$dt1.txt;export filename1
ls -l $filename1>filename1.txt
cat /beijing/filename1.txt|awk '{print $5}'>size1.txt

dt0=`date "+%Y%m%d%H%M00"`;export dt0
filename0=english_company_name_$dt0.txt;export filename0
ls -l $filename0>filename0.txt
cat /beijing/filename0.txt|awk '{print $5}'>size0.txt

echo 'file is ok'

filename2_size=`cat /beijing/size2.txt`;export filename2_size
filename1_size=`cat /beijing/size1.txt`;export filename1_size
filename0_size=`cat /beijing/size0.txt`;export filename0_size

echo $filename2_size
echo $filename1_size
echo $filename0_size

if [ -z $filename2_size ] || [ -z $filename1_size ] || [ -z $filename0_size ]; then
        echo 'no such files'
else
      if [ $filename2_size -eq $filename1_size ] && [ $filename1_size -eq $filename0_size ]; then
      echo 'something is wrong,please look at'
      cat /beijing/bin/error.txt /beijing/filename* >/beijing/error_mail.txt
      mail -s 'alert mail' [email protected] </beijing/error_mail.txt > /dev/null 2>&1
      else
      echo 'everything is ok'
      fi
fi
----------------------------------------------------------------------------------------------
说明:/beijing/bin/error.txt 文件为邮件正文部分

unix shell 里面比较字符写法:  (我经常不记得,用的时候需要找文档, 现在把它们列出来)

    -eq 等于 -z 空串
    -ne 不等于 = 两个字符相等
    -gt 大于 != 两个字符不等
    -lt 小于 -n 非空串
    -le 小于等于
    -ge 大于等于
   
命令的执行顺序符号:   
   
命令1 && 命令2

      &&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;
      换句话说,“如果这个命令执行成功&&那么执行这个命令”。
     
命令1 || 命令2

      如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2);
      或者换句话说,“如果这个命令执行失败了|| 那么就执行这个命令”
     
文件状态测试符号:

    -d     目录        -s     文件长度大于0、非空
    -f     正规文件     -w     可写
    -L     符号连接     -u     文件有suid位设置
    -r     可读        -x     可执行            
   
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能:

  -a   逻辑与,操作符两边均为真,结果为真,否则为假。
  -o   逻辑或,操作符两边一边为真,结果为真,否则为假。
   !   逻辑否,条件为假,结果为真。 
       

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载