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)程登錄,都可以顯示此歡迎信息
注意:登錄之后顯示的信息