1. 程式人生 > 實用技巧 >Shell學習筆記(01)

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

查詢子字串

查詢字元 io 的位置(哪個字母先出現就計算哪個):

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"