unix下幾個有用的小shell指令碼(轉)
unix下幾個有用的小shell指令碼(轉)[@more@]替換字串的指令碼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' /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 邏輯或,運算子兩邊一邊為真,結果為真,否則為假。
! 邏輯否,條件為假,結果為真。
----------------------------------------------------------------------------------------------
#!/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' /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 邏輯或,運算子兩邊一邊為真,結果為真,否則為假。
! 邏輯否,條件為假,結果為真。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-949196/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 幾個shell自動化指令碼(轉)指令碼
- mysql便於管理的幾個shell指令碼MySql指令碼
- VB下幾個非常有用的函式 (轉)函式
- Linux Shell指令碼的10個有用的“面試問題和解答”Linux指令碼面試
- Linux Shell 指令碼的 10 個有用的“面試問題和解答”Linux指令碼面試
- Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼Linux指令碼SQL
- 幾例實用的Shell指令碼指令碼
- [轉]寫好shell指令碼的13個技巧指令碼
- 幾個shell程式設計小知識(轉)程式設計
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- Unix下常見shell簡介(轉)
- UNIX下oracle啟動指令碼Oracle指令碼
- 30個關於Shell指令碼的經典案例(下)指令碼
- Unix shell解決實際問題指令碼(1)指令碼
- Unix shell解決實際問題指令碼(2)指令碼
- Unix shell解決實際問題指令碼(3)指令碼
- 關於字串的幾個有用函式 (轉)字串函式
- 3個例項介紹shell指令碼中幾個特殊引數的用法指令碼
- 執行Shell指令碼的方式(轉)指令碼
- 轉貼:RMAN備份指令碼(Unix)指令碼
- shell入門--第一個shell指令碼指令碼
- Linux/Unix shell 引數傳遞到SQL指令碼LinuxSQL指令碼
- oracle幾個有用的命令Oracle
- 有用的幾個網站網站
- 幾個有用的Function.Function
- 常用的幾個典型指令碼指令碼
- Linux主機安全配置的幾個指令碼(轉)Linux指令碼
- BASH Shell的指令碼程式設計(轉)指令碼程式設計
- Linux Shell 裡一些很少用到卻很有用的指令(轉)Linux
- Shell的五個小應用(轉)
- 9個實用shell指令碼指令碼
- Shell 中 $ 關於指令碼引數的幾種用法指令碼
- 分享兩個實用的shell指令碼指令碼
- 一個比較好的shell指令碼指令碼
- Linux/Unix shell 指令碼清除歸檔日誌檔案Linux指令碼
- BOOT0的主要程式碼兼Unix下彙編小節(轉)boot
- 幾個有用的JSON工具JSON
- Centos下使用php呼叫shell指令碼CentOSPHP指令碼