shell學習筆記(一)

2021-09-19 05:45:43 字數 3071 閱讀 7658

變數

變數名稱只能是英文與數字的組合,但是不能以數字開頭命名變數。變數預設型別為字串,變數與變數的值用=號鏈結,等號兩邊不能有空格,如果變數的值帶有空格,那麼就需要用到"或』將內容包起來,"或』必須是成對出現。雙引號裡面的特殊字元如$等會保持其原本特性,而單引號內的特殊字元則作為純文字。

echo

echo相當與python裡面的print,可以列印輸出到螢幕上,而shell裡面取出變數的值就是使用echo。例:echo $變數名 或 echo $。

例:var=」lang is $lang",當echo $var 輸出是

lang is zh_cn.utf-8

var=『lang is $lang』,echo $var 的輸出是

lang is $lang

字元拼接

day=sunday

var1="what day is today?"

var2="today is $day"

var3='today is $day'

echo $var1 var2

what day is today? today is sunday << ""包圍的內容保持特性

echo $var1 var3

what day is today? today is $day << ''包圍的內容為直接輸出

字元長度
var=12345

echo $

5 << shell裡面變數的值一般為字元,這裡12345非數值

字元切片
word='hello world!'

echo $

o wo << 字串從0開始,第乙個:4為從第5個字元開始,後面的:4為取4個字元,所以結果為o wo

變數內容遇到需要使用特殊符號($ * 』 回車 空白 等)的時候,可以使用\來轉義

例:job=「i』m a student」 或 job=i\'m\ a\ student,echo $job輸出的是

i』m a student

變數的值是一串命令的時候就需要用到`命令`或$(命令)。

例:version=`uname -r` 或a=$(ls -al)

取消變數使用unset 變數名

$$、$?、locale

echo $$也是變數,代表當前shell的pid

echo $?(上乙個執行的命令的回傳值),上乙個指令執行成功會返回0,失敗則會返回錯誤**

locale -a 用於檢視環境字符集

read、declare

陣列(array)

# 新建陣列

list=(

value0

value1

value2

value3

)# 陣列取值

echo $ << n為陣列的索引

# 取出所以的值

echo $

# 陣列賦值

list[n]=value

# 取得陣列元素的個數

echo nums=$

# 或者

echo nums=$

# 取得陣列單個元素的長度

echo long=$

刪除、取代

刪除變數的值從前面開始刪除:$#是從前面開始刪除匹配到的第乙個最短的內容,##是從前面開始刪除匹配到的第乙個最長的內容。例:

word=aaaab

echo $

aab >> 因為*是0至無限個,所以#匹配到的最短內容是aa

echo $

b >> ##匹配到的最長內容是aaaa

echo $

aaaab >> 要刪除第乙個最短內容是ab,而前面匹配到的是aa,故無法刪除

變數的值從後面開始刪除:$%是從後面開始刪除匹配到的第乙個最短的內容,%%是從後面開始刪除匹配到的第乙個最長的內容。例:

word=aaaab

echo $

aaa >> 匹配到的是最後的ab

echo $

>> 都匹配上,所以全刪了

echo $

aaaab >> 第乙個匹配到的是b,故無法刪除

**注意**

上面這2種方法總是從前面第乙個或後面第乙個開始刪除,如果第乙個匹配不上,則無法刪除,所以在中間的內容這種方法是無法刪除,例如變數的值是abc,上述方法是無法單獨刪除b的。

取代$,前面是乙個/時,則匹配到第乙個內容進行取代,前面是//是,則是全部匹配上都進行取代。如果沒有新內容,可以理解為刪除。例:

word=abab

echo $

cbab >> c取代第乙個a

echo $

cbcb >> c取代a

echo $

bab >> 第乙個a被刪除

echo $

bb >> 所有a被刪除

set、env、export、source、exec

乙個程序可以生成另乙個程序,生成的程序稱為子程序,那麼相應的就有父程序,子程序從父程序處會繼承一些遺傳因素,其中就包括本文的主題環境變數。環境變數是一組特殊的字元型變數,由於具有繼承性質,環境變數也經常用於父子程序傳遞引數用。

shell學習筆記(一)

1.在變數的設定中,單引號與雙引號有什麼不同呢?單引號與雙引號的最大的不同在於雙引號仍然可以保有變數的內容,但單引號僅能是一般字元,而不會有特殊符號。2.在指令下達的過程中,quote 這個符號代表的意義為何?在一串指令中,在 之內的指令將會被先執行,而其執行出來的結果將作為外部的輸入資訊!例如 u...

shell學習筆記(一)

1.history 執行命令歷史紀錄 2.執行上一次命令3.n執行這條命令4.vim執行最近的乙個 vim 5.alias 可以簡單修改名字別名也就是把貓叫個咪 也可以比如 alias ls 6.ctrl z jobs,fg bg作業控制 7.mail s vayne 1219345363 qq.c...

shell學習筆記(一)

一.指令碼編寫和使用 1.sh指令碼宣告 bin sh 2.注釋寫法 該行都是 3.使指令碼可執行 chmod x filename 4.執行指令碼 在終端terminal中輸入.filename即可 二.變數的定義和使用 1.定義變數 變數名 屬性值 2.使用變數 變數名 大括號用來表示變數名的範...