第一節(jié) Shell概述
1.Shell是什么
Shell是一個命令行解釋器郑趁,它為用戶提供了一個向Linux內(nèi)核發(fā)送請求以便運行程序需纳,用戶可以用Shell來啟動,掛起束倍,停止甚至編寫一些程序妻率。
即:硬件<->內(nèi)核<->Shell<->外層應(yīng)用程序
Shell還是一個功能強大的編程語言乱顾,易編寫,易調(diào)試舌涨,靈活性較強糯耍。Shell是解釋執(zhí)行的腳本語言,在Shell中可以直接調(diào)用Linux系統(tǒng)命令
2.Shell的分類
Bourne Shell:從1979年Unix就開始使用Bourne Shell囊嘉,Bourne Shell主文件名為sh温技。
C Shell:C Shell主要在BSD版的Unix系統(tǒng)中使用,其語法和C語言相類似而得名扭粱。
Shell的兩種主要語法類型有Bourne和C舵鳞,這兩種語法彼此不兼容。Bourne家族主要包括sh琢蛤,ksh蜓堕,Bash抛虏,psh,zsh套才;C家族主要包括csh迂猴,tcsh
Bash:Bash與sh兼容,現(xiàn)在使用的Linux就是使用Bash作為用戶的基本Shell背伴。
3.Linux支持的Shell
vi /etc/shells 查看Linux中支持的Shell
第二節(jié) 腳本執(zhí)行方式
1.echo 輸出命令
echo [選項] [輸出內(nèi)容]
選項
-e? ?? 支持反斜線控制的字符轉(zhuǎn)換
\\? ??? 輸出\本身
\a? ?? 輸出警告音
\b? ?? 退格鍵沸毁,也就是向左刪除鍵
\c? ?? 取消輸出行末的換行符,和"-n"選項一致
\e? ?? ESCAPE鍵
\f? ???? 換頁符
\n? ? ? 換行符
\r? ? ?? 回車鍵
\t? ???? 制表符
\v? ???? 垂直制表符
\0nnn? 按照八進制ASCII碼表輸出字符傻寂,其中0為數(shù)字零息尺,nnn是三位八進制數(shù)
\xhh???? 按照十六進制ASCII碼表輸出字符,其中hh是兩位十六進制數(shù)
實例命令
echo -e "ab\bc"? ? ? 刪除左側(cè)字符
echo -e "a\tb\tc\nd\te\tf"? 制表符與換行符
echo -e "\x61\t\x62\t\x63\t\x64\t\x65\t\x66"? ? 按照十六進制ASCII碼輸出字符
echo -e "\e[1;31m abcd\e[0m"? ? 輸出顏色
30m = 黑色? 31m = 紅色? 32m = 綠色? 33m = 黃色
34m = 藍色? 35m = 洋紅? 36m = 青色? 37m = 白色
2.vi hello.sh
#!/bin/bash
#The first program
#Author:Shen Chao (Email:shenchao@lampbrother.com)
echo -e "Mr. Shen Chao is the most honest man in LampBrother"
3.腳本執(zhí)行
1)賦予執(zhí)行權(quán)限疾掰,直接運行
chmod 755 hello.sh
./hello.sh
2)通過bash調(diào)用執(zhí)行腳本
bash hello.sh
注意:Windows下的換行符為^M$搂誉,而Linux下的換行符為$,所以在Windows下寫的腳本在Linux下執(zhí)行可能會發(fā)生問題静檬,可以使用dos2unix命令進行轉(zhuǎn)換炭懊。
第三節(jié) Bash的基本功能
1.歷史命令
history [選項] [歷史命令保存文件]
選項
-c? ? ? 清空歷史命令
-w? ? ? 把緩存中的歷史命令寫入歷史命令保存文件 ~/.bash_history
歷史命令默認會保存1000條,可以在環(huán)境變量配置文件/etc/profile中進行修改
歷史命令的調(diào)用
使用上下箭頭調(diào)用以前的歷史命令
使用"!n"重復(fù)執(zhí)行第n條歷史命令
使用"!!"重復(fù)執(zhí)行上一條命令
使用"!字符串"重復(fù)執(zhí)行最后一條以該字串開頭的命令
2.命令與文件補全
在Bash中巴柿,命令與文件補全是非常方便與常用的功能凛虽,我們只要在輸入命令或文件時死遭,按"Tab"鍵就會自動進行補全
3.命令別名
alias 別名='原命令'? ? ? 設(shè)定命令別名
alias? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 查看命令別名
unalias 別名? ? ? ? ? ? ? ? ?? 刪除命令別名
命令執(zhí)行的順序
1)第一順位執(zhí)行用絕對路徑或相對路徑執(zhí)行的命令
2)第二順位執(zhí)行別名
3)第三順位執(zhí)行Bash的內(nèi)部命令
4)第四順位執(zhí)行按照$PATH環(huán)境變量定義的目錄查找順序找到的第一個命令
注意:由于別名的優(yōu)先級高于$PATH變量中的外部命令广恢,所以盡量不要起與$PATH變量中相同的命令別名,這樣原命令將無法生效
4.讓別名永久生效
vi /root/.bashrc
5.Bash常用快捷鍵
ctrl+A? ? 把光標移動到命令行開頭呀潭,如果我們輸入的命令過長钉迷,想要把光標移到命令行開頭時使用
ctrl+E? ? 把光標移動到命令行結(jié)尾
ctrl+C? ? 強制終止當(dāng)前命令
ctrl+L? ? 清屏,相當(dāng)于clear命令
ctrl+U? ? 刪除或剪切光標之前的內(nèi)容
ctrl+K? ? 刪除或剪切光標之后的內(nèi)容
ctrl+Y? ? 粘貼ctrl+U或ctrl+K剪切內(nèi)容
ctrl+R? ? 在歷史命令中搜索钠署,按下ctrl+R之后糠聪,就會出現(xiàn)搜索界面,只要輸入搜索內(nèi)容谐鼎,就會從歷史命令中搜索
ctrl+D? ? 退出當(dāng)前終端
ctrl+Z? ? 暫停舰蟆,并放入后臺,這個快捷鍵牽扯工作管理的內(nèi)容
ctrl+S? ? 暫停屏幕輸出
ctrl+Q? ? 恢復(fù)屏幕輸出
6.標準輸入輸出
設(shè)備? ? ? ? ? 設(shè)備文件名? ? ? ? 文件描述符? ? ? ? ? ? 類型
鍵盤? ? ? ? ? ?? /dev/stdin? ? ? ? ?? ?? ?? 0? ? ? ? ? ? ? ? ? ? 標準輸入
顯示器? ? ? ? /dev/stdout? ? ? ? ? ?? ?? 1? ? ? ? ? ? ? ? ? ? 標準輸出
顯示器? ? ? ? /dev/stderr? ? ? ? ? ? ???? 2? ? ? ? ??????? 標準錯誤輸出
7.輸出重定向
?????????? 類型? ? ? ? ? ? ? ? ?? ?? ? ? 符號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
標準輸出重定向? ? ? ? 命令 > 文件? ?? 以覆蓋的方式狸棍,把命令的正確輸出輸出到指定的文件或設(shè)備當(dāng)中
??????????????????????????????????? 命令 >> 文件???? 以追加的方式身害,把命令的正確輸出輸出到指定的文件或設(shè)備當(dāng)中
標準錯誤輸出重定向? 錯誤命令 2>文件? 以覆蓋的方式,把命令的錯誤輸出輸出到 指定的文件或設(shè)備當(dāng)中
????????????????????????????????????? 錯誤命令 2>>文件 以追加的方式草戈,把命令的錯誤輸出輸出到 指定的文件或設(shè)備當(dāng)中
?????????????????????????????????????? 命令 >文件 2>&1 以覆蓋的方式將正確輸出和錯誤輸出保存至同一個文件當(dāng)中
?????????????????????????????????????? 命令 >>文件 2>&1 以追加的方式將正確輸出和錯誤輸出保存至同一個文件當(dāng)中
正確輸出和錯誤輸出? ? 命令 &>文件? ? 以覆蓋的方式將正確輸出和錯誤輸出保存至同一個文件當(dāng)中
同時保存? ? ? ? ? ? ?????????? 命令 &>>文件? ? 以追加的方式將正確輸出和錯誤輸出保存至同一個文件當(dāng)中
?????????????????????????????????????? 命令>>文件1 2>>文件2 把正確的輸出追加到文件1中塌鸯,把錯誤的輸出追加到文件2中
8.輸入重定向
命令<文件? ? ? ? 把文件作為命令的輸入
wc [選項] [文件名]
選項:
-c? ? ? ?? 統(tǒng)計字節(jié)數(shù)
-w? ? ? ? 統(tǒng)計單詞數(shù)
-l? ? ? ??? 統(tǒng)計行數(shù)
9.多命令順序執(zhí)行
命令執(zhí)行符? ? ? ? ? ? 格式? ? ? ? ? ? ? ? ? ? ? ? 作用
????????? ;? ? ? ? ? ?? ? 命令1;命令2? ? ? 多個命令順序執(zhí)行,命令之間沒有任和邏輯聯(lián)系
??????? &&? ? ? ? ? 命令1&&命令2? ? 邏輯與當(dāng)命令1正確執(zhí)行唐片,則命令2才會執(zhí)行當(dāng)命令1執(zhí)行不正確丙猬,則命令2不會執(zhí)行
????????? ||? ? ? ? ?? ? ? 命令1||命令2? ? 邏輯或當(dāng)命令1執(zhí)行不正確涨颜,則命令2才會執(zhí)行當(dāng)命令1正確執(zhí)行,則命令2不會執(zhí)行
10.dd命令
dd if=輸入文件 of=輸出文件 bs=字節(jié)數(shù) count=個數(shù)
選項
if=輸入文件? ? ? ? ??? 指定原文件或原設(shè)備
of=輸出文件? ? ? ? ?? 指定目標文件或目標設(shè)備
bs=字節(jié)數(shù)? ? ? ? ? ??? 指定一次輸入/輸出多少字節(jié),即把這些字節(jié)看作一個數(shù)據(jù)塊
count=個數(shù)? ? ? ? ???? 指定輸入/輸出多少個數(shù)據(jù)塊
例子:創(chuàng)建一個100M的文件,查看當(dāng)前系統(tǒng)需要多長時間斜做。
date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date
例子:命令 && echo yes || echo no 判斷一條命令是否正確執(zhí)行
11.管道符
命令格式:命令1 | 命令2? ? ? 命令1的正確輸出作為命令2的操作對象
例子:
ll -a /etc/ | more
netstat -an | grep "ESTABLISHED"
grep [選項] "搜索內(nèi)容" 文件名
選項
-i? ? ? ? ??? 忽略大小寫
-n? ? ? ? ?? 輸出行號
-v? ? ? ? ?? 反向查找
--color=auto 搜索出的關(guān)鍵字用顏色顯示
12.通配符
通配符? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
??? ?? ? ?? ? ? ??? 匹配一個任意字符
??? *? ? ? ?? ? ??? 匹配0個或任意多個任意字符籍救,也就是可以匹配任何內(nèi)容
?? [ ]? ? ? ? ? ? ? 匹配中括號中任意一個字符,例如:[abc]代表一個字符贼邓,或者a,或者b,或者c
?? [-]? ? ??? ? ? ? 匹配中括號中任意一個字符,代表一個范圍鲤屡。例如:[a-z]代表匹配一個小寫字母
?? [^]? ? ? ? ? ? ? 邏輯非,表示匹配不是中括號內(nèi)的一個字符福侈,例如:[^0-9]代表匹配一個不是數(shù)字的字符
注意:通配符是用來匹配文件名的酒来,其特征是完全匹配。
13.Bash中其他特殊符號
符號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
? ''? ? ? ? ? 單引號肪凛,在單引號中所有的特殊符號堰汉。如"$"和"`"都沒有特殊含義
?""? ? ? ??? 雙引號,在雙引號中特殊符號都沒有特殊含義伟墙,但是"$","`"和"\"是例外翘鸭,擁有"調(diào)用變量的值","引用命令"和"轉(zhuǎn)義符"的特殊含義
?``? ? ? ? ? 反引號戳葵,反引號括起來的內(nèi)容是系統(tǒng)命令就乓,在Bash中會先執(zhí)行它,和$()的作用一樣拱烁,不過推薦使用$()生蚁,因為反引號非常容易看錯
$()? ? ? ? 和反引號作用一樣,用來引用系統(tǒng)命令
?#? ? ? ? ? 在Shell腳本中戏自,#開頭的行代表系統(tǒng)命令
?$? ? ? ? ? 用于調(diào)用變量的值邦投,如需要調(diào)用變量name的值時,需要用$name的方式得到變量的值
? \? ? ? ? ? 轉(zhuǎn)義符擅笔,跟在\之后的特殊符號將失去特殊含義志衣,變?yōu)槠胀ㄗ址H鏫$將輸出"$"符號猛们,而不當(dāng)做是變量引用
第三節(jié) Bash變量
1.什么是變量
變量是計算機內(nèi)存的單元念脯,其中存放的值可以改變。當(dāng)Shell腳本需要保存一些信息時阅懦,如一個文件名或是一個數(shù)字
就把它存放在一個變量中和二,每個變量有一個名字,所以很容易引用它耳胎。使用變量可以保存有用信息惯吕,使系統(tǒng)獲知用
戶相關(guān)設(shè)置惕它,變量也可以用于保存暫時信息。
2.變量設(shè)置規(guī)則
變量名稱可以由字母废登,數(shù)字和下劃線組成淹魄,但是不能以數(shù)字開頭。如果變量名是"2name"則是錯誤的
在Bash中堡距,變量的默認類型都是字符串型甲锡,如果要進行數(shù)值運算,則必須指定變量類型為數(shù)值類型
變量用等號連接值羽戒,等號左右兩側(cè)不能有空格
變量的值如果有空格缤沦,需要使用單引號或雙引號包括
在變量的值中,可以使用"\"轉(zhuǎn)義符
如果需要增加變量的值易稠,那么可以進行變量值的疊加缸废。不過變量需要用"$變量名"或用${變量名}包含
如果把命令的結(jié)果作為變量值賦予變量,則需要使用反引號或$()包含命令
環(huán)境變量名建議大寫驶社,便于區(qū)分企量。
3.變量的分類
用戶自定義變量
環(huán)境變量:這種變量中主要保存的是和系統(tǒng)操作環(huán)境相關(guān)的數(shù)據(jù)
位置參數(shù)變量:這種變量主要是用來向腳本當(dāng)中傳遞參數(shù)或數(shù)據(jù)的,變量名不能自定義亡电,變量作用是固定的
預(yù)定義變量:是Bash中已經(jīng)定義好的變量届巩,變量名不能自定義,變量作用也是固定的
4.本地變量
變量定義
name="shen chao"
變量疊加
aa=123
aa="$aa"456
aa=${aa}789
變量調(diào)用
echo $name
變量查看
set
變量刪除
unset name
5.環(huán)境變量是什么
用戶自定義變量只在當(dāng)前的Shell中生效份乒,而環(huán)境變量會在當(dāng)前Shell和這個Shell的所有子Shell中生效恕汇。
如果把環(huán)境變量寫入相應(yīng)的配置文件,那么這個環(huán)境變量就會在所有的Shell中生效
6.設(shè)置環(huán)境變量
export 變量名=變量值? ? ? ? ? 聲明變量
env? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 查詢變量
unset? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 刪除變量
pstree可以查看進程樹冒嫡,直接輸入shell名可以切換shell
7.系統(tǒng)常見環(huán)境變量
PATH:系統(tǒng)查找命令的路徑
echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:root/bin
PATH="$PATH":root/sh? ? ? ? ? ? PATH變量疊加
命令的執(zhí)行和Tab鍵的補全都是查找$PATH變量定義的路徑
PS1:定義系統(tǒng)提示符的變量
\d? ? ? 顯示日期拇勃,格式為"星期 月 日"
\h? ? ? 顯示簡寫主機名,如默認主機名"localhost"
\t? ? ? ? 顯示24小時制時間孝凌,格式為"HH:MM:SS"
\T? ? ? 顯示12小時制時間,格式為"HH:MM:SS"
\A? ? ? 顯示24小時制時間月腋,格式為"HH:MM"
\u? ? ?? 顯示當(dāng)前用戶名
\w? ? ? 顯示當(dāng)前所在目錄的完整路徑
\W? ?? 顯示當(dāng)前所在目錄的最后一個目錄
\#? ? ? 執(zhí)行的第幾個命令
\$? ? ? 提示符蟀架,如果是root用戶會顯示為"#",如果是普通用戶會顯示"$"
8.位置參數(shù)變量
位置參數(shù)變量? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
????? $n? ? ? ? ? ? n為數(shù)字榆骚,$0代表命令本身片拍,$1-$9代表第一到第九個參數(shù),十以上的參數(shù)需要用大括號包含
????? $*? ? ? ? ? ? 這個變量代表命令行中所有參數(shù)妓肢,$*把所有參數(shù)看成一個整體
???? $@? ? ?? ? ? 這個變量代表命令行中所有參數(shù)捌省,$@把每個參數(shù)區(qū)分對待
????? $#? ? ? ? ? ? 這個變量代表命令行中所有參數(shù)的個數(shù)
例子1:
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1 + $num2 ))
echo $sum
例子2:
#!/bin/bash
echo "A total of $# parameters"
echo "The parameters is $*"
echo "The parameters is $@"
例子3:$*與$@的區(qū)別
#!/bin/bash
#$*中的所有參數(shù)看成是一個整體,所以這個for循環(huán)只會循環(huán)一次
for i in "$*"
do
echo "The parameters is:$i"
done
x=1
#$@中的每個參數(shù)都看成是獨立的碉钠,所以$@中有幾個參數(shù)就會循環(huán)幾次
for y in "$@"
do
echo "The parameter$x is $y"
x=$(($x+1))
done
9.預(yù)定義變量
預(yù)定義變量? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
$?? ? ? ? ? ? 最后一次執(zhí)行的命令的返回狀態(tài)纲缓,如果這個變量值為0,證明上一個命令正確執(zhí)行如果這個變量的值非0,則證明上一個命令執(zhí)行不正確
$$? ? ? ? ? ? 當(dāng)前進程的進程號(PID)
$!? ? ? ? ? ? 后臺運行的最后一個進程號(PID)
例子:
#!/bin/bash
#Author:ShenChao(Email:shenchao@lampbrother.net)
echo "The current process is $$"
#輸出當(dāng)前進程的PID
#這個PID就是variable.sh這個腳本執(zhí)行時卷拘,生成的進程的PID
find /root -name hello.sh &
#使用find命令在root目錄下查找hello.sh文件
#符號&的意思是把命令放入后臺執(zhí)行
echo "The last one Daemon process is $!"
10接收鍵盤輸入
read [選項] [變量名]
選項
-p "提示信息"? ? ? ? 在等待read輸入時,輸出提示信息
-t 秒數(shù)? ? ? ? ? ? ? ? ? ? read命令會一直等待用戶輸入祝高,使用此選項可以指定等待時間
-n 字符數(shù)? ? ? ? ? ???? read命令只接受指定的字符數(shù)栗弟,就會執(zhí)行,而不用輸入回車
-s? ? ? ? ? ? ? ? ??????????? 隱藏輸入的數(shù)據(jù)工闺,適用于機密信息的輸入
例子:
#!/bin/bash
#Author:shenchao(Email:shenchao@lampbrother.net)
read -t 30 -p "Please input your name: " name
#提示"請輸入姓名"并等待30秒乍赫,把用戶的輸入保存入變量name中
echo "Name is $name"
read -s -t 30 -p "Please enter your age:" age
#年齡是隱私,所以我們用"-s"選項隱藏輸入
echo -e "\n"
echo "Age is $age"
read -n 1 -t 30 -p "Please select your gender[M/F]: " gender
#使用"-n 1"選項只接收一個輸入字符就會執(zhí)行(都不用輸入回車)
echo -e "\n"
echo "Sex is $gender"
第四節(jié) Bash的運算符
1.declare聲明變量類型
declare [+/-] [選項] 變量名
選項
-? ? ? ? ? ? ? 給變量設(shè)定類型屬性
+? ? ? ? ? ? ? 取消變量的類型屬性
-i? ? ? ? ? ? ? 將變量聲明為整數(shù)型
-x? ? ? ? ? ? 將變量聲明為環(huán)境變量
-p? ? ? ? ? ? 顯示指定變量的被聲明的類型
2.數(shù)值運算
(方法一)
aa=11
bb=22? ? ? ? ? ? ? ? #給變量aa和bb賦值
declare -i cc=$aa+$bb
(方法二)
aa=11
bb=22? ? ? ? ? ? ? ? #給變量aa和變量bb賦值
dd=$(expr $aa + $bb)? ? ? #dd的值是aa和bb的和陆蟆。注意"+"號左右兩側(cè)必須有空格
(方法三)
aa=11
bb=22
ff=$(( $aa+$bb ))
gg=$[ $aa+$bb ]
3.運算符
優(yōu)先級? ? ? ? ? ? ? ? ? ? ? ? ? 運算符? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明
?? 13? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -雷厂,+? ? ? ? ? ? ???????? 單目負,單目正
?? 12? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 叠殷!罗侯,~? ? ? ? ? ? ? ?? ?? 邏輯非,按位取反或補碼
?? 11? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *溪猿,/钩杰,%? ? ? ? ?????????? 乘,除诊县,取模
?? 10? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +讲弄,-? ? ? ? ? ? ? ? ? ? ? ? 加,減
??? 9? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <<依痊,>>? ? ? ? ? ? ? ?? ? 按位左移避除,按位右移
??? 8? ? ? ? ? ? ? ? ? ? ????? < =,> =胸嘁,<瓶摆,>? ? ? ? ? 小于或等于,大于或等于性宏,小于群井,大于
??? 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ==,!=? ? ? ? ? ? ? ??? ? 等于毫胜,不等于
??? 6? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &? ? ? ? ? ? ? ? ? ? ?? ? 按位與
??? 5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^? ? ? ? ? ? ? ? ? ? ? ? ? 按位異或
??? 4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ?? ? 按位或
??? 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? &&? ? ? ? ? ? ? ? ? ? ? ? 邏輯與
??? 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ||? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯或
??? 1? ? ? ? ? ? ? =书斜,+=,-=酵使,*=荐吉,/=,%=?????? 賦值運算且賦值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^=,|=,<<=,>>=
命令實例
aa=$(( (11+3)*3/2 ))? ? ? ? ? ? ? ? ? ? 雖然乘和除的優(yōu)先級高于加口渔,但通過小括號可以調(diào)整優(yōu)先級
bb=$(( 14%3 ))? ? ? ? ? ? ? ? ? ? ? ? ? ? 14不能被3整除样屠,余數(shù)是2
cc=$(( 1&&0 ))? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯與運算只有相與的兩邊都是1,結(jié)果才是1,否則與的結(jié)果是0
4.變量測試與內(nèi)容替換
變量置換方式? ? ? ? ? ? ? ? ? ? ? ? 變量y沒有值? ? ? ? ? ? ? ? ? 變量y為空值? ? ? ? ? ? ? ? ? ? ? 變量y設(shè)置值
x=${ y-新值 }? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x為空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=$y
x=${ y:-新值 }? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=$y
x=${ y+新值 }? ? ? ? ? ? ? ? ? ? ? ? ? ? x為空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值
x=${ y:+新值 }? ? ? ? ? ? ? ? ? ? ? ? ? ? x為空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x為空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值
x=${ y=新值 }? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x為空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=$y
y=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? y值不變? ? ? ? ? ? ? ? ? ? ? ? ? ? y值不變
x=${ y:=新值 }? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? x=$y
y=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y=新值? ? ? ? ? ? ? ? ? ? ? ? ? ? y值不變
x=${ y?=新值 }? ? ? ? ? ? ? ? ? 新值輸出到? ? ? ? ? ? ? ? ? ? ? ? ? x為空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=$y
標準錯誤輸出
x=${ y:?新值 }? ? ? ? ? ? ? ? ? ? ? ? ? 新值輸出到? ? ? ? ? ? ? ? ? ? ? ? 新值輸出到標? ? ? ? ? ? ? ? ? ? x=$y
標準錯誤輸出 準錯誤輸出
實例命令
測試x=${ y-新值 }
unset y? ? ? ? ? ? ? ? ? ? ? ? ? ?? #刪除變量y
x=${ y-new }? ? ? ? ? ? ? ? ? ? #進行測試
echo $x? ? ? ? ? ? ? ? ? ? ? ? ?? #輸出結(jié)果new
因為變量y不存在所以x=new
y=""? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? #給變量y賦值為空
x=${ y-new }? ? ? ? ? ? ? ? ? ?? #進行測試
echo $x? ? ? ? ? ? ? ? ? ? ? ? ? ? 輸出結(jié)果""
y=old? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #給變量y賦值
x=${ y-new }? ? ? ? ? ? ? ? ? ? #進行測試
echo $x? ? ? ? ? ? ? ? ? ? ? ? ? ? 輸出結(jié)果old
第五節(jié) 環(huán)境變量配置文件
1.source命令
source 配置文件 或 .配置文件
這兩條命令使環(huán)境變量重新加載,而不用重新登陸再加載痪欲。
2.環(huán)境變量配置文件簡介
環(huán)境變量配置文件中主要是定義對系統(tǒng)的操作環(huán)境生效的系統(tǒng)默認環(huán)境變量悦穿,比如PATH,HISTSIZE勤揩,PS1,HOSTNAME等默認的環(huán)境變量咧党。
常見的五個環(huán)境變量配置文件
/etc/profile
/etc/bashrc
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
1)/etc/profile的作用:
UER變量:
LOGNAME變量:
MAIL變量:
PATH變量:
HOSTNAME變量:
HISTSIZE變量:
umask
調(diào)用/etc/profile.d/*.sh文件:
2)~/.bash_profile的作用
調(diào)用了~/.bashrc文件
在PATH變量后面加入了":$HOME/bin"這個目錄
3)~/.bashrc的作用
定義默認別名
調(diào)用/etc/bashrc
4)/etc/bashrc的作用
PS1變量
umask
PATH變量
調(diào)用/etc/profile.d/*.sh文件
3.注銷時生效的環(huán)境變量配置文件
~/.bash_logout
4.歷史命令的保存文件
~/.bash_history
5.Shell登陸信息
本地終端歡迎信息:/etc/issue
轉(zhuǎn)義符? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
?? \d? ? ? ? ? ? ? ? ? ? ? ? ? 顯示當(dāng)前系統(tǒng)日期
?? \s? ? ? ? ? ? ? ? ? ? ? ? ? 顯示操作系統(tǒng)名稱
?? \l? ? ? ? ? ? ? ? ? ? ? ? ?? 顯示登陸的終端號,這個比較常用
? \m? ? ? ? ? ? ? ? ? ? ? ? ? 顯示硬件體系架構(gòu)陨亡,如i386,i686等
?\n? ? ? ? ? ? ? ? ? ? ? ? ? ? 顯示主機名
?\o? ? ? ? ? ? ? ? ? ? ? ? ? ? 顯示域名
?\r? ? ? ? ? ? ? ? ? ? ? ? ? ?? 顯示內(nèi)核版本
?\t? ? ? ? ? ? ? ? ? ? ? ? ? ?? 顯示當(dāng)前系統(tǒng)時間
\u? ? ? ? ? ? ? ? ? ? ? ? ? ?? 顯示當(dāng)前登陸用戶的序列號
遠程登陸歡迎信息:/etc/issue.net
轉(zhuǎn)義符在/etc/issue.net文件中不能使用
是否顯示此歡迎信息傍衡,由ssh的配置文件/etc/ssh/sshd_config決定,加入"Banner /etc/issue.net"行才能顯示(記得重啟SSH服務(wù))
登陸后的歡迎信息:/etc/motd
不管是本地登陸负蠕,還是遠程登陸蛙埂,都可以顯示此歡迎信息