使用者登入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 形式儲存所有輸入的命令列引數 以 ...