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執行,效率會更高,這裡僅僅介紹兩種在乙...