第十章 Shell基礎(chǔ)(bash,輸入輸出重定向,多命令執(zhí)行,管道符,通配符,環(huán)境變量,預(yù)定義變量)

10.1 Shell概述

1、 Shell是什么?


(通俗的講,就是把命令轉(zhuǎn)換為內(nèi)核可以識別的機器語言,同時返回結(jié)果)

?Shell是一個命令行解釋器,它為用戶提供了一個向Linux內(nèi)核發(fā)送請求以便運行程序的界面系統(tǒng)級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。

?Shell還是一個功能相當(dāng)強大的編程語言,易編寫,易調(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

通過查看文件? /etc/shells

[root@localhost ~]# more /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

4.切換shell,直接打shell標(biāo)識

[root@localhost ~]# sh

sh-4.1# exit

exit

[root@localhost ~]# csh

[root@localhost ~]# exit

exit

[root@localhost ~]# bash

[root@localhost ~]# exit

exit

[root@localhost ~]#


10.2 Shell腳本的執(zhí)行方式

1、echo輸出命令

[root@localhost ~]# echo [選項] [輸出內(nèi)容]

選項:? -e: 支持反斜線控制的字符轉(zhuǎn)換


[root@localhost ~]# echo -e "ab\bc"

#刪除左側(cè)字符?

[root@localhost ~]# echo -e "a\tb\tc\nd\te\tf"

#制表符與換行符

[root@localhost ~]# echo -e? "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"

#按照十六進(jìn)制ASCII碼也同樣可以輸出?

[root@localhost ~]# echo -e "\e[1;31m? abcd \e[0m"

#輸出顏色

#30m=黑色,31m=紅色,32m=綠色,33m=黃色

#34m=藍(lán)色,35m=洋紅,36m=青色,37m=白色

注意:其中 \e[1;標(biāo)識開始顏色輸出? ,\e[0m 表示結(jié)束顏色輸出,abcd表示輸出的字符,31m表示顏色

2、第一個腳本

[root@localhost sh]# vi hello.sh

#!/bin/Bash

#The first program

# Author: shenchao (E-mail: shenchao@lampbrother.net)?

echo -e "Mr. Shen Chao is the most honest man in LampBrother"

注意: #!/bin/Bash 這是標(biāo)稱我以下的腳本是shell腳本,一定要有

另外在echo中 “!”感嘆號有特殊含義,如果想用感嘆號,就用''單引號

3、腳本執(zhí)行

?1)賦予執(zhí)行權(quán)限,直接運行

?chmod 755 hello.sh

然后用相對路徑或者絕對路徑執(zhí)行

/root/tmp/shFile/hello.sh? ? #絕對路徑

./hello.sh? ? #相對路徑

?2)通過Bash調(diào)用執(zhí)行腳本

?bash hello.sh

?sh hello.sh

tips:俄羅斯方塊游戲代碼點擊下載

密碼:du55

注意:在Windows中的換行是 M$,而在Linux中是$,因此要用命令 dos2unix [文件名] 將Windows的腳本進(jìn)行轉(zhuǎn)換

如:dos2unix hello.sh


10.3 Bash的基本功能

10.3.1 歷史命令與命令補全

1、歷史命令

[root@localhost ~]# history [選項] [歷史命令保存文件]

選項:?

-c:? 清空歷史命令?

-w: 把緩存中的歷史命令寫入歷史命令保存文件? ?

~/.bash_history (默認(rèn)保存的位置)

? 歷史命令默認(rèn)會保存1000條,可以在環(huán)境變量配置文件/etc/profile中進(jìn)行修改

真正保存在 /root/.bash_history

歷史命令的調(diào)用

? 使用上、下箭頭調(diào)用以前的歷史命令

? 使用“!n”重復(fù)執(zhí)行第n條歷史命令

? 使用“!!”重復(fù)執(zhí)行上一條命令

? 使用“!字串”重復(fù)執(zhí)行最后一條以該字串開頭的命令?

2、 命令與文件補全

? 在Bash中,命令與文件補全是非常方便與常用的功能,我們只要在輸入命令或文件時,按“Tab”鍵就會自動進(jìn)行補全


10.3.2 命令別名與常用快捷鍵

1、 命令別名

[root@localhost ~]# alias 別名='原命令'

#設(shè)定命令別名?

[root@localhost ~]# alias

#查詢命令別名?

命令執(zhí)行時順序

1 第一順位執(zhí)行用絕對路徑或相對路徑執(zhí)行的命令。

2 第二順位執(zhí)行別名。

3 第三順位執(zhí)行Bash的內(nèi)部命令。

4 第四順位執(zhí)行按照$PATH環(huán)境變量定義的目錄查找順序找到的第一個命令。

讓別名永久生效

[root@localhost ~]# vi /root/.bashrc

刪除別名

[root@localhost ~]# unalias 別名

2、 Bash常用快捷鍵



10.3.3 輸入輸出重定向

1、 標(biāo)準(zhǔn)輸入輸出

設(shè)備 設(shè)備文件名 文件描述符 類型

鍵盤 /dev/stdin 0 標(biāo)準(zhǔn)輸入

顯示器 /dev/stdout 1 標(biāo)準(zhǔn)輸出

顯示器 /dev/stderr 2 標(biāo)準(zhǔn)錯誤輸出

2、 輸出重定向(圖302 + 303)



文件本來是輸出到顯示器,這時候改變其輸出方向,讓其輸出到指定文件或者設(shè)備中,就是輸出重定向。

如: 命令 > 文件? (以覆蓋的方式)

命令 >> 文件 (以追加的方式)

表示把命令的結(jié)果保存在[文件]中

eg:

[root@localhost ~]# ll -a > /tmp/shFile/shuchuChongdingxiang

[root@localhost ~]# cat /tmp/shFile//shuchuChongdingxiang

標(biāo)準(zhǔn)錯誤輸出重定向

錯誤命令 2> 文件? (以覆蓋的方式)

錯誤命令 2>> 文件 (以追加的方式)

注意:2和>? 之間沒有空格

如:把無用的輸出丟到垃圾箱 /dev/null

eg: ls &>> /dev/null

正確輸出和錯誤輸出同時保存

1)命令 &> 文件? (以覆蓋的方式)

2)命令 &>> 文件 (以追加的方式)

3)? 命令>>文件1 2>>文件2 (把正確的輸出追加到文件1,錯誤的輸出追加到文件2)

如:

[root@localhost shFile]# date &>> todayDate

[root@localhost shFile]# gate &>> todayDate

[root@localhost shFile]# cat todayDate

2020年 05月 10日 星期日 06:44:53 CST

-bash: gate: command not found

3、 輸入重定向

把本來鍵盤輸入,重定向到 從文件輸入

[root@localhost ~]#? 命令 [選項] [文件名]

如 :? wc? [選項] [文件名]

選項:?

- c? 統(tǒng)計字節(jié)數(shù)?

- w? 統(tǒng)計單詞數(shù)?

- l? 統(tǒng)計行數(shù)?

? 命令<文件? 把文件作為命令的輸入

? 命令<< 標(biāo)識符? ?

…? ? ?

標(biāo)識符? 把標(biāo)識符之間內(nèi)容作為命令的輸入

如:

[root@localhost dev]# wc

dfdsag

adsag

qw

1342

? ? ? 4? ? ? 4? ? ? 21

表示一共輸入了4行,4個單詞,21的字符(包含空格)

[root@localhost shFile]# wc < hello.sh

3 12 84

表示hello.sh這個文件有3行,12個單詞,84個字符

[root@localhost shFile]# wc << start-end

> dsa

> agda

> start-end

2 2 9

表示:把 start-end 之間的內(nèi)容作為輸入


10.3.4 多命令順序執(zhí)行與管道符

1、 多命令順序執(zhí)行


1)“;”分號,命令之間沒有邏輯聯(lián)系,每個命令都執(zhí)行,即使中間的命令是錯誤的也不會影響后面命令的執(zhí)行

“&&” 邏輯與,只有命令1正確執(zhí)行了,才能執(zhí)行命名2。若命令1沒有正確執(zhí)行,則不會執(zhí)行命令2

“||”邏輯或;若命令1正確執(zhí)行,則命令2不會執(zhí)行。若命令1執(zhí)行不正確,此時才會執(zhí)行命令2

例子:

[root@localhost shFile]# ls ; cd /tmp; ls ; pwd

hello.sh? shuchuChongdingxiang? todayDate

chattrDire? dtest? ? project? stickyTestDir? wangwuDir

chattrFile? hello.sh? shFile? testDir? ? ? ? yum.log

/tmp

[root@localhost ~]# dd if=輸入文件 of=輸出文件 bs=字節(jié)數(shù) count=個數(shù)?

選項:? dd 命令是特殊的復(fù)制命令,如磁盤,系統(tǒng)文件等的復(fù)制

if=輸入文件? 指定源文件或源設(shè)備?

of=輸出文件? 指定目標(biāo)文件或目標(biāo)設(shè)備?

bs=字節(jié)數(shù)? 指定一次輸入/輸出多少字節(jié),即把這些字節(jié)看做一個數(shù)據(jù)塊 (即每次復(fù)制多少)

count=個數(shù)? 指定輸入/輸出多少個數(shù)據(jù)塊?

例子:

[root@localhost tmp]# date;dd if=/dev/zero of=/tmp/shFile/testfile bs=1k count=100000;date?

2020年 05月 10日 星期日 07:11:24 CST

記錄了100000+0 的讀入

記錄了100000+0 的寫出

102400000字節(jié)(102 MB)已復(fù)制,1.02615 秒,99.8 MB/秒

2020年 05月 10日 星期日 07:11:25 CST

表示:創(chuàng)建一個大約100M的文件需要多長時間

[root@localhost ~]# ls anaconda-ks.cfg && echo yes?

[root@localhost ~]# ls /root/test || echo "no?

[root@localhost ~]# 命令 && echo yes || echo no (判斷這條命令是否正確執(zhí)行)

如:

[root@localhost shFile]# ls && echo yes ||? echo no

hello.sh? shuchuChongdingxiang? testfile? todayDate

yes

[root@localhost shFile]# lss && echo yes || echo no

-bash: lss: command not found

no

2、 管道符 :連接各命令,命令1的輸出作為命令2的操作對象

命令格式:

[root@localhost ~]# 命令1? |? 命令2

#命令1的正確輸出作為命令2的操作對象

顏色顯示?

例子:

[root@localhost ~]# ll -a /etc/? | more

[root@localhost ~]# netstat -an | grep "ESTABLISHED"

搜索正在建立的連接

[root@localhost ~]# grep [選項] "搜索內(nèi)容" 文件名

選項:?

-i:? 忽略大小寫?

-n:? 輸出行號?

-v:? 反向查找? (除了關(guān)鍵字以外的內(nèi)容)

--color=auto 搜索出的關(guān)鍵字用顏色顯示

如:

[root@localhost ~]# grep --color=auto -n? "root" /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

表示搜索 /etc/passwd文件中和“root”相關(guān)的行,同時顯示行號,并且關(guān)鍵字用顏色表示

如:

[root@localhost shFile]# netstat -an | grep --color=auto? "ESTABLISHED"

tcp? ? ? ? 0? ? 96 192.168.1.16:22? ? ? ? ? ? 192.168.1.4:63276? ? ? ? ? ESTABLISHED

udp? ? ? ? 0? ? ? 0 127.0.0.1:50382? ? ? ? ? ? 127.0.0.1:514? ? ? ? ? ? ? ESTABLISHED

(其中ESTABLISHED 會標(biāo)紅)

如:

root@localhost ~]# ll -a /etc | more

這樣就可以通過more查看該目錄有哪些文件。(本來more命令只能查看文件,通過管道符就可以以翻頁的形式查看目錄)

如:

[root@localhost ~]# netstat -an | grep -niv --color=always "ESTABLISHED" | more

反向查找:也就是排除 “ESTABLISHED”的所有內(nèi)容


10.3.5 通配符與其他特殊符號

1、通配符:用來匹配文件名


[root@localhost ~]# cd /tmp/

[root@localhost tmp]# rm -rf *

[root@localhost tmp]# touch abc

[root@localhost tmp]# touch abcd

[root@localhost tmp]# touch 012

[root@localhost tmp]# touch 0abc

[root@localhost tmp]# ls ?abc

[root@localhost tmp]# ls [0-9]*

[root@localhost tmp]# ls [^0-9]*

3、Bash中其他特殊符號?


[root@localhost tongPeiFUFile]# name=lisi

[root@localhost tongPeiFUFile]# echo $name

lisi

[root@localhost tongPeiFUFile]# echo '$name'

$name

[root@localhost tongPeiFUFile]# echo "$name"

lisi

如:

單引號就是單純輸出引號內(nèi)的內(nèi)容

反引號是括起來的是系統(tǒng)命令,Bash中會先執(zhí)行它

雙引號,除了特別的“$ , . ,\”是例外,代表特殊含義

$(命令)? 和反引號一樣,用來引用系統(tǒng)命令

$表示用于調(diào)用變量的值

\ 轉(zhuǎn)義符,在\之后的特殊符號將失去意義,變?yōu)槠胀ㄗ址?/p>

[root@localhost tongPeiFUFile]# echo '$date'

$date

[root@localhost tongPeiFUFile]# echo `date`

2020年 05月 10日 星期日 08:53:54 CST

[root@localhost tongPeiFUFile]# echo $(date)

2020年 05月 10日 星期日 08:54:19 CST

[root@localhost tongPeiFUFile]# echo "date"

date

[root@localhost tongPeiFUFile]# echo "$date"

反引號與$()

[root@localhost ~]# echo `ls`?

[root@localhost ~]# echo $(date)?

單引號與雙引號

[root@localhost ~]# name=sc

[root@localhost ~]# echo '$name'

[root@localhost ~]# echo "$name"

[root@localhost ~]# echo ‘$(date)'

[root@localhost ~]# echo “$(date)"


10.4 Bash的變量

10.4.1 用戶自定義變量

1、 什么是變量

? 變量是計算機內(nèi)存的單元,其中存放的值可以改變。當(dāng)Shell腳本需要保存一些信息時,如一個文件名或是一個數(shù)字,就把它存放在一個變量中。每個變量有一個名字,所以很容易引用它。使用變量可以保存有用信息,使系統(tǒng)獲知用戶相關(guān)設(shè)置,變量也可以用于保存暫時信息。

2、 變量設(shè)置規(guī)則

?變量名稱可以由字母、數(shù)字和下劃線組成,但是不能以數(shù)字開頭。如果變量名是“2name”則是錯誤的。

?在Bash中,變量的默認(rèn)類型都是字符串型,如果要進(jìn)行數(shù)值運算,則必修指定變量類型為數(shù)值型。

?變量用等號連接值,等號左右兩側(cè)不能有空格。

?變量的值如果有空格,需要使用單引號或雙引號包括。 如:name = 'shen chao'

?在變量的值中,可以使用“\”轉(zhuǎn)義符。

?如果需要增加變量的值,那么可以進(jìn)行變量值的疊加。不過變量需要用雙引號包含“$變量名”或用${變量名}包含。

?如果是把命令的結(jié)果作為變量值賦予變量,則需要使用反引號或$()包含命令。 如 name = $(date)

?環(huán)境變量名建議大寫,便于區(qū)分。

3、變量分類

?用戶自定義變量 ?

? 環(huán)境變量:這種變量中主要保存的是和系統(tǒng)操作環(huán)境相關(guān)的數(shù)據(jù)。 (有一部分和系統(tǒng)相關(guān)的變量,名字不能修改,但是值可以修改。且可以新建新的環(huán)境變量)

?位置參數(shù)變量:這種變量主要是用來向腳本當(dāng)中傳遞參數(shù)或數(shù)據(jù)的,變量名不能自定義,變量作用是固定的。(能改變值,但是不能新建)

?預(yù)定義變量:是Bash中已經(jīng)定義好的變量,變量名不能自定義,變量作用也是固定的。(只能改值,也是不能新建)

4、本地變量

?變量定義

[root@localhost ~]# name="shen chao"

?變量疊加

[root@localhost ~]# aa=123

[root@localhost ~]# aa="$aa"456

[root@localhost ~]# aa=${aa}789

?變量調(diào)用

[root@localhost ~]# echo $name?

?變量查看

[root@localhost ~]# set?

查看當(dāng)前系統(tǒng)全部變量

?變量刪除

[root@localhost ~]# unset name

如:

[root@localhost tongPeiFUFile]# aa=123

[root@localhost tongPeiFUFile]# echo $aa

123

[root@localhost tongPeiFUFile]# aa=${aa}456

[root@localhost tongPeiFUFile]# echo $aa

123456

[root@localhost tongPeiFUFile]# aa="$aa"789

[root@localhost tongPeiFUFile]# echo $aa

123456789


10.4.2 環(huán)境變量

1、環(huán)境變量是什么

?用戶自定義變量只在當(dāng)前的Shell中生效,而環(huán)境變量會在當(dāng)前Shell和這個Shell的所有子Shell當(dāng)中生效。如果把環(huán)境變量寫入相應(yīng)的配置文件,那么這個環(huán)境變量就會在所有的Shell中生效

tips:pstree是以樹結(jié)構(gòu)顯示進(jìn)程(–display a tree of processes),也就是確定進(jìn)程數(shù)量,顯示是父shell還是子shell

提示:-bash: pstree: 未找到命令,那么root身份執(zhí)行 yum install psmisc

2、設(shè)置環(huán)境變量

export 變量名=變量值

#申明變量?

[root@localhost ~]# export aa=11

[root@localhost ~]# declare -p aa

declare -x aa="11"

表示:把aa生命為環(huán)境變量,并且賦值為11

env

#專門用于查詢環(huán)境變量的(set是查詢所有變量)

unset 變量名

#刪除變量

echo $age

#調(diào)用變量

3、系統(tǒng)常見環(huán)境變量

?PATH:系統(tǒng)查找命令的路徑

如:

[root@localhost shFile]# bash hello2.sh

shuhongwang is the root

[root@localhost shFile]# ./hello2.sh

-bash: ./hello2.sh: 權(quán)限不夠

[root@localhost shFile]# chmod 755 hello2.sh

[root@localhost shFile]# ./hello2.sh

shuhongwang is the root

[root@localhost shFile]# cd /root

[root@localhost ~]# /tmp/shFile/hello2.sh

shuhongwang is the root

[root@localhost ~]# cp /tmp/shFile/hello2.sh /bin/

表示把hello2.sh所在的環(huán)境加入PATH這個環(huán)境變量,這樣就可以在任何位置直接運行hello2.sh

[root@localhost ~]# hello2.sh

shuhongwang is the root

如:

[root@localhost ~]# 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變量疊加

?PS1:定義系統(tǒng)提示符的變量 (只能set才能看到,env看不到)

\d:顯示日期,格式為“星期 月 日”

\h:顯示簡寫主機名。如默認(rèn)主機名“l(fā)ocalhost”

\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用戶會顯示提示符為“#”,如果是普通用戶會顯示提示符為“$”

舉例:

[root@localhost ~]# PS1='[\u@\t:\w ]'

[root@10:31:47:/tmp ]cd /tmp/shFile/

[root@10:31:53:/tmp/shFile ]cd /root

[root@10:32:18:~ ]PS1='[\u@\#:\t:\w ]\$ '

?[root@localhost ~]# PS1='[\u@\t \w]\$ '

?[root@04:50:08 /usr/local/src]#PS1='[\u@\@ \h \# \W]\$‘?

?[root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$ '

[顯示當(dāng)前用戶名? 顯示當(dāng)前用戶名? 顯示當(dāng)前所在目錄的最后一個目錄] 提示符


10.4.3 位置參數(shù)變量

1、 位置參數(shù)變量


例子1:

#!/bin/bash

num1=$1

num2=$2

sum=$(( $num1 + $num2))

#變量sum的和是num1加num2

echo $sum

#打印變量sum的值

例子2:

#!/bin/bash

echo "A total of $# parameters"

#使用$#代表所有參數(shù)的個數(shù)

echo "The parameters is: $*"

#使用$*代表所有的參數(shù)

echo "The parameters is: $@"

#使用$@也代表所有參數(shù)

例子3:$*與$@的區(qū)別

#!/bin/bash

for i in "$*"

#$*中的所有參數(shù)看成是一個整體,所以這個for循環(huán)只會循環(huán)一次

do

echo "The parameters is: $i"

done

x=1

for y in "$@"

#$@中的每個參數(shù)都看成是獨立的,所以“$@”中有幾個參數(shù),就會循環(huán)幾次

do

echo "The parameter$x is: $y"

x=$(( $x +1 ))

done


10.4.4 預(yù)定義變量

1、預(yù)定義變量


$?? 返回最后一次執(zhí)行命令的狀態(tài),0表示上一個命令正確執(zhí)行,非0表示未正確執(zhí)行,具體是哪個數(shù),是有命令自己來決定的

$$? 當(dāng)前進(jìn)程的進(jìn)程號 PID

$!? 后臺運行的最后一個進(jìn)程的進(jìn)程號PID

例子:

#/bin/bash

# Author: shenchao (E-mail: shenchao@lampbrother.net)

echo "The current process is $$"

#輸出當(dāng)前進(jìn)程的PID。

#這個PID就是variable.sh這個腳本執(zhí)行時,生成的進(jìn)程的PID

find /root -name hello.sh &

#使用find命令在root目錄下查找hello.sh文件

#符號&的意思是把命令放入后臺執(zhí)行,工作管理我們在系統(tǒng)管理章節(jié)會詳細(xì)介紹

echo "The last one Daemon process is $!"

2、接收鍵盤輸入

[root@localhost ~]# read [選項] [變量名]

選項:?

-p(小寫) “提示信息”:在等待read輸入時,輸出提示信息?

-t 秒數(shù):read命令會一直等待用戶輸入,使用此選項可以指定等待時間?

-n 字符數(shù): read命令只接受指定的字符數(shù),就會直接執(zhí)行,不必等到回車才執(zhí)行

-s:? 隱藏輸入的數(shù)據(jù),適用于機密信息的輸入?

#!/bin/bash

#Author: shenchao (E-mail: 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 "

echo -e "\n"

read -n 1 -t 30 -p "Please select your gender[M/F]: " gender

#使用“-n 1”選項只接收一個輸入字符就會執(zhí)行(不用輸入回車)

echo -e "\n"

echo " $name is $age olds, gender is $gender "


10.5 Bash的運算符

10.5.1 數(shù)值運算與運算符

1、 declare聲明變量類型

[root@localhost ~]# declare [+/-][選項] 變量名

選項:?

-:? 給變量設(shè)定類型屬性?

? +:? 取消變量的類型屬性?

-i:? 將變量聲明為整數(shù)型(integer)?

-x: 將變量聲明為環(huán)境變量?

-p:? 顯示指定變量的被聲明的類型

2、 數(shù)值運算

方法1 :

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22 #給變量aa和bb賦值

[root@localhost ~]# declare -i cc=$aa+$bb

方法2:expr或let數(shù)值運算工具

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

#給變量aa和變量bb賦值

[root@localhost ~]# dd=$(expr $aa + $bb)

#dd的值是aa和bb的和。注意“+”號左右兩側(cè)必須有空格?

方法3:“$((運算式))”或“$[運算式]” (推薦)

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

[root@localhost ~]# ff=$(( $aa+$bb ))

[root@localhost ~]# gg=$[ $aa+$bb ]

3、運算符


[root@localhost ~]$ aa=$(( (11+3)*3/2 ))

#雖然乘和除的優(yōu)先級高于加,但是通過小括號可以調(diào)整運算優(yōu)先級

[root@localhost ~]$ bb=$(( 14%3 ))

#14不能被3整除,余數(shù)是2

[root@localhost ~]$ cc=$(( 1 && 0 ))

#邏輯與運算只有想與的兩邊都是1,與的結(jié)果才是1,否則與的結(jié)果是0



10.5.2 變量測試與內(nèi)容替換


例子1:測試x = $ { y - 新值}

[root@localhost ~]# unset y

#刪除變量y

[root@localhost ~]# x=${y-new}

#進(jìn)行測試

[root@localhost ~]# echo $x new

#因為變量y不存在,所以x=new

[root@localhost ~]# y=""

#給變量y賦值為空

[root@localhost ~]# x=${y-new}

#進(jìn)行測試

[root@localhost ~]# echo $x

[root@localhost ~]# y=old

#給變量y賦值

[root@localhost ~]# x=${y-new}

#進(jìn)行測試 [root@localhost ~]# echo $x

old


10.6 環(huán)境變量配置文件

10.6.1 環(huán)境變量配置文件簡介

1、source命令

[root@localhost ~]# source 配置文件

[root@localhost ~]# . 配置文件? (點和配置文件之間有空格)

其作用就是讓修改的配置文件直接生效,配置文件不用關(guān)機重啟才生效

2、環(huán)境變量配置文件簡介

?環(huán)境變量配置文件中主要是定義對系統(tǒng)的操作環(huán)境生效的系統(tǒng)默認(rèn)環(huán)境變量,比如PATH、HISTSIZE、PS1、HOSTNAME等默認(rèn)環(huán)境變量。

?/etc/profile (對所有用戶均生效)

?/etc/profile.d/*.sh (對所有用戶均生效)

?~/.bash_profile (只對當(dāng)前用戶有效,~這個符號代表用戶家目錄)

?~/.bashrc (只對當(dāng)前用戶有效,~這個符號代表用戶的家目錄)

?/etc/bashrc(對所有用戶均生效)


10.6.2 環(huán)境變量配置文件作用


?/etc/profile

?/etc/profile.d/*.sh

?~/.bash_profile

?~/.bashrc

?/etc/bashrc

tips:/etc 目錄下的對所有用戶都生效

~/.bash_profile 和 ~/.bashrc -> 每個用戶自己的配置文件,只對用戶生效。

下圖為配置文件讀取順序:

上圖從左到右如果沒有疊加。后面的命令會覆蓋前面的命令。

/etc/profile的作用:

? USER變量:

? LOGNAME變量:

? MAIL變量:

? PATH變量:

? HOSTNAME變量:

? HISTSIZE變量: (最大能記錄的歷史命令的行數(shù))

? umask:

? 調(diào)用/etc/profile.d/*.sh文件?

~/.bash_profile的作用 (如: /root/.bash_profile)

?用了~/.bashrc文件。 定義系統(tǒng)別名

?在PATH變量后面加入了“:$HOME/bin”這個目錄

/etc/bashrc(只對登錄時不需要輸入密碼的用戶生效)

最主要是定義了:登錄提示符

PS1變量(對所有用戶有效)

umask(no login)

PATH變量(no login)

調(diào)用/etc/profile.d/*.sh 文件(no login)


10.6.3 其他配置文件和登錄信息

1、 注銷時生效的環(huán)境變量配置文件

? ~/.bash_logout?

也就是用戶注銷時,進(jìn)行的一些清空等處理,可以寫到這個文件中

2、 其他配置文件

? ~/bash_history

所有敲過的命令(不包括此次登錄時用的命令,要重啟才生效)

3、 Shell登錄信息

本地終端歡迎信息: /etc/issue


注意:登錄之前顯示的信息

遠(yuǎn)程終端歡迎信息: /etc/issue.net?


1)轉(zhuǎn)義符在/etc/ issue. net文件中不能使用

2)是否顯示此歡迎信息,由ssh的配置文件etc/ssh/sshd_config決定,加入“ Banner etc/issue. net”行才能顯示(記得重啟SSH服務(wù))

service sshd restart

注意:登錄之前顯示的信息

登陸后歡迎信息:/etc/motd

不管是本地登錄,還是遠(yuǎn)程登錄,都可以顯示此歡迎信息

注意:登錄之后顯示的信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,991評論 2 374

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