如何將command lines 組合成shell script

Converting One-Liners into Shell Scripts

有時候在command line中會有些操作步驟是共通會使用的,這時候就可以把它們寫到shell scripts中(雖然減輕工作負擔的關鍵是你如何挑選要轉化成shell scripts的one-liners,這部分就要靠經驗了!)

主要步驟有六步:

  1. 將command line 寫入到file中
  2. 寫入執行權限(execute permissions)
  3. 定義shebang(直譯器的讀取參數,詳見維基),就是執行時告訴系統要用什麼直譯器去讀去。
  4. 去掉command line中固定的input 指向
  5. 添加可以修改的參數
  6. 將此shell script的位置放入環境裡的PATH

 

第一步驟:將command lines寫入成.sh 的檔案

$ vi top_words.sh

———- 按 i 進入編輯模式,結束後按est 然後輸入:wq存檔離開—–

$curl -s https://zh.wikipedia.org/wiki/Shebang |
$tr ‘[upper:]"[:lower:]’ |grep -oE  ‘\w+’|sort|uniq -c |
$sort -nr |head -n 10

第二步驟:修改此檔案的權限

chmod u+x top_words.sh

解釋: chmod   代表我們想要修改此檔案的使用權限細節
+              代表我們想要添加permission
u              代表我們要添加的permission是關於此檔案的讀取

小技巧,在我們使用 $ ls -l 時,通常會顯示當下目錄中的檔案細節如下:

$ls -l
-rw-rw-r– 1 weiting weiting 132 Jul 20 17:20 top_word.sh

最左邊的-rw-rw-r– 就代表此檔案的使用權限,此時是沒有關於讀取的權限。

第三步驟:定義此shell scripts的shebang

shebang通常就是在scripts的第一行,告訴系統要用什麼樣的直譯器來執行此scripts,此時我們要使用unix的bash (在linux中最常見的內建default 直譯器)

#!/usr/bin/env bash
$curl -s https://zh.wikipedia.org/wiki/Shebang |
$tr ‘[upper:]"[:lower:]’ |grep -oE  ‘\w+’|sort|uniq -c |
$sort -nr |head -n 10

小知識:其實shebang這個字是she+bang組合而成的,she其實就是hash(等於#)的意思,而bang則是exclamation mark

第四部:移除固定的input指向

#!/usr/bin/env bash
$curl -s https://zh.wikipedia.org/wiki/Shebang
$tr ‘[upper:]"[:lower:]’ |grep -oE  ‘\w+’|sort|uniq -c |
$sort -nr |head -n 10

第五步驟:添加參數

#!/usr/bin/env bash
NUM_WORD="$1″

$curl -s https://zh.wikipedia.org/wiki/Shebang
$tr ‘[upper:]"[:lower:]’ |grep -oE  ‘\w+’|sort|uniq -c |
$sort -nr |head -n $NUM_WORD

$1 代表的是在command line中位置於輸入第一個的參數

第六步驟:將此shell script的位置放入環境裡的PATH

使用$ls -a 來看家目錄下的.bashrc 或是.bash_profile,將你的scripts所在位置放入其中

$ export PATH$="your script directory:$PATH"

這樣就大功告成了!可以在任何地方執行你的scipts,如此便能減少很多重複工作!

 

reference:Jeroen JanssensData Science at the Command Line , Chapter 4
(強力推薦)

跟烏禮.艾隆 (Uri Alon)學習:如何挑選研究問題

烏禮.艾隆(Uri Alon)是魏茨曼科學研究學院(Weizmann Institute of Science)裡系統生物學的教授,是理論物理學家背景,但其發表了很多關於基因表現的模型和分析方法。他發表許多很易懂的文章教人如何挑選研究題目和表達,且在TED上也有一個很棒的演講,題目是為什麼真正革新的科學需要跳進未知的領域 ?

這邊整理他2009年在Cell上撰寫的的兩篇論文:
How To Give a Good Talk. Molecular Cell, 36(2), 165–167.
How To Choose a Good Scientific Problem. Molecular Cell, 35(6), 726–728.

兩篇文章都非常平易近人,且論點清晰,大概二十分鐘兩篇就能唸完,適合在通勤的時候閱讀。

我們如何挑選一個好的科學問題 How To Choose a Good Scientific Problem

烏禮.艾隆在這邊裡面談到最重要的觀念主要有兩個:好的科學問題是跟你的生涯階段有關以及在追求科學問題解答時該有的心理建設。首先,在不同生涯階段,對於適合自己要解決的科學問題需要用不同的策略來思考,如下圖:

1-s2.0-S1097276509006418-gr1
Alon, U. (2009). How To Choose a Good Scientific Problem. Molecular Cell, 35(6), 726–728. http://doi.org/10.1016/j.molcel.2009.09.013

將自己領域有趣的問題用兩個象限來歸類,其中一個象限代表者這問題的艱深層度,另一個象限則是代表在解答這問題的過程是否會增加科學界的知識或是應用,而每個問題在不同象限其實分佈都不一樣,比如簡單且對於科學研究有大量知識貢獻的問題,絕大部分都被回答了,就是所謂的"Low-hanging Fruit",但那邊還是有很多不同種類的問題,右邊圖的線其實論述了非常漂亮的生涯規劃可以搭在一起,像博碩士或是大學部學士班在所要找的問題便是在右下角這塊,代表其難度簡單,雖然不帶有很大量的生科知識(耗材累..),而在博士後的階段則是另一個關鍵,要挑選問題的程度要能在曲線右上角,換句話說,是一個sweat point,難度和其對於原有知識體系的供獻度在一個最佳化的狀態,因為博士後的時間非常有限,要在短時間內有好的發表,才能幫助尋找教職,但這類型的問題不一定能深耕幾十年,所以進階到Principle Investigator時,就必須要繼續找尋曲線左上角的問題,也就是難度很難,且對於提升現有知識領域很有價值的題目,這樣子的題目通常都要好幾十年來架構並且回答。

另一點就是在找尋問題的解答時要有的價值觀,就如下圖一番:

template_cell
Alon, U. (2009). How To Choose a Good Scientific Problem. Molecular Cell, 35(6), 726–728. http://doi.org/10.1016/j.molcel.2009.09.013

 

圖片左邊,是我們大部分開始著手解決問題前之想法,會覺得從A點到B點是直線距離,可是這樣往往會造成自己的實驗有不少偏差,因為還未找到答案前,在內心中已對某結果過度樂觀且有時候甚至要調整實驗設計為了符合自己的預設答案,現實上,從A點到B點是迂迴萬千的,且不一定最後到 B,反而跑到了之前都沒想過的C,沒有這個mindset在心中的話,會遭遇很大的障礙。在烏禮艾隆教授自己教育研究生的時候,他都會說其研究生的教育都會跟他們心理建設,會有一陣完全不知道目的在哪的心理準備,但這樣的想法其實套在生物以外的事物也行得通,像是創業、餐飲和物流!