Shell學習筆記(01)
菜鳥教程上看到的bash教程:https://www.runoob.com/linux/linux-shell.html
Ch01
shell的 "Hello World!",如下:
#!/bin/bash echo "Hello World !"
其中,是一個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 Shell。
執行程式:01、作為可執行程式
chmod +x ./test.sh #使指令碼具有執行許可權
./test.sh #執行指令碼
先更改許可權,x(執行許可權)//Linux的許可權具體資訊,如何定義/更改?
執行指令碼需要檔名前加上". /",表示在當前目錄尋找檔案。
2、作為直譯器引數
/bin/sh test.sh
/bin/php test.php
//PHP是啥語言?
Ch02.變數
1.變數的定義
your_name="runoob.com"
變數與等號之間不能有空格。
變數規則:
001.命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭;
002.中間不能有空格,可以使用下劃線(_);
002.不能使用標點符號以及bash裡的關鍵字;
2.使用變數
使用一個定義過的變數,只要在變數名前面加美元符號即可
your_name="qinjx" echo $your_name echo ${your_name}
花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界,建議加;
變數可以被重新賦值:
your_name="tom" echo $your_name your_name="alibaba" echo $your_name
賦值的時候不能寫$your_name="alibaba",使用變數的時候才加美元符($);
3.只讀變數 readonly
#!/bin/bash myUrl="https://www.google.com" readonly myUrl myUrl="https://www.runoob.com"
程式會報錯!改為只讀之後就不能改變。//Shell為什麼會有這種需求?
4.刪除變數 unset
#!/bin/sh myUrl="https://www.runoob.com" unset myUrl echo $myUrl
變數被刪除後不能再次使用。unset 命令不能刪除只讀變數。
5.變數型別
1) 區域性變數:區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數;
2) 環境變數:所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數;
3) shell變數:shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行;
Shell 字串
單引號
str='this is a string'
單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
雙引號
your_name='runoob' str="Hello, I know you are \"$your_name\"! \n" echo -e $str
可以有變數,可以出現轉義字元
字串的拼接
your_name="runoob" # 使用雙引號拼接 greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # 使用單引號拼接 greeting_2='hello, '$your_name' !' greeting_3='hello, ${your_name} !' echo $greeting_2 $greeting_3
輸出結果
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
獲取字串長度
string="abcd" echo ${#string} #輸出 4
//Python: len(string)
提取子字串
以下例項從字串第 2 個字元開始擷取 4 個字元:
string="runoob is a great site" echo ${string:1:4} # 輸出 unoo
查詢子字串
查詢字元 i 或 o 的位置(哪個字母先出現就計算哪個):
string="runoob is a great site" echo `expr index "$string" io` # 輸出 4
`為反引號,鍵盤上數字1左邊的鍵
shell陣列
定義
array_name=(value0 value1 value2 value3)
或者分別賦值
array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
可以不使用連續的下標,而且下標的範圍沒有限制。
讀取陣列
valuen=${array_name[n]}
#讀取全部
echo ${array_name[@]}
即,${陣列[位置]}
獲取長度
# 取得陣列元素的個數 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得陣列單個元素的長度 lengthn=${#array_name[n]}
註釋
單行
#
#單行註釋
#
多行
:<<EOF 註釋內容... 註釋內容... 註釋內容... EOF #也可以替換 "EOF"