shell指令碼裡的變數

2021-07-13 19:45:28 字數 2856 閱讀 6711

1     在命令列中和指令碼中,

變數定義得格式:

name=value             //=左右兩邊不能有空格,否則會當做命令來對待,輸出乙個command not found

echo $name             //echo 列印出變數,引用變數使用$name.

2         單引號和雙引號 語法  和php中相同:

雙引號仍然可以保有變數的內容,但單引號內僅能是一般字元,而不會有特殊符號。

如:myname="$name is me"

echo $myname

jack is me.

myname='$name is me'

echo $myname

$name is me

3檢視環境變數,mysql和shell有類似的功能。

env             //檢視環境變數

set              //檢視區域性變數和環境變數

export  $name       //將區域性變數匯入為環境變數。

4互動式設定變數的值

read    [-pt]   name//具體選項可檢視幫助

:hello world                         //使用者的輸入

echo $name

hello world

declare [-aixr]    name                 //宣告變數得型別

sum=100+300+50

echo $name

100+300+50

declare -i sum=100+50+30

echo $sum

1805             引用陣列變數

就假設使用read得到的陣列

read -p "input the array"  arr

: hello world                              //使用者輸入

echo  $arr[0]

hello[0]               //輸出錯誤,不能這樣呼叫陣列變數。

正確呼叫陣列變數得方式

echo $(arr[1])           //小括號,讓其接合起來。

順便提及在${}//{}大括號中放置command,${}將其返回值取出來。

6               引用${}對變數的操作表:

file=/dir1/dir2/dir3/my.file.txt 

我們可以用 $ 分別替換獲得不同的值: 

$:從變數file的字串左邊開始,刪除字元直到第乙個「/」:dir1/dir2/dir3/my.file.txt 

$:從變數file的字串左邊開始,刪除字元直到最後乙個「/」:my.file.txt 

$:從變數file的字串左邊開始,刪除字元直到第乙個「.」:file.txt 

$:從變數file的字串左邊開始,刪除字元直到最後乙個「.」:txt 

其實,在「#」後面,無非就是乙個匹配問題(是linux中通用的萬用字元),不限於兩個,你可以放任意個字元,還可以用shell中另外的萬用字元「?」「[…]」「[!…]」, 例如: 

$ echo $ 

1/dir2/dir3/my.file.txt 

$ echo $ 

/dir2/dir3/my.file.txt 

$ echo $ 

/dir3/my.file.txt

上面是從頭往後匹配,下面分別是從後往前匹配,和替換:

至於「%」,和「#」不同的地方,就是從變數字串右部開始。 

$:從右部開始拿掉字元,直到遇到(從右部數起的)第乙個「/」 :/dir1/dir2/dir3 

$:從右部開始拿掉字元,直到遇到(從右部數起的)最後乙個「/」:(空值) 

$:從右部開始拿掉字元,直到遇到(從右部數起的)第乙個「.」:/dir1/dir2/dir3/my.file 

$:從右部開始拿掉字元,直到遇到(從右部數起的)最後乙個「.」:/dir1/dir2/dir3/my

替換:

$       //只替換第乙個匹配上的

$       //替換所有匹配上得,是

7萬用字元和特殊符號

符號內容

*萬用字元,代表乙個或多個字元(或數字)

?萬用字元,代表乙個字母

#批註,這個最常被使用在 script 當中,視為說明!

/跳脫符號,將『特殊字元或萬用字元』還原成一般字元

|分隔兩個管線命令的界定 ;

;連續性命令的界定(注意!與管線命令並不相同)

~使用者的家目錄

$亦即是變數之前需要加的變數取代值

&將指令變成背景下工作

!邏輯運算意義上的『非』 not 的意思!

/路徑分隔的符號

>, >>

輸出導向,分別是『取代』與『累加』

'單引號,不具有變數置換的功能

"具有變數置換的功能!

` `兩個『 ` 』中間為可以先執行的指令!

(   )

在中間為子 shell 的起始與結束

[  ]

在中間為字元的組合

在中間為命令區塊的組合!

shell指令碼裡的引號簡介

一 雙引號 使用雙引號可引用除字元 外的任意字元或字串 例 string hello world echo string print hello world echo string print hello world echo string print hello world echo 2 3 pr...

shell指令碼裡的for迴圈和while迴圈

shell 語言作為類 unix 系統的原生指令碼,有著非常實用的價值。但對於很多剛剛接觸 shell 指令碼的同學來說,搞懂 shell 語言的語法卻是一件非常困難的事情。甚至有人吐槽,或許沒有誰能清楚地說明白 shell 的語法。好了廢話不多說,下面就是for迴圈和while迴圈啦!for迴圈 ...

shell指令碼裡相互呼叫的方法

shell寫指令碼通常可以模組化,也可以功能化,例如test1.sh完成乙個獨立功能,test2.sh也完成乙個獨立的功能,但是需要test1.sh作為前提,因此為了節省執行時間,不是用crontab傻瓜似的等待,我們可以在test1.sh裡呼叫test2.sh執行,效率會更高,這裡僅僅介紹兩種在乙...