閱讀大概需要8分鐘
昨天老師給了宗林師兄任務,讓我跑一個機器翻譯的程序。我看了看就是跑shell腳本。剛開始一看。。我的天。。好長的代碼,但是覺得這個時候就更不能怕,得迎難而上,趁這個機會,把shell腳本好好弄弄,以后也好用呀!好吧,下面讓我們一個一個來。
初始化路徑
這個最好都在開頭寫上,意思是之后的任何語句執(zhí)行只要有一個返回的不是true就退出。這樣的好處就是保證自己的代碼在運行完完全是自己想要的,而不是運行了幾天發(fā)現(xiàn)竟然是有問題的代碼。真的是這樣就慘了。所以,開頭一定寫上這個。如果要增加可讀性,也可以用set -o errexit 字面意思就是出現(xiàn)error就exit。跟set -e是一樣一樣的。
這里大概分為四小部分:
分別為:BASH_SOURCE,cd,dirname,pwd
BASH_SOURCE:我們先看里面的,這個是當前腳本的文件的路徑。但是前提你得先將次腳本文件加上可執(zhí)行權限,即 chmod +x [當前文件名]。然后,就能用這個命令了。BASH_SOURCE[0]存放的路徑數(shù)據(jù)。
dirname:取出后面命令的路徑部分
cd 這個就很簡單了,進入dirname取出該腳本的路徑的上一層(因為后面有一個/..,所以是上一層)
pwd:這個是獲得當前路徑。
&&:這個的意思就是前面的執(zhí)行完了才執(zhí)行后面的。
這句話總的意思就是,獲取該腳本的上一級的路徑。
你看看,一句話學習了這么多命令,是不是很開心O.O
下一句話:
這個主要就是${1:xxx}是知道什么意思。我先說說$0,$1,$2等,這里的$0表示這個這個腳本本身,$1,$2分別表示第一個參數(shù),第二個參數(shù)。那么我們來看這個命令。這個意思就是說:先判斷第一個位置是不是有傳入的參數(shù),有的話OUTPUT_DIR就是第一個參數(shù),如果沒有的話那就后面的xxx,這里就是OUTPUT_DIR='wmt16_de_en'。
這兩句應該不用解釋了。設置OUTPUT_DIR的值和一個echo的輸出。
下載數(shù)據(jù)
第一句話
這里說說mkdir吧。
mkdir:建立一個目錄。mkdir myfile 就生成一個myfile目錄在當前目錄里。這里的-p選項,是一次可以建立多個路徑的意思。舉個例子:
mkdir ./dir1/dir2/dir3 如果此時沒有dir1那么之后的都建立不了,如果用
mkdir -p ./dir1/dir2/dir3 就可以啦。沒有的都會自己創(chuàng)建。
下一句
這里我們主要看curl就好了。curl是網(wǎng)絡請求命令。如果想比如保存整個網(wǎng)頁呀,下載數(shù)據(jù)呀,都可以的。curl的下載形式為:
如果想詳細了解curl命令,可以看
shell中的curl網(wǎng)絡請求
https://blog.csdn.net/u012390519/article/details/74231606
因為我們經(jīng)常用的就是curl -o [保存路徑] [網(wǎng)絡鏈接]
所以,基本記住這個命令就差不多啦。
解壓
這里的主要命令就是解壓tar了。
先來說說tar的參數(shù)吧。
-c :建立一個壓縮文件的參數(shù)指令(create 的意思);
-x :解開一個壓縮文件的參數(shù)指令!
-t :查看 tarfile 里面的文件!
特別注意,在參數(shù)的下達中, c/x/t 僅能存在一個!不可同時存在!
因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-v :壓縮的過程中顯示文件!這個常用,但不建議用在背景執(zhí)行過程!
-f :使用檔名,請留意,在 f 之后要立即接檔名喔!不要再加參數(shù)!
例如使用『 tar -zcvfP tfile sfile』就是錯誤的寫法,要寫成
『 tar -zcvPf tfile sfile』才對。
-p :使用原文件的原來屬性(屬性不會依據(jù)使用者而變)
-P :可以使用絕對路徑來壓縮!
-N :比后面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的文件中!
--exclude FILE:在壓縮的過程中,不要將 FILE 打包!
該參數(shù)來自于
【shell】tar命令詳解
http://blog.sina.com.cn/s/blog_66f483af01018ab3.html
因為我們常用的命令就是
解壓 tar -xvzf [解壓的文件] -C [輸出文件的名字]
打包 tar -zcvf [打包的文件] -C [輸出文件的名字]
-C [文件名字]可以不寫,用默認文件名。
常用shell語句
這里主要就是if了。
一、條件測試的表達式:
[ expression ] 括號兩端必須要有空格
[[ expression ]] 括號兩端必須要有空格
test expression
組合測試條件:
-a: and
-o: or
!: 非
二、整數(shù)比較:
-eq 測試兩個整數(shù)是否相等
-ne 測試兩個整數(shù)是否不等
-gt 測試一個數(shù)是否大于另一個數(shù)
-lt 測試一個數(shù)是否小于另一個數(shù)
-ge 大于或等于
-le 小于或等于
三、命令間的邏輯關系
邏輯與:&&
第一個條件為假 第二個條件不用在判斷,最總結果已經(jīng)有
第一個條件為真,第二個條件必須得判斷
邏輯或:||
四、字符串比較
== 等于 兩邊要有空格
!= 不等
> 大于
<> 小于
五、文件測試
-z string 測試指定字符是否為空,空著真,非空為假
-n string 測試指定字符串是否為不空,空為假 非空為真
-e file 測試文件是否存在
-f file 測試文件是否為普通文件
-d file 測試指定路徑是否為目錄
-r file 測試文件對當前用戶是否可讀
-w file 測試文件對當前用戶是否可寫
-x file 測試文件對當前用戶是都可執(zhí)行
-z 是否為空 為空則為真
-a 是否不空
這里,如果then不寫在if后面,if后面就不用分好了;還有,末尾記得fi結尾呀!
好啦?;镜闹v完了,給你這篇shell腳本吧。自己嘗試看看,理解理解!進步在一點一滴!!加油
https://github.com/DevSinghSachan/Attention_is_All_You_Need/blob/master/tools/wmt16_en_de.sh
聯(lián)系客服