1. 程式人生 > >linux和shell指令碼常用命令技巧

linux和shell指令碼常用命令技巧

  • date :調配時間,可以用date命令完成很多需求,比如日誌資料夾,比如求前幾天等等,其他常用方法百度
date "+%Y%m%d"    #輸出年月日
date -d last-day +%Y%m%d  #輸出當然日期的前一天
###############################根據時間變數求取該變數的上一天
cur_sec=`date -d $curdate +%s`
after_day=$(($cur_sec - 24*60*60))
yesterdate=`date -d "1970-01-01 UTC $after_day seconds" +"%Y%m%d"`
  • awk :切分檔案或者輸出,可以把字元切換成所需
awk '{printf $0}'              # 多行轉一行輸出
awk 'NR==1'                    # 取第一行資料
awk -F '|' '{print $1"_"$2}'   # 以|切分,輸出第一塊第二塊並以_分隔
  • sed : 把文本里字元替換為所需
sed -i 's/x1/x2/g' file_name # 這是sed常用框架,x1替換為x2
                             # ''裡是什麼就是什麼,如需變數或其他可用""加轉義符
                             # 加i是忽略輸出直接更改,不加i是列印到螢幕上對檔案無影響,後者常用
sed 's/[[:space:]]//g'       # 去除空格
  • grep :搜尋顯示匹配內容,常用管道符| 與其他命令在一起使用
grep -E 'x1|x2|x3|'    #多重匹配  
grep -vw     #w作用是全部字元匹配才會去除,以防出錯,比如grew -vw pt可不匹配pt,但ptt可以照樣輸出
  • 迴圈遍歷 :常用for迴圈來代替,常用的有以下
# 與cat ls等命令連用
for table in `ls $file_dir`;
for table in `cat $file`;

# 自定義列表迴圈遍歷
list="x1 x2 x3 x4"
for i in ${list}

# 從1到n迴圈
for i in $(seq 1 10);
for((i=1;i<=10;i++));   
  • 陣列相關 :把文字內容放進數組裡可以方便很多需求
declare -a arr # 定義一個數組
i=0
for str in `ls `;do
    arr=($str) #獲取資料內容
    array_name[i]=${arr}  #與上面得到的結果一樣
done
unset arr      # 卸除陣列很重要
  • 其他
$#   #是傳給指令碼的引數個數
$0   #是指令碼本身的名字
$1   #是傳遞給該shell指令碼的第一個引數
$2   #是傳遞給該shell指令碼的第二個引數
[email protected]   #是傳給指令碼的所有引數的列表,與$*的區別只有在""中傳引數
$*   #是以一個單字串顯示所有向指令碼傳遞的引數,與位置變數不同,引數可超過9個
$$   #是指令碼執行的當前程序ID號
$?   #是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤

%?   #指去掉該變數最後一個字元,常用到建表指令碼去除最後一個列的逗號,用法${sql%?}

# crontab 放後臺表示式
0 0 * * * /u01/ZJSY/version/GGZY/shell/run_commit_bf.sh FW 2>&1 >/dev/null &  #每天零點後臺跑
nohup command &    #也可以放在後臺跑,用jobs檢視