shell程式設計

2021-07-28 12:48:01 字數 3109 閱讀 6745

使用者登入linux後,就會出現乙個系統提示符號,可以再符號後輸入一大堆命令,並取得預期效果,

shell起到幕後作用,當使用者登入時,實際上是進入到乙個叫shell的程式中。shell擔任了翻譯的角色

將使用者輸入的每個命令翻譯成linux系統能夠識別的指令。

當shell收到使用者輸入的命令後,就開始執行這項命令,並把結果顯示到螢幕上,結束後shell又會顯示

系統提示符,等待使用者輸入下一跳命令。

在命令後面加上 & 就可以後台執行

fg是將後台的回到前台執行

如果有多個後台程式的話,jobs會列出所有在後台執行的程序,每個會有相應的代號

這時再通過fg % number(代號) 就可以恢復指定的後台程序。

-在.bash_profile 中定義的變數在使用者登入後一直有效

-在普通指令碼檔案中定義的變數只在指令碼內部有效

/etc/profile

*這是系統的shell設定檔案,使用者可以將系統最重要的環境變數定義到這個檔案中。

每次登陸的時候bash就會讀這個檔案

~/.bash_profile 

*是使用者個人的bash設定檔案,使用者登入的時候bash就會讀取該使用者目錄下的.bash_profile檔案

~/.bashrc

*每次啟動shell時候都會讀取這個檔案。

#! /bin/sh

a=3b=5

if (test "$a" = "$b" ) then

echo a=b

else

echo a!=b

fi

$0當前指令碼的檔名

$n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。

$#傳遞給指令碼或函式的引數個數。

$*傳遞給指令碼或函式的所有引數。

$@傳遞給指令碼或函式的所有引數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。

$?上個命令的退出狀態,或函式的返回值。

$$當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。

$* 和 $@ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有引數。

但是當它們被雙引號(" ")包含時,"$*" 會將所有的引數作為乙個整體,以"$1 $2 … $n"的形式輸出所有引數;"$@" 會將各個引數分開,以"$1" "$2" … "$n" 的形式輸出所有引數。

形式說明

$變數本來的值

$如果變數 var 為空或已被刪除(unset),那麼返回 word,但不改變 var 的值。

$如果變數 var 為空或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。

$如果變數 var 為空或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。

若此替換出現在shell指令碼中,那麼指令碼將停止執行。

$如果變數 var 被定義,那麼返回 word,但不改變 var 的值。

算術運算子列表

運算子說明舉例+加法

`expr $a + $b` 結果為 30。-減法

`expr $a - $b` 結果為 10。*乘法

`expr $a \* $b` 結果為  200。/除法

`expr $b / $a` 結果為 2。%取餘

`expr $b % $a` 結果為 0。=賦值

a=$b 將把變數 b 的值賦給 a。

==相等。用於比較兩個數字,相同則返回 true。

[ $a == $b ] 返回 false。

!=不相等。用於比較兩個數字,不相同則返回 true。

[ $a != $b ] 返回 true。

關係運算子列表

運算子說明舉例

-eq檢測兩個數是否相等,相等返回 true。

[ $a -eq $b ] 返回 true。

-ne檢測兩個數是否相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

-gt檢測左邊的數是否大於右邊的,如果是,則返回 true。

[ $a -gt $b ] 返回 false。

-lt檢測左邊的數是否小於右邊的,如果是,則返回 true。

[ $a -lt $b ] 返回 true。

-ge檢測左邊的數是否大等於右邊的,如果是,則返回 true。

[ $a -ge $b ] 返回 false。

-le檢測左邊的數是否小於等於右邊的,如果是,則返回 true。

[ $a -le $b ] 返回 true。

1 #!/bin/bash 

2  3 str='this is a string' 

4 #單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的 

5 #單引號字串中不能出現單引號(對單引號 

6  7  

8 your_name='qinjx' 

9  10 str="hello,i know you are \"$your_name\"! \n" 

11  

12 #雙引號裡可以有變數 

13 #雙引號裡可以出現轉義字元 

14  

15 #獲取字串長度 

16 string="abcd" 

17 echo $ 

18  

19 #提取字串長度 

20 string="alibaba is great company" 

21 echo $ #輸出liba 

22  

23 #echo `expr index "$string" company`是在$string裡查詢company裡的任一字元,返回最早出現的位置,1是company裡a的位置; 

24 #反引號· · 裡的內容被認為是命令,裡面$string不需要加」 「也能使用,但是變數的內容會被當作命令執行"" 

25 string="alibaba is a great company" 

26 echo `expr index "$string" company`

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...

Shell程式設計 Shell函式

shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...

Shell程式設計

1 建立指令碼 vi emacs等即可 bin sh 2 shell變數 對shell來講,所有的變數的取值都是乙個字串 shell是一種解釋性語言,變數無需事先定義 shell中的系統變數 程式命令列引數的數目 儲存前乙個命令的返回值 0 當前程式名 以 1 2 形式儲存所有輸入的命令列引數 以 ...