Shell命令整理目錄
時間操作
文件編碼轉換
grep命令排除條件
創建文件
打印日誌,和打印日誌方法
替換固定字符後輸出文件
校驗文件是否已存在
整個文件新增第一列
shell腳本讀取文件,併發10(大文件按行讀取)
字母大小寫轉換
按固定字符裁剪成數組,循環遍歷
判斷路徑是否存在,若不存在遞歸遍歷創建路徑
判斷字符串變量是否爲空值
判斷變量值是否爲0
if 的區間判斷
hdfs路徑下文件數量多少
替換變量中固定字符
壓縮文件,並刪除源文件
讀取配置文件,並且通過固定字符切割後讀取
獲取文件中的固定列(文件分隔符號爲 \t)
循環遍歷輸出路徑下的文件
捕獲linux命令是否執行成功
ftp操作樣本
讀取文件
判斷變量是否有值
具體內容如下:
時間操作
CURR_TIME=`date +"%Y-%m-%d %H:%M:%S"` --當前日期格式化
etl_date=`date "-d $etldate" "+%Y-%m-%d"` --傳入的參數日期格式化
etl_date=`date "-d -1 day" "+%Y%m%d"` --獲取當前日期的前一天
etl_date2=${date:0:6} --截取前六位,取月份
one_month_before=`date -d "1 month ago $date " +%Y%m` --獲取上個月日期
threeMonth_before=`date "-d -3 month $ETL_DATE" "+%Y%m%d"` --獲取前三月的日期
oneYear_before=`date "-d -1 year $ETL_DATE" "+%Y"` --獲取上一年
etl_date_today=`date -d "$etl_date +1 day" "+%Y%m%d"` --獲取 etl_date的後一天
etl_yesterday=`date -d "$etl_date -1 day" "+%Y%m%d"` --
etlmonth=`date -d "$etl_date -1 month" "+%Y%m%d"`
etlyear=`date -d "$etl_date -1 year" "+%Y%m%d"`
文件編碼轉換
iconv -f UTF-8 -t GBK test.del -o test.del --將UTF-8 轉成 GBK
grep命令排除條件
ll | grep sh | grep -v bak
--查找該目錄下含sh字符的文件,並且不包含 bak 字符
創建文件
if [ ! -f "$logfile" ]; then
touch "$logfile"
fi
打印日誌,和打印日誌方法
function _Mesg(){
echo `date +"%Y%m%d %H:%M:%S"` "---Messages: $1"|tee -a $logfile
}
_Mesg "打印日誌"
替換固定字符後輸出文件
cat ${sqlfile} | sed -e 's/\$etl_date/'$etl_date'/g' -e 's/\$one_month_before/'$one_month_before'/g' -e 's/\$two_month_before/'$two_month_before'/g' > $tmpsql
校驗文件是否已存在
if [ -f ${resultfile} ]; then
echo `date +"%Y%m%d %H:%M:%S"` "文件校驗已存在"
fi
整個文件新增第一列
cat aa.txt | sed -i "s/^/bbb\t/g" aa.txt
--給aa.txt 文件每一行的第一列添加bbb字段,以\t分割,寫入aa.txt中
shell腳本讀取文件,併發10(大文件按行讀取)
summ=0
while read line
do
summ=$[summ+1]
echo `date +"%Y%m%d %H:%M:%S"`"第$summ行"
paramer=`echo ${line} | awk -F',' '{print $1}'`
echo $paramer
hive -e "$sql" > 201905/$paramer.txt & --後臺執行無需等待執行結果反饋
if [ $(echo "$summ%10" | bc) -eq 0 ];then
--判斷執行十個任務後等待,等待10個任務全部完成後再遍歷下面10行數據
wait
fi
done<out_hivesql_v2.txt
字母大小寫轉換
EXP_JOB=DC_UOFF_UFFF_T_TABLE
JOB_NAME=`tr '[A-Z]' '[a-z]' <<< "${EXP_JOB}"` --轉換爲小寫
a=`tr '[a-z]' '[A-Z]' <<< "${JOB_NAME}"` --轉換爲大寫
按固定字符裁剪成數組,循環遍歷
EXP_JOB_NAME=DS_ODS_UM_T_TABLE
#得到源表表名
arry=(${EXP_JOB_NAME//_/ })
sdataTable=""
for((i=2;i<${#arry[@]};i++));do
sdataTable=${sdataTable}"_"${arry[$i]}
done
-----------------------------------------
arry=(${primarykey//,/ }) --逗號分隔的裁剪
key_mark=""
for((i=0;i<${#arry[@]};i++));do
key_mark=${key_mark}","
done
-------------------------------------------
b=`echo ${tab} | awk -F"_" '{print $1}'
a=`echo ${tab} | awk -F"_s_" '{print $1}'`
判斷路徑是否存在,若不存在遞歸遍歷創建路徑
logfilepath=/home/user/log/job/aa
[ ! -d ${logfilepath} ] && mkdir -p ${logfilepath}
判斷字符串變量是否爲空值
if [ ! -n "${partition}" ];then --變量移動得用雙引號引起來
echo "變量partition 長度爲0"
exit 43
fi
判斷變量值是否爲0
if [ ${file_number} -eq 0 ];then
echo "數值爲0"
fi
if 的區間判斷
if [ ${a} -ge 5 -a ${a} -lt 10 ];then --大於5 小於10
THREAD_NUM=5
elif [ ${a} -ge 10 ];then --大於10
THREAD_NUM=10
else
THREAD_NUM=${a} --小於5
fi
hdfs路徑下文件數量多少
hdfs_count=`hadoop fs -ls /warehouse/${Table}/partition |grep -i -v item|wc -l`
if [ ${hdfs_count} -eq 1 ];then
hdfsPath=`hadoop fs -ls -C /warehouse/${Table}/partition`
--獲取hdfs文件全路徑
file_number=`hadoop fs -cat ${hdfsPath}|wc -l`
--計算hdfs路徑下文件的條數,判斷文件內容是否爲空
if [ ${file_number} -eq 0 ];then
echo "HDFS文件${hdfsPath} 條數爲0 "
fi
fi
替換變量中固定字符
EXP_JOB=DC_UOFF_UM_T_PA
JOB_ID=${EXP_JOB/DC/EX} --將DC替換成EX
壓縮文件,並刪除源文件
tar -czf file.tar.gz filePath --remove-files
讀取配置文件,並且通過固定字符切割後讀取
cfg="${PATH}/conf/config.ini"
--HOST=192.19.2.1
HOST=`grep "HOST" $cfg|cut -d'=' -f2` --讀取“=”切割的第二個值
HOST=`grep "HOST" $cfg|cut -d'=' -f1`
獲取文件中的固定列(文件分隔符號爲 \t)
cat ${file} | awk -F'\t' '{print $1,$2,$3,$4}' >a.log
循環遍歷輸出路徑下的文件
for element in `ls $filePath`
do
echo $element
done
捕獲linux命令是否執行成功
if [ "$?" = "0" ];then
echo "sucess"
else
echo "failure"
fi
ftp操作樣本
echo "ftp start...."
ftp -i -n -v <<FTPIT
open 172.16.32.71
user bigdatading bigding,123
bin
prompt
get a b
get x y
close
bye
FTPIT
echo "ftp end ..."
讀取文件
while read line --可以按行讀取大文件
do
CONS=$CONS"<br>"${line}
done<aaa2.del
-----------------------------------------
CON=`cat test_${etl_date}.del` --適合小文件讀取到內存,文件過大會佔用大量內存
for c in $CON
do
CONS=$CONS"<br>"$c
done
判斷變量是否有值
if [ -z "$pag" -o -z "$date" -o -z "$name" -o -z "$yushang" -o -z "$qutype" -o -z "$count" -o -z "$iche" ];then
echo $line
else
echo "$line" >> ${temp}
fi