linux和shell指令碼常用命令技巧
阿新 • • 發佈:2018-12-15
- 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檢視