google的一篇關于shell的文章
Google Style Guides-Shell Style Guide(翻譯)
Shell的一個例子
1.遞歸遍歷遞歸刪除文件夾中的**.exe *.out *~文件(因為要往github上面提交acm的一些代碼,而自己的acm目錄很分成幾個網站的代碼,有多級子目錄,需要把可執行文件刪除)
#!/bin/bash
#遞歸刪除文件夾中的*.exe *.out *~文件
#示例 bash del.sh .
function del_file_from_dir(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
echo $file " is dir"
rm -rf $1"/"$file/*.exe $1"/"$file/*.out $1"/"$file/*~
#
del_file_from_dir $1"/"$file
else
echo $file
fi
done
}
del_file_from_dir $1
2.訪問網站 下載文件(因為要學習hadoop權威指南,需要天氣數據所以寫了個腳本,從ftp上下載文件,并把文件處理成符合規范的數據)
從ftp://ftp.ncdc.noaa.gov/pub/data/gsod下載的數據是gsod_1901.tar ~ gsod_2016.tar 的數據
#!/bin/bash
for i in {1901..2016}
do
cd /home/Administrator/ncdc/
wget ftp://ftp.ncdc.noaa.gov/pub/data/gsod/$i/gsod_$i.tar
done
3.要把文件名字變成1901.tar ~ 2016.tar名字的數據,進而壓縮成1901.tar.bz2 ~ 2016.tar.bz2類型的數據。把gsod_1901.tar ~ gsod_2016.tar改成1901.tar.bz2 ~ 2016.tar.bz2
#!/bin/bash
#把gsod_*.tar改名為*.tar,并把tar文件壓縮成bz2文件
for i in *.tar
do
nowname=${i:5}
#echo "$i"
#echo ${nowname}
mv "$i" "${nowname}"
tar -jcf "${nowname}".bz2 "${nowname}"
rm -rf "${nowname}"
done
4.要把文件名字變成1901.tar ~ 2016.tar名字的數據,進而壓縮成1901.tar.bz2 ~ 2016.tar.bz2類型的數據。把gsod_1901.tar ~ gsod_2016.tar改成1901.tar.bz2 ~ 2016.tar.bz2
- 測試while循環
# 執行命令并且check
# 沒執行一次文件翻倍
#/bin/sbin
declare -i COUNTER=0
while ((COUNTER<=5));
do
let ++COUNTER
echo $COUNTER
done
- 測試 每次執行
main2 -i $file1 -o $file2 >> txtfile.log.txt
后file1文件變為原來的2倍,并且比較file1和file2的sha1sum值是否相同。
用到的shell知識點
- while循環有限次;
- shell接受命令執行命令的返回值;
- 字符串截取文件第4節;
- shell的if else fi判斷;
- shell的變量值聲明、初始化、自增;
# 執行命令并且check
# 每執行一次文件翻倍
#/bin/sbin
file1=file.txt
file2=file.txt.out
declare -i COUNTER=0
while ((COUNTER<=10));
do
runresult=`main2 -i $file1 -o $file2 >> txtfile.log.txt`
file1_sha1=`sha1sum $file1`
file2_sha1=`sha1sum $file2`
file1_sha1=${file1_sha1%% *} #刪除空格右邊的字符
file2_sha1=${file2_sha1%% *} #刪除空格右邊的字符
echo '第' $COUNTER "次測試" >> txtfile.log.txt
echo -n $file1 "與" $file2 "的sha1sum值相同 ? " >> txtfile.log.txt
if [ $file1_sha1 == $file2_sha1 ];then
echo "True" >> txtfile.log.txt
else
echo "False" >> txtfile.log.txt
fi
echo '\n' >> txtfile.log.txt
let ++COUNTER
rm -rf *.symbol
rm -rf *.esi
cat $file1 >> tmp
cat tmp > $file1
done