Shell是什么?
shell本身是一個命令解釋器,介于操作系統的內核(kernel)和用戶之間,可以執行系統調用及系統命令等,讓用戶以此來與操作系統實現互動。同時,它也用來指一種計算機程序語言(類似于C、Python等)。一個shell程序一般被稱為一個腳本。
Shell語言的流派
目前,shell主要有兩大流派:
sh:
burne shell (sh) burne again shell (bash)
csh:
c shell (csh) tc shell (tcsh) korn shell (ksh)
目前,大部分linux系統預設的shell都是bash。
Shell 編程概述
在 Linux 下有一門腳本語言叫做:Shell 腳本,這個腳本語言可以幫助我們簡化很多工作,例如批量運行一些命令等,所以還是很有必要學習它的基本用法的,一個簡單的 hello.sh 腳本像下面這樣。
#!/bin/bash echo "Hello World!"
第一行 #!/bin/bash 標識該 Shell 腳本由哪個 Shell 解釋:/bin/bash。將上面的兩行內容寫到文件hello.sh中,就可以執行了:
執行shell腳本方法1:
#這樣可以省略第一行的:#!/bin/bash sh ./hello.sh
執行shell腳本方法2:賦予權限才可以執行:
# 賦予可執行權限 chmod a+x hello.sh # 執行 文件的第一行必須指定執行shell的路徑:#!/bin/bash ./hello.sh # 結果 Hello World!
Shell 變量
Shell 變量分為 3 種:
- 用戶自定義變量
- 預定義變量
- 環境變量
定義變量需要注意下面 2 點:
- 等號前后不要有空格:NUM=10
- 一般變量名用大寫:M=1
使用 $ 符號調用變量,例如:
VAR="Hello Shell!" echo $VAR
注意:變量定義直接給變量取名字,變量值如果字符串中有空格等特殊字符需要用引號引起來,這樣VAR變量中存儲了一個字符串,再次調用變量的值需要加符號:$VAR
1. 用戶自定義變量
支持字符串類型,浮點等類型,常見有這 3 個前綴:
- unset:刪除變量
- readonly:標記只讀變量
- export:指定全局變量
注:可將上面內容存入一個sh結尾的文件中運行;
2. 預定義變量
預定義變量常用來獲取命令行的輸入,有下面這些:
一個例子:
執行./hello.sh 1 2 3 4 5 的結果:
3. 環境變量
環境變量默認就存在的變量,常用的有下面這幾個:
- HOME:用戶主目錄
- PATH:系統環境變量 PATH
- TERM:當前終端
- UID:當前用戶 ID
- PWD:當前工作目錄,絕對路徑
還是看例子:
運行結果:
shell 語句
1. if 語句
這個跟高級語言的 if - else - if 類似,只是格式有些不同而已,也來看個例子吧:
2. for 循環
這是一個 for 循環基本使用例子,挺簡單的,有點類似 Python:
運行結果:
3. while 循環
注意與 for 循環的區別:
運行結果:
shell命令應用:
其實我們打開的linux的終端也是一個shell,上面很多命令不用存到文件中也可以直接在終端運行;下面舉例shell編程的運用;
1.利用循環批量生成命令,分別存儲到不同的文件:
#注意:命令寫成一行的時候用 ; 分隔不同語句塊。 for i in xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan;do echo "perl /share/work/huangls/piplines/01.script/kegg_update_get_anno.pl $i $i.anno $i.fa" >$i.sh;done
2.利用循環批量修改文件名:
這里我想把下面文件名字中紅色字符批量刪除:(這里需要提前學習字符截取)
命令示例如下: