一篇文章讓你讀懂linux shell編程--基礎篇

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 種:

  1. 用戶自定義變量
  2. 預定義變量
  3. 環境變量

定義變量需要注意下面 2 點:

  1. 等號前後不要有空格:NUM=10
  2. 一般變量名用大寫:M=1

使用 $ 符號調用變量,例如:

VAR="Hello Shell!"
echo $VAR

注意:變量定義直接給變量取名字,變量值如果字符串中有空格等特殊字符需要用引號引起來,這樣VAR變量中存儲了一個字符串,再次調用變量的值需要加符號:$VAR

1. 用戶自定義變量

支持字符串類型,浮點等類型,常見有這 3 個前綴:

  1. unset:刪除變量
  2. readonly:標記只讀變量
  3. export:指定全局變量
一篇文章讓你讀懂linux shell編程--基礎篇

注:可將上面內容存入一個sh結尾的文件中運行;

2. 預定義變量

預定義變量常用來獲取命令行的輸入,有下面這些:

一篇文章讓你讀懂linux shell編程--基礎篇

一個例子:

一篇文章讓你讀懂linux shell編程--基礎篇

執行./hello.sh 1 2 3 4 5 的結果:

一篇文章讓你讀懂linux shell編程--基礎篇

3. 環境變量

環境變量默認就存在的變量,常用的有下面這幾個:

  1. HOME:用戶主目錄
  2. PATH:系統環境變量 PATH
  3. TERM:當前終端
  4. UID:當前用戶 ID
  5. PWD:當前工作目錄,絕對路徑

還是看例子:

一篇文章讓你讀懂linux shell編程--基礎篇

運行結果:

一篇文章讓你讀懂linux shell編程--基礎篇

shell 語句

1. if 語句

這個跟高級語言的 if - else - if 類似,只是格式有些不同而已,也來看個例子吧:

一篇文章讓你讀懂linux shell編程--基礎篇

2. for 循環

這是一個 for 循環基本使用例子,挺簡單的,有點類似 Python:

一篇文章讓你讀懂linux shell編程--基礎篇

運行結果:

一篇文章讓你讀懂linux shell編程--基礎篇

3. while 循環

注意與 for 循環的區別:

一篇文章讓你讀懂linux shell編程--基礎篇

運行結果:

一篇文章讓你讀懂linux shell編程--基礎篇

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
一篇文章讓你讀懂linux shell編程--基礎篇

2.利用循環批量修改文件名:

這裡我想把下面文件名字中紅色字符批量刪除:(這裡需要提前學習字符截取)

一篇文章讓你讀懂linux shell編程--基礎篇

命令示例如下:

一篇文章讓你讀懂linux shell編程--基礎篇

=======================================================

注:正在學習C/C++ linux的小夥伴需要學習資料的可以私信“資料”免費分享全套學習資料哦

"


分享到:


相關文章: