Linux結(jié)構(gòu)化語句-條件與循環(huán)

Linux結(jié)構(gòu)化語句

  • 條件語句 if
  • 循環(huán)語句: for 循環(huán)和 while循環(huán)

條件語句 if

if 條件語句的常見格式如下,注意空格

生信技能樹小郭老師的課件圖-if條件語句

有頭有尾,一個(gè)if 就要對應(yīng)一個(gè) fi 。有三種結(jié)構(gòu):

  • if語句的第一種結(jié)構(gòu):條件成立做什么事情
 if [ condition ]
then
    commands
fi
## condition是條件
##then條件成立
##fi退出
  • if語句的第二種結(jié)構(gòu):條件不成立又要做什么事情
if [ condition ]
then
    commands
else
    commands
fi
##第二個(gè)command是第一個(gè)條件不成立之后寫的命令
  • if語句的第三種結(jié)構(gòu):嵌套結(jié)構(gòu)
if [ condition ]
then
    commands
else
    if [ condition ]
    then
        commands
    fi
fi
#####(else if 可以縮寫為 elif ),如下:
if [ condition ]
then
    commands
elif [ condition ]
    then
        commands
    fi
fi
##有多少個(gè)if就要有多個(gè)fi,第一個(gè)if與最后一個(gè)fi對應(yīng)及皂,第二個(gè)if與第一個(gè)fi對應(yīng)

if 條件語句的常見條件:數(shù)值判斷甫男、字符串判斷、文件判斷

  • 數(shù)值判斷:
用法 解釋
[ N1 -eq N2 ] N1 和 N2 兩數(shù)相等返回為真
[ N1 -ne N2 ] N1 和 N2 兩數(shù)不等返回為真
[ N1 -gt N2 ] N1 大于 N2 返回為真
[ N1 -ge N2 ] N1 大于等于 N2 返回為真
[ N1 -lt N2 ] N1 小于 N2 返回為真
[ N1 -le N2 ] N1 小于等于 N2 返回為真

注意細(xì)節(jié):[ N1 -eq N2 ]验烧,[N1之間必須有空格板驳、N2]之間必須有空格;-eq有時(shí)候用=替代碍拆,但是規(guī)范的寫法還是-eq若治;有時(shí)候網(wǎng)上教程把[ N1 -eq N2 ]寫成[[ N1 -eq N2 ]]集兩個(gè)中括號(hào)[[ ]],有時(shí)候還有人用小括號(hào)(),

示例:

# 數(shù)值判斷
if [ 1 -eq 1 ]
then
  echo  "Welcome to Biotrainee() !"
else
  echo  "**************"
fi
if數(shù)值判斷示例
if [ 1 -eq 1 ]
> then
> echo "Welcome to Biotrainee() !"
> else echo "**************"
> fi
##> 大于號(hào)是系統(tǒng)自動(dòng)出現(xiàn)感混,表示命令沒有完成
##用雙引號(hào)端幼,雙引號(hào)里變量會(huì)被解釋,單引號(hào)里變量不會(huì)被解釋
if數(shù)值判斷簡單例子演示

可以用一整句代碼完成弧满,用分號(hào)隔開婆跑,if...; then...; else...; fi

if [ 1 -eq 2 ]; then echo "abc"; else echo "123"; fi
##用分號(hào),一整句代碼的好處是庭呜,可以修改滑进。
if數(shù)值判斷一句代碼
# 結(jié)合狀態(tài)參數(shù) $?
if [ $? -eq 0 ]
then
  touch  ok.txt
fi
##$?表示的是上一句代碼是否執(zhí)行成功,為0表示執(zhí)行成功
##有時(shí)候處理需要分成很多步疟赊,通過if語句判斷上一句命令是否成功
##以后自己寫流程寫pipline時(shí)郊供,自己去探索
結(jié)合狀態(tài)參數(shù) $?示例
  • 字符串判斷
用法 解釋
[ -z STRING ] 如果STRING的長度為零則返回為真峡碉,即空是真
[ -n STRING ] 如果STRING的長度非零則返回為真近哟,即非空是真
[ STRING1 ] 如果字符串不為空則返回為真,與-n類似
[ STRING1 == STRING2 ] 如果兩個(gè)字符串相同則返回為真
[ STRING1 != STRING2 ] 如果字符串不相同則返回為真
[ STRING1 < STRING2 ] 如果 STRING1字典排序在STRING2前面則返回為真 > 同理

做數(shù)據(jù)處理時(shí)不常用,可能運(yùn)維工程師可能用到鲫寄,做生信分析不常用到吉执。

  • 文件判斷
用法 解釋
[ -a FILE ] 如果 FILE 存在則為真
[ -d FILE ] 如果 FILE 存在且是一個(gè)目錄則返回為真
[ -f FILE ] 如果 FILE 存在且是一個(gè)普通文件則返回為真

-a:判斷文件FILE是否存在
-d:是否存在一個(gè)文件夾FIL
-f:判斷一個(gè)普通文件,就是文本文件地来,上一個(gè)流程完成應(yīng)該生成一個(gè)文件戳玫,用if判斷,如果那樣的文件未斑,就可以往下一個(gè)流程走咕宿。

if [ $? -eq 0 ]; then touch ok1.txt; fi
ls
##以上步驟生成一個(gè)ok.txt

# 文件判斷
if [ ! -f ok.txt ]
then
  touch  ok.txt
fi

if判斷存在以及創(chuàng)建文件命令

循環(huán)語句

for循環(huán)語句
  • for循環(huán)語句的常見格式
for i in list
do
   commands
done

##list是循環(huán)的條件,一個(gè)樣本提交一個(gè)命令

初學(xué)者if語句用得比較少蜡秽,循環(huán)語句用得比較多府阀。

for i in  1 2 3 4 5 
do
  echo ${i} "Welcome to Biotrainee() !"
done

for i in {1..10}
do
  touch  file${i}
done
ls
###等差創(chuàng)建10個(gè)文件

list="CDS exon gene start_codon stop_codon transcript UTR"
for i in ${list}
do
  echo  "This feature is ${i}"
done
##用雙引號(hào),雙引號(hào)里變量會(huì)被解釋芽突,單引號(hào)里變量不會(huì)被解釋
##循環(huán)的結(jié)尾為done
##循環(huán)語句很長時(shí)试浙,賦值給list變量。
循環(huán)語句的演示

自己很好奇寞蚌,因?yàn)閕f語句能寫成一整句代碼田巴,試了看看能不能用循環(huán)也寫成一整句代碼钠糊,結(jié)果是不行,list和分隔符不能被識(shí)別追迟,循環(huán)不能寫成一整句代碼熏挎,得一步步來

循環(huán)語句不能寫成一整句代碼

  • 其它循環(huán)條件表示方法

用優(yōu)先級命令來作為循環(huán)條件逝慧,優(yōu)先級符號(hào)``

ls
ls file*
for i in `ls file*`
> do
> mv ${i} ${i}.txt
> done
ls *txt
#file1.txt   file2.txt  file4.txt  file6.txt  file8.txt  ok.txt
#file10.txt  file3.txt  file5.txt  file7.txt  file9.txt  readme.txt
###ls file*把這個(gè)結(jié)果作為條件,
###用反引號(hào)``把ls file*括起來啄糙,里面的代碼有最高優(yōu)先級笛臣,`ls file*`會(huì)被優(yōu)先執(zhí)行,把10個(gè)結(jié)果當(dāng)成條件隧饼,放到i in的后面沈堡,i在這10個(gè)條件里循環(huán)
##對10個(gè)文件可以進(jìn)行一些操作,如刪除燕雁,這里演示的是重命名mv ${i} ${i}.txt诞丽,把fiel1..file10重命名為fiel1.txt..file10.txt
優(yōu)先級循環(huán)方法
while 循環(huán)
  • while循環(huán)語句的常見格式:
while read id 
do
     commands
done
##id相當(dāng)于i,自定義的一個(gè)變量拐格,可以隨便命名僧免,

原來的格式:(比較老,不常用)

while command 
do
    other commands
done

示例

ls file* | while  read  id;
do 
  mv ${id} ${id}.txt ; 
done

##傳參
ls  file* > config
cat config | while  read id
do 
  mv  ${id}  ${id%.txt}
done
## ${id%.txt}的后綴名去掉
##單獨(dú)運(yùn)行cat config顯示一個(gè)文件就是單獨(dú)一行捏浊,共10行懂衩,ls file*出的結(jié)果占一行,主要是ls根據(jù)窗口大小去調(diào)金踪。如果把窗口設(shè)置小也是10行浊洞。

ls  file* > config
cat config | while  read id
do 
  mv  ${id}  ${id/txt/csv}
done
ls
##${id/txt/csv}把txt變?yōu)閏sv
##while循環(huán)是怎么傳遞的:
#cat config | while  read id,其中cat config 產(chǎn)生10行胡岔,一行就是一個(gè)id

ls  file* > config
cat config | while  read id
do 
  mv  ${id}  ${id.*}
done
ls

while循環(huán)的一個(gè)例子

while循環(huán)批量去掉文件后綴
while循環(huán)去掉后綴

while批量給文件加后綴和替換后綴

while加后綴和替換后綴

while循環(huán)結(jié)合*去掉文件后綴

while循環(huán)結(jié)合*去掉后綴

結(jié)構(gòu)化語句練習(xí):

1.運(yùn)行下面兩句命令

id=example
fastqc ~/Data/${id}.fq
練習(xí)題1

2.用 if 判斷 $? 的是否為0法希,如果是,輸出yes靶瘸,如果否苫亦,輸出no

if [ $? -eq 0 ]
> then
> echo "yes"
> else
> echo "no"
> fi
#yes
##if語句里的[]記得與其它字符之間要有空格
結(jié)構(gòu)語句練習(xí)題2

1到2題的答案:

id=example
fastqc ~/Data/${id}.fq
if [ $? -eq 0 ]
then
  echo "yes"
else 
  echo "no"
fi

3.生成10個(gè)文件,file1~10

 touch file{1..10}

批量創(chuàng)建10個(gè)文件

4.用 while read id 循環(huán)怨咪,在每個(gè)文件中寫入一句話 (提示:echo xxx > ${id} )

#touch file{1..10}
##在第三題上創(chuàng)建的10個(gè)文件進(jìn)行操作
ls
 ls file* >config
 cat config
  cat config | while read id
> do
> echo "hello welcome to Biotrainee()!" >${id}
> done
cat config
cat file1
##hello welcome to Biotrainee()!
######以上是自己一步步探索屋剑,作為除學(xué)者,多敲些代碼
  ls file* | while read id
> do
> echo "hello welcome to Biotrainee()!" >${id}
> done
cat file1
##>表示重定向惊暴,也可以用>>追加饼丘,添加內(nèi)容
結(jié)構(gòu)化練習(xí)題4

3到4題的答案:

touch  file{1..10}

ls file* | while read id
do 
  echo  "xxx"  > ${id}
done
  • 嘗試批量查看文件
cat fiel{1..10}
##報(bào)錯(cuò),不能這么用
cat file*
##可以查看辽话,對于內(nèi)容簡單的文本肄鸽,可以這么看卫病,要是內(nèi)容多,沒意義典徘,會(huì)刷屏
自己試試批量查看純文本文件
說明

以上內(nèi)容是聽生信技能樹小郭老師授課內(nèi)容以及參考課件蟀苛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逮诲,隨后出現(xiàn)的幾起案子帜平,更是在濱河造成了極大的恐慌,老刑警劉巖梅鹦,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆甩,死亡現(xiàn)場離奇詭異,居然都是意外死亡齐唆,警方通過查閱死者的電腦和手機(jī)嗤栓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箍邮,“玉大人茉帅,你說我怎么就攤上這事《П祝” “怎么了堪澎?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長味滞。 經(jīng)常有香客問我樱蛤,道長,這世上最難降的妖魔是什么桃犬? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任刹悴,我火速辦了婚禮,結(jié)果婚禮上攒暇,老公的妹妹穿的比我還像新娘。我一直安慰自己子房,他們只是感情好形用,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著证杭,像睡著了一般田度。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上解愤,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天镇饺,我揣著相機(jī)與錄音,去河邊找鬼送讲。 笑死奸笤,一個(gè)胖子當(dāng)著我的面吹牛惋啃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播监右,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼边灭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了健盒?” 一聲冷哼從身側(cè)響起绒瘦,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扣癣,沒想到半個(gè)月后惰帽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡父虑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年善茎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片频轿。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垂涯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出航邢,到底是詐尸還是另有隱情耕赘,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布膳殷,位于F島的核電站操骡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赚窃。R本人自食惡果不足惜册招,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勒极。 院中可真熱鬧是掰,春花似錦、人聲如沸辱匿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匾七。三九已至絮短,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昨忆,已是汗流浹背丁频。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人席里。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓叔磷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胁勺。 傳聞我的和親對象是個(gè)殘疾皇子世澜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容