(十)Shell基礎(chǔ)

第一節(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

不管是本地登陸负蠕,還是遠程登陸蛙埂,都可以顯示此歡迎信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遮糖,隨后出現(xiàn)的幾起案子绣的,更是在濱河造成了極大的恐慌,老刑警劉巖欲账,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屡江,死亡現(xiàn)場離奇詭異,居然都是意外死亡赛不,警方通過查閱死者的電腦和手機惩嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踢故,“玉大人文黎,你說我怎么就攤上這事〉罱希” “怎么了耸峭?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淋纲。 經(jīng)常有香客問我劳闹,道長,這世上最難降的妖魔是什么帚戳? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任玷或,我火速辦了婚禮,結(jié)果婚禮上片任,老公的妹妹穿的比我還像新娘。我一直安慰自己蔬胯,他們只是感情好对供,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般产场。 火紅的嫁衣襯著肌膚如雪鹅髓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天京景,我揣著相機與錄音窿冯,去河邊找鬼。 笑死确徙,一個胖子當(dāng)著我的面吹牛醒串,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鄙皇,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼芜赌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伴逸?” 一聲冷哼從身側(cè)響起缠沈,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎错蝴,沒想到半個月后洲愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡顷锰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年柬赐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馍惹。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡躺率,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出万矾,到底是詐尸還是另有隱情悼吱,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布良狈,位于F島的核電站后添,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏薪丁。R本人自食惡果不足惜遇西,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望严嗜。 院中可真熱鬧粱檀,春花似錦、人聲如沸漫玄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渗常,卻和暖如春壮不,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皱碘。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工询一, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人癌椿。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓健蕊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親如失。 傳聞我的和親對象是個殘疾皇子绊诲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容