引言
第1章
學(xué)習(xí) shell
第2章
第3章
第4章
第5章
第6章
第7章
第8章
第9章
第10章
第11章
配置文件和 shell 環(huán)境
第12章
第13章
第14章
常見任務(wù)和基本工具
第15章
第16章
第17章
第18章
第19章
第20章
第21章
第22章
第23章
第24章
編寫 Shell 腳本
第25章
第26章
第27章
第28章
第29章
第30章
第31章
第32章
第33章
第34章
第35章
第36章
第37章
第1章
內(nèi)容略
第2章
bash是shell的增強版本
和shell交互的工具叫終端訪問器,一般稱為terminal
[me@linuxbox ~]$ #用戶名@主機名孝冒,如果最后一個字符是#冯痢,則說明超級管理員用戶
簡單命令
cal #顯示日歷
date #顯示日期
df #顯示磁盤剩余空間數(shù)量
free #顯示空閑內(nèi)存的數(shù)量
exit #退出終端
第3章:文件系統(tǒng)中跳轉(zhuǎn)
linux的文件結(jié)構(gòu)形式是樹結(jié)果,根節(jié)點是"/",所有的文件都是掛載在這個根節(jié)點上面,絕對路徑是從這個根節(jié)點開始峡扩,相對路徑參考下面。
pwd #顯示當(dāng)前目錄
ls #顯示所有文件
ls -a #會顯示隱藏文件
ls -l #顯示長格式文件
cd #改變文件目錄
cd - #更改到先前的工作目錄
cd ~ #改變到文件當(dāng)前目錄下面
. #當(dāng)前目錄
.. #當(dāng)前目錄的家目錄
第4章:探究操作系統(tǒng)
file filename #在文本中查看文件類型
less filename #查看文件內(nèi)容灼芭,按q退出
cat filename #查看文件內(nèi)容
顯示長格式內(nèi)容以及各自的意義
#格式參考command -options arguments
ls -l
#顯示結(jié)果:
-rw-r--r-- 1 root root 3576296 2007-04-03 11:05 ubuntu.ogg
-rw-r--r-- :第一個符號表示文件的類型有额,-表示普通文件,第一個位數(shù)表示文件擁有者的權(quán)限彼绷,第二個三位數(shù)表示用戶組的權(quán)限,第三個三位數(shù)表示其他用戶的權(quán)限
1:表示文件的硬鏈接數(shù)目
root: 表示文件所有者名稱
root: 表示用戶組名稱
3576296:表示文件內(nèi)容大小
2007-04-03 11:05:文件最后一次修改時間
ubuntu.ogg:表示文件名稱
第五章:操作文件和目錄
通配符
* 匹配任意多個字符(包括零個或一個)
? 匹配任意一個字符(不包括零個)
[characters] 匹配任意一個屬于字符集中的字符
[!characters] 匹配任意一個不是字符集中的字符
[[:class:]] 匹配任意一個屬于指定字符類中的字符
[:alnum:] 匹配任意一個字母或數(shù)字
[:alpha:] 匹配任意一個字母
[:digit:] 匹配任意一個數(shù)字
[:lower:] 匹配任意一個小寫字母
[:upper] 匹配任意一個大寫字母
舉例:
[[:upper:]]* 以大寫字母開頭的文件
[![:digit:]]* 不以數(shù)字開頭的文件
*[[:lower:]123] 文件名以小寫字母結(jié)尾茴迁,或以 “1”寄悯,“2”,或 “3” 結(jié)尾的文件
常用命令
#建立文件夾堕义,可以一次性建立多個文件夾
mkdir dir1 dir2
#復(fù)制文件,如果目的文件沒有猜旬,會創(chuàng)建這個文件
cp file1 file2
cp -r dir1 dir2 #對于文件夾,要添加參數(shù)-r(recursive 遞歸 循環(huán))
#移動文件
#也可以實現(xiàn)重命名
mv file1 file2 #移動 file1 到 file2倦卖。如果 file2 存在洒擦,它的內(nèi)容會被 file1 的內(nèi)容重寫。 如果 file2 不存在怕膛,則創(chuàng)建 file2熟嫩。每種情況下,file1 不再存在褐捻。
mv file1 file2 dir1 #移動 file1 和 file2 到目錄 dir1 中掸茅。dir1 必須已經(jīng)存在
mv dir1 dir2 # 如果目錄 dir2 不存在椅邓,創(chuàng)建目錄 dir2,并且移動目錄 dir1 的內(nèi)容到 目錄 dir2 中昧狮,同時刪除目錄 dir1
#刪除文件
rm file 刪除文件
rm -r dir 刪除文件夾景馁,添加參數(shù) -r
硬鏈接和軟鏈接
#硬鏈接的局限性
1.不能在不同的分區(qū)上建立鏈接
2.不能對文件夾建立鏈接
#格式
ln name name_one #建立硬鏈接
ln -s name name_one #建立軟鏈接
#查看是否是鏈接
- #硬鏈接的形式一般都是“-”
l #軟鏈接的形式一般都是“l(fā)”
ls -li #通過文件索引號來判斷是否是指向同一文件的鏈接
第六章:使用命令
命令的種類:
1、可執(zhí)行程序
2逗鸣、shell腳本
3合住、內(nèi)建的shell程序
4、別名
常用命令
type command #顯示命令的類型
which command #顯示可執(zhí)行程序的位置撒璧,針對的是可執(zhí)行程序
help command #顯示命令文檔
man command #顯示程序手冊
使用alias創(chuàng)建命令
#首先要給這個命令命名透葛,查看這個命令是否已經(jīng)有
type command
#對命令進行命名
alias foo='cd /usr; ls; cd -' #注意結(jié)構(gòu)是 alias foo='string',其中命令間以分號結(jié)束
#取消這個命令
unalias foo
#查看已經(jīng)被別名的命令
alias
第七章:重定向
標準輸出
在ubuntu下面建立一個文件沪悲,一般情況需要改變文件的權(quán)限获洲,文件流的前三個看作標準輸入,輸出和錯誤殿如,shell 內(nèi)部參考它們?yōu)槲募枋龇?猴娩,1和2
#將標準輸出導(dǎo)入到文件中
ls -l /usr/bin > ls-output.txt
#清空文件中的內(nèi)容
ls-output.txt
#使用上面方法款青,每次都會清空再來,繼續(xù)添加的方式為
ls -l /usr/bin >> ls-output.txt
#重定向標準錯誤
ls -l /bin/usr 2> ls-error.txt
#重定向標準輸出和錯誤到同一個文件中,第二種方式為最新方式
ls -l /bin/usr > ls-output.txt 2>&1 #“2>&1”等同于“>&2”
ls -l /bin/usr &> ls-output.txt
常用命令
cat demo.txt #用來顯示簡短的文本內(nèi)容
cat > demo.txt #輸入文本內(nèi)容臭增,ctrl+d結(jié)束之后內(nèi)容就到了demo.txt
#管道線 ,標準輸入可以作為標準輸出
command1 | command2 #格式
ls -l /usr/bin | less #ls -l /usr/bin 可以作為標準輸出歼指,該輸出作為less的標準輸入
ls /bin /usr/bin | sort | less #也可以作為過濾器進行使用
uniq #忽略重復(fù)行
wc #打印行卖丸,字和字節(jié)數(shù)
grep #輸出匹配行
head/tail - 輸出文件開頭部分/結(jié)尾部分,默認十行
head -n 5 ls-output.txt
tail -n 5 ls-output.txt
tee #從 Stdin 讀取數(shù)據(jù),并同時輸出到 Stdout 和文件
ls /usr/bin | tee ls.txt | grep zip #將ls /usr/bin結(jié)果輸出到tee ls.txt文件中帮坚,并和grep zip建立管道
第八章:從 shell 眼中看世界
這個章節(jié)內(nèi)容主要說的是展開妻往,理解就好,但是文字很難表述清楚
echo * #展開當(dāng)前目錄下的所有文件
echo $USER #展開這個值 vagrant
echo $((expression)) #計算表達式的公司 echo $((1+1))
echo Number_{1..2} #花括號展開Number_1试和,Number_2
轉(zhuǎn)義字符 “/”,對于特殊符號讯泣,可以進行轉(zhuǎn)義
第九章:鍵盤高級操作技巧
常見命令
clear #清屏
tab #進行補全
第十章:權(quán)限
輸入 ls -l 會顯示如下內(nèi)容:
-rwxrwxrwx
其中第一個符號表示文件類型,其中
- #普通文件
d #目錄
l #鏈接
c #字符設(shè)備阅悍,比如終端機
b #塊設(shè)備好渠,比如硬盤
另外9個字符,3個為1組节视,分別屬于文件擁有者(用戶屬于一個用戶組)拳锚、用戶組用戶,其他用戶寻行,其中
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx
其中r表示可讀霍掺,w表示可寫,x表示可執(zhí)行。
chmod 777 demo.rb #給文件所有者抗楔,用戶組棋凳,其他用戶rwx權(quán)限
#還有一種符號權(quán)限,詳見書中解釋
設(shè)置新生成文件的默認權(quán)限umask
#以ubuntu為例
umask #0002
#設(shè)置默認權(quán)限為0000
umask 0000
#umask一般是三位连躏,osx是三位剩岳,ubuntu是四位,第一位可以不用管入热,書中詳細進行了敘述
000 分別對應(yīng) rw-rw-rw-
#如果設(shè)置為002,則2數(shù)字對應(yīng)的位置被設(shè)置成取消權(quán)限位
002 分別對應(yīng) rw-rw-r--
常用命令:
su #以其他用戶身份登錄
#已vagrant ubuntu14.04為例拍棕,下面方法可以切換到root用戶
su
輸入密碼:vagrant
#在root用戶下面建立其他用戶
useradd -m -s /bin/bash deploy(用戶名)
其中:-s /bin/bash 指的是用bash進行登錄,-m可以直接在/home下面建立deploy文件夾
passwd depoy #修改密碼
su depoy #切換到depoly用戶
adduser deploy sudo #添加deploy到sudo組
gpasswd -d deploy sudo #從sudo組中刪除deploy用戶
#或者直接在root用戶下面給deploy添加sudo操作
adduser deploy --ingroup sudo
#疑問勺良,在deploy沒有分配組的時候绰播,可以隨意創(chuàng)建文件,但是有組之后就不行了尚困,必須使用sudo
備注:新增加的用戶默認是不在sudo組內(nèi)的蠢箩,如果要使用sudominlg
groupadd group1 #在root權(quán)限下添加用戶組
groupdel group1 #刪除用戶組
adduser deploy group1 #將用戶deploy添加到用戶組中
chown user1 demo.txt #更改文件所有者
#查看用戶組以及相關(guān)用戶信息
cat /etc/group
第十一章:進程
常用命令
備注:每個進程都有pid值和id值,這個端口號無關(guān)事甜。
#顯示與終端相關(guān)的進程信息
ps #即使process的縮寫谬泌,能夠羅列出進程的pid值
ps x #顯示系統(tǒng)運行狀態(tài)的信息
ps aux #顯示每個用戶的進程信息
#動態(tài)顯示當(dāng)前的進程信息
top #備注ps只能顯示當(dāng)前的進程信息,而top會動態(tài)顯示當(dāng)前進程信息信息
top | grep redis #top顯示的進程往往很多逻谦,可以進行過濾
#顯示從終端啟動的任務(wù)
jobs
#從終端啟動掌实,但是將任務(wù)放在后臺執(zhí)行,添加&即可
redis-server & #啟動任務(wù)邦马,但是任務(wù)放在后臺
bg %1 #將任務(wù)放在后臺執(zhí)行贱鼻,%1可以通過jobs查詢
fg %1 #將任務(wù)放在前臺執(zhí)行,%1可以通過jobs查詢
#殺死進程
kill -9 pid #其中的pid值是進程的pid值
第十二章:shell環(huán)境
shell在環(huán)境中存儲了兩種數(shù)據(jù)滋将,一種是環(huán)境變量邻悬,另外一種是shell變量
printenv #顯示環(huán)境變量
set #顯示環(huán)境變量和shell變量
建立shell環(huán)境
啟動 bash 程序,并且會讀取一系列稱為啟動文件的配置腳本随闽, 這些文件定義了默認的可供所有用戶共享的 shell 環(huán)境拘悦,也分兩種情況,分別是是登錄 shell 會話橱脸,另一個是非登錄 shell 會話。
登錄shell會話分苇,包括兩種情況添诉,一種是按照用戶名和密碼shell登錄,另外一種是通過執(zhí)行“ bash --login”形式讓shell成為登錄會話医寿,下面的代碼沒有包括進去.bashrc,shell在登錄情況下真實的執(zhí)行次序是[Execution sequence for .bash_profile, .bashrc, .bash_login, .profile and .bash_logout’]
#以ubuntu為例偽碼
execute /etc/profile
IF ~/.bash_profile exists THEN
execute ~/.bash_profile
ELSE
IF ~/.bash_login exist THEN
execute ~/.bash_login
ELSE
IF ~/.profile exist THEN
execute ~/.profile
END IF
END IF
END IF
#當(dāng)用戶退出時
IF ~/.bash_logout exists THEN
execute ~/.bash_logout
END IF
非登錄shell會話
#以ubuntu為例
execute /etc/bash.bashrc
IF ~/.bashrc exists THEN
execute ~/.bashrc
END IF
總結(jié)上面的代碼:
全局配置(對所有用戶都有效)
/etc/profile
/etc/bash.bashrc
當(dāng)前用戶配置(僅對當(dāng)前登錄用戶有效)
~/.bashrc
~/.bash_profile#讀取這個文件的時候栏赴,里面會讀取.bashrc文件
~/.bash_login
~/.profile
一個啟動文件 .bash_profile及相應(yīng)解釋
#如果存在這個文件,執(zhí)行該文件
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
#添加$HOME/bin這個路徑到path中靖秩,$HOME
PATH=$PATH:$HOME/bin
#告訴 shell 讓這個 shell 的子進程可以使用 PATH 變量的內(nèi)容
export PATH
修改后的文件不會立即生效须眷,關(guān)閉shell終端竖瘾,重啟會生效,或者終端下執(zhí)行下面的命令
source .bashrc
第十三章 : vi 簡介
堅持的原則是:用到的時候再查
常用又記不住的快捷鍵
$ #到行的末尾
/ #光標移動到第一行花颗,可以進行全文檢索
:%s/Line/line/g #進行替換
第十五章 : 軟件包管理
軟件包管理是指系統(tǒng)中一種安裝和維護軟件的方法.
ubuntu 軟件安裝方式:
sudo apt-get update #更新源
sudo apt-get install git
sudo apt-get remove git
第十六章 : 存儲媒介
內(nèi)容略
第十七章 : 網(wǎng)絡(luò)系統(tǒng)
第二十章 : 正則表達式
一般形式捕传,查找文件名中包含子字符串“zip”的所有文件
ls /usr/bin | grep zip
grep 程序以這樣的方式來接受選項和參數(shù)
grep [options] regex [file...]
grep zip demo*.rb #顯示文件以及包含的相應(yīng)字符
grep -l zip demo*.rb #打印包含匹配項的文件名,而不是文本行本身
grep -L zip demo*.rb #打印不包含匹配項的文件名
元字符
^ $ . [ ] { } - ? * + ( ) | \
其他字符是普通字符扩劝,比如上面提到的zip,表示自身庸论,可以用反斜杠加元字符表示元字符自身,一般表示命令的時候棒呛,需要加上雙引號聂示,防止展開。
#中間的regex如果涉及元字符簇秒,必須用引號表示
grep -h '.zip' dirlist*.txt
#對于.zip需要注意的是需要匹配四個字符鱼喉,而不是三個,zip是不匹配的
錨點
grep -h '^zip' dirlist*.txt #zip開頭
grep -h 'zip$' dirlist*.txt #zip結(jié)尾
grep -h '^zip$' dirlist*.txt #zip單獨一行
‘^$’ #會匹配空行
中括號表達式
grep -h '[bg]zip' dirlist*.txt #匹配b或者g中的任意一個
否定
grep -h '[^bg]zip' dirlist*.txt #匹配不是b或者g中的任意一個趋观,不匹配zip,而且“^”在[]第一個字符有效
限定符
? - 匹配零個或一個元素
* - 匹配零個或多個元素
+ - 匹配一個或多個元素
{ } - 匹配特定個數(shù)的元素
第二十二章 : 格式化輸出
常用命令
nl – 添加行號 例如:nl demo.rb
fold – 限制文件列寬 例如:fold -w 12
fmt – 一個簡單的文本格式轉(zhuǎn)換器 例如(格式成50個字符寬):fmt -w 50 fmt-info.txt
第二十三章 : 打印
內(nèi)容略
第二十四章 : 編譯程序
基本命令:
#分析程序建立環(huán)境扛禽,會建立makefile文件
./configure
#構(gòu)建程序
make
#安裝程序
make install
第二十五章 : 編寫第一個 Shell 腳本
第一個腳本內(nèi)容如下:
#!/bin/bash
# This is our first script.
echo 'Hello World!'
注意下面的幾點:
1、這個文件必須是可執(zhí)行的拆内,所以需要sudo chomod 755 file
至于說文件可執(zhí)行和文件被ruby解釋器執(zhí)行是兩碼事旋圆,比如建立如下文件:
#demo.rb
puts "this is the demo"
#終端執(zhí)行demo.rb
ruby demo.rb #this is the demo,獲得相應(yīng)的結(jié)果
上面的例子是ruby 解釋執(zhí)行demo.rb文件,而不是說這個文件是可執(zhí)行文件麸恍,如果是可執(zhí)行文件應(yīng)該是進行如下代碼所示
#demo.rb
#!/usr/bin/env ruby
puts "this is the demo"
終端執(zhí)行文件灵巧,必須明確路徑
./demo.rb #this is the demo
2、shebang的解釋
"#!"說明的是: 這個 shebang 被用來告訴操作系統(tǒng)將執(zhí)行此腳本所用的解釋器的名字抹沪。每個 shell 腳本都應(yīng)該把這一文本行 作為它的第一行刻肄。
比如:
#!/bin/bash
#!/usr/bin/env ruby
對上面兩個名字的解釋,一般寫shebang的解釋器都是些絕對路徑融欧,比如#!/bin/bash,這是bash解釋器的絕對路徑敏弃,但是有時候不知道解釋器安裝在哪里,比如說ruby解釋器噪馏,所以可以參考第二種方法麦到,#!/usr/bin/env ruby這種方法會從PATH中尋找ruby解釋器的位置。
3欠肾、解釋執(zhí)行的必須明確路徑
在上面的文件中執(zhí)行demo.rb文件的方法是如下:
./demo.rb #其中“./”表示的是當(dāng)前的文件夾瓶颠,結(jié)果為 this is the demo
demo.rb
#但是如果直接執(zhí)行demo.rb,會出現(xiàn)現(xiàn)在結(jié)果 bash: hello_world: command not found
如果只是執(zhí)行demo.rb文件,那么會從PATH中尋找可執(zhí)行程序刺桃,發(fā)現(xiàn)并沒有找到,得到上面的結(jié)果粹淋。解決的方式是在.bashrc文件中輸入如下代碼:
export PATH=~/workshop/file:"$PATH"
然后執(zhí)行下面的文件,使.bashrc生效
source .bashrc
. .bashrc #source 和“.”同樣的意義
第二十六章 : 啟動一個項目
變量的定義:
1、變量名可由字母數(shù)字字符(字母和數(shù)字)和下劃線字符組成桃移。
2屋匕、變量名的第一個字符必須是一個字母或一個下劃線。
3借杰、變量名中不允許出現(xiàn)空格和標點符號过吻。
常量和變量的區(qū)別:
1、shell不區(qū)別常量和變量
2第步、默認大寫表示常量疮装,小寫表示變量,再次引用時使用$符號即可粘都。
常量和變量定義舉例:
CURRENT_TIME=$(date +"%x %r %Z")
a=z
b="a string" # Embedded spaces must be within quotes.
c="a string and $b" # Other expansions such as variables can be
# expanded into the assignment.
d=$(ls -l foo.txt) # Results of a command.
e=$((5 * 7)) # Arithmetic expansion.
f="\t\ta string\n" # Escape sequences such as tabs and newlines.
#常量名也可以被{}包圍著
filename="myfile"
mv $filename ${filename}1
#上面實現(xiàn)了變量命名廓推,如果是寫mv $filename $filename1,后者沒有被定義過,為空值翩隧,會出錯
使用here document
cat << _EOF_
this is the demo
_EOF_
here documents 中的單引號和雙引號會失去它們在 shell 中的特殊含義
foo="some text"
cat << _EOF_
$foo #顯示結(jié)果為:some text
"$foo" #顯示結(jié)果為:"some text"
'$foo' #顯示結(jié)果為:'some text'
\$foo #顯示結(jié)果為:$foo
_EOF_
cmd << text從命令行讀取輸入樊展,直到一個與text相同的行結(jié)束。除非使用引號把輸入括起來堆生,此模式將對輸入內(nèi)容進行shell變量替換专缠。如果使用<<- ,則會忽略接下來輸入行首的tab淑仆,結(jié)束行也可以是一堆tab再加上一個與text相同的內(nèi)容涝婉。
第二十七章 : 自頂向下設(shè)計
注意:return作用是從函數(shù)中返回,而exit作用是結(jié)束程序
shell函數(shù)格式:
#第一種形式
function name {
commands
#return的作用是從函數(shù)中返回
return
}
#第二種形式
name () {
commands
return
}
腳本中 shell 函數(shù)定義必須出現(xiàn)在函數(shù)調(diào)用之前蔗怠,引用形式如下:
#!/bin/bash
report_uptime () { return}
cat << _EOF_
$(report_uptime)
_EOF_
局部變量墩弯,只在函數(shù)的局部范圍內(nèi)有效
funct_1 () {
#必須使用如下的local格式聲明局部變量
local foo
#局部變量賦值
foo=1
}
第二十八章 : 流程控制:if 分支結(jié)構(gòu)
參考格式:
#!/bin/bash
#第一個等號是賦值
x=5
#第二個等號是比較;if對應(yīng)用fi封閉寞射;使用[]并且加分號“渔工;”表示結(jié)束
if [ $x = 5 ]; then
echo "x equals 5."
else
echo "x does not equal 5."
fi
退出狀態(tài)
#執(zhí)行命令的時候,會給系統(tǒng)發(fā)送一個值桥温,這個值就是退出狀態(tài)引矩,在0-255之間,0表示成功侵浸,其他值表失敗
[me@linuxbox ~]$ ls -d /usr/bin
/usr/bin
[me@linuxbox ~]$ echo $? #0
[me@linuxbox ~]$ ls -d /bin/usr
ls: cannot access /bin/usr: No such file or directory
[me@linuxbox ~]$ echo $? #2
#true表示成功執(zhí)行旺韭,false表示失敗
[me@linuxbox~]$ true
[me@linuxbox~]$ echo $? #0
[me@linuxbox~]$ false
[me@linuxbox~]$ echo $? #1
#如果 if 之后跟隨一系列命令,則將計算列表中的最后一個命令
[me@linuxbox ~]$ if false; true; then echo "It's true."; fi
It's true.
[me@linuxbox ~]$ if true; false; then echo "It's true."; fi
[me@linuxbox ~]$ $?
3
if后面的格式
#即是上面兩種也都是等價的掏觉,test expression和[expression]是等價的茂翔。
#之前的例子為
if [ $x=5 ];
#等價的例子為
if test $x= 5;
這里的 expression 是一個表達式,其執(zhí)行結(jié)果是 true 或者是 false履腋。當(dāng)表達式為真時,這個 test 命令返回一個零 退出狀態(tài),當(dāng)表達式為假時遵湖,test 命令退出狀態(tài)為1
"[ ]"的加強版"[[ ]]"
#"[[ ]]"是高級形式悔政,相比于前者增加下面兩種表達式
string1 =~ regex #例子如下
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
“==”操作符支持類型匹配
$FILE == foo.*
“(( )) ”
被用來執(zhí)行算術(shù)真測試。如果算術(shù)計算的結(jié)果是非零值延旧,則一個算術(shù)真測試值為真谋国。
[me@linuxbox ~]$ if ((1)); then echo "It is true."; fi
It is true.
[me@linuxbox ~]$ if ((0)); then echo "It is true."; fi
[me@linuxbox ~]$
[]中的內(nèi)容需要進行轉(zhuǎn)義
因為 test 使用的所有的表達式和操作符都被 shell 看作是命令參數(shù)(不像 [[ ]] 和 (( ))), 對于 bash 有特殊含義的字符迁沫,比如說 <芦瘾,>,(集畅,和 )近弟,必須引起來或者是轉(zhuǎn)義
[ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]
邏輯表達式的幾種表達方式
操作符 測試 [[ ]] and (( ))
AND -a &&
OR -o ||
NOT ! !
分支的說明:
command1 && command2
#先執(zhí)行 command1,如果并且只有如果 command1 執(zhí)行成功后挺智, 才會執(zhí)行 command2祷愉。
command1 || command2
對于 || 操作符,先執(zhí)行 command1赦颇,如果并且只有如果 command1 執(zhí)行失敗后二鳄, 才會執(zhí)行 command2
第二十九章 : 讀取鍵盤輸入
here字符串
here string可以看成是here document的一種定制形式. 除了COMMAND <<<$WORD, 就什么都沒有了, $WORD將被擴展并且被送入COMMAND的stdin中。
最后
變量:
$PATH
$HOME:當(dāng)前用戶的主目錄媒怯,另外一種表示法是“~”