1. 程式人生 > >走入計算機的第十一天(shell的一些簡單用法)

走入計算機的第十一天(shell的一些簡單用法)

調用 gen 眼睛 加載 賦值 mem end 表示 簡單用法

一 BASH的屬性
BASH中會存儲一些自身屬性的參數,啟用或關閉某一項功能
例如控制* .字符是否為通配
查看參數 set -o
關閉noglob參數
set -o noglob
ls *
ls: *: 沒有那個文件或目錄

set +o noglob
ls *

固化設定
我們前面所學習的更改變量 屬性等等都是在內存中修改 機器重新啟動後就會恢復默認值
那麽怎麽固化這些設置 讓他們永久生效呢?
這就需要了解BASH兩種類型
1.登錄shell 2.非登錄shell
登錄shell
就是通過輸入用戶名 密碼後 或 su - 獲得的shell
非登錄shell 則是通過bash命令和腳本開啟的shell環境
那麽他們有什麽區別呢?和我們固化設定又有什麽關系呢?
我們知道在linux裏一切皆為文件,同樣,shell的屬性加載也是寫到文件裏的
在登陸時就會加載對應文件的內容來初始化shell環境,
非登錄與登錄區別就在於加載的文件不同 從而導致獲得的shell環境不同
我們看看登錄shell都加載了那些文件
--> /etc/profile
--> /etc/profile.d/*.sh
--> $HOME/.bash_profile
--> $HOME/.bashrc
--> /etc/bashrc
再看非登錄shell加載的文件
--> $HOME/.bashrc
--> /etc/bashrc
--> /etc/profile.d/*.sh
可見,非登錄shell加載的文件要少很多
那麽我們想要固化一個配置時在哪種登錄下生效,就顯而易見的知道該寫在哪個文件裏了
通常,我們會將環境變量設置在 $HOME/.bash_profile 中
如果不管哪種登錄都想使用的變量 就設置在 $HOME/.bashrc中

命令補齊TAB鍵
簡化輸入 提示 防止書寫錯誤

歷史記錄
上下鍵查
history 查詢 用!ID 調用
ctrl+r 輸入匹配

快捷鍵
CTRL+A 行首
CTRL+E 行尾
CTRL+U 刪除自光標到行首串
CTRL+K 刪除自光標到行尾串
CTRL+L 清屏

二 什麽是正則

1 正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說是用來描述一類事物的規則。

2 在linux中,通配符是由shell解釋的,而正則表達式是由命令解釋的。

三 grep命令

1 相關的參數

-n :顯示行號

技術分享

-o :只顯示匹配的內容

技術分享

-q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容

技術分享

-l :如果匹配成功,則只將文件名打印出來,失敗則不打印,通常-rl一起用,grep -rl ‘root‘ /etc

技術分享

-A :如果匹配成功,則將匹配行及其後n行一起打印出來

技術分享

-B :如果匹配成功,則將匹配行及其前n行一起打印出來

技術分享

-C :如果匹配成功,則將匹配行及其前後n行一起打印出來

技術分享

--color
-c :如果匹配成功,則將匹配到的行數打印出來

技術分享

-E :等於egrep,擴展

技術分享

-i :忽略大小寫

技術分享

-v :取反,不匹配

技術分享

-w:匹配單詞

2 grep的種類

grep
fgrep
pgrep
egrep

3正則介紹

^ 行首
$ 行尾
. 除了換行符以外的任意單個字符
* 前導字符的零個或多個
.* 所有字符
[] 字符組內的任一字符
[^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)
^[^] 非字符組內的字符開頭的行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-Z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞一般以空格或特殊字符做分隔,連續的字符串被當做單詞
\> 單詞尾

擴展正則 sed 加 -r 參數 或轉義
grep 加 -E 或 egrep 或轉義
AWK 直接支持 但不包含{n,m}
可以使用--posix支持
awk ‘/ro{1,3}/{print}‘ /etc/passwd
awk --posix ‘/ro{1,3}/{print}‘ /etc/passwd
sed -n ‘/roo\?/p‘ /etc/passwd
sed -rn ‘/roo?/p‘ /etc/passwd
? 前導字符零個或一個
+ 前導字符一個或多個
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出現m次
x\{m,\} x出現m次至多次(至少m次)
x\{m,n\} x出現m次至n次
posix定義的字符分類

[:alnum:] Alphanumeric characters.
匹配範圍為 [a-zA-Z0-9]
[:alpha:] Alphabetic characters.
匹配範圍為 [a-zA-Z]
[:blank:] Space or tab characters.
匹配範圍為 空格和TAB鍵
[:cntrl:] Control characters.
匹配控制鍵 例如 ^M 要按 ctrl+v 再按回車 才能輸出
[:digit:] Numeric characters.
匹配所有數字 [0-9]
[:graph:] Characters that are both printable and visible. (A space is print-
able, but not visible, while an a is both.)
匹配所有可見字符 但不包含空格和TAB 就是你在文本文檔中按鍵盤上能用眼睛觀察到的所有符號
[:lower:] Lower-case alphabetic characters.
小寫 [a-z]
[:print:] Printable characters (characters that are not control characters.)
匹配所有可見字符 包括空格和TAB
能打印到紙上的所有符號
[:punct:] Punctuation characters (characters that are not letter, digits, con-
trol characters, or space characters).
特殊輸入符號 +-=)(*&^%$#@!~`|\"‘{}[]:;?/>.<,
註意它不包含空格和TAB
這個集合不等於^[a-zA-Z0-9]
[:space:] Space characters (such as space, tab, and formfeed, to name a few).

[:upper:] Upper-case alphabetic characters.
大寫 [A-Z]
[:xdigit:] Characters that are hexadecimal digits.
16進制數 [0-f]

使用方法:
[[email protected] ~]# grep --color ‘[[:alnum:]]‘ /etc/passwd

四 變量

1 為何要有變量

程序的運行就是一些列狀態的變量->用變量值的變化去表示

2 變量命名規則

以字母或下劃線開頭,剩下的部分可以是:字母、數字、下劃線.

最好遵循下述規範:

(1).以字母開頭
(2).使用中劃線或者下劃線做單詞的連接
(3).同類型的用數字區分
(4).對於文件最好加上拓展名
例如: sql_bak.tar.gz,log_bak.tar.bz2

3系統變量

set 和 env區別
set:顯示所有變量
env:環境變量

4 變量賦值

VARNAME=VALUE
echo $VARNAME
刪除變量 unset VARNAME

5 常用系統變量

PATH
PWD
LANG
HOME
HISTSIZE
PS1
IFS
域分隔符 是空格,換行,TAB鍵的合集

6 全局變量與局部變量

gender=‘male‘ #在爹這個位置定義一個局部變量gender
export money=1000 #在爹這個位置定義一個全局變量money
bash #切換到子bash
echo $gender #在兒子這裏看它爹的局部變量gender,結果為空->看不到

echo $money #在兒子這裏看它爹的全局變量money,可以看到1000
export hobby=‘piao‘ #在兒子這裏定義一個全局變量hobby
exit #退出,進入爹的bash環境
echo $hobby #爹是看不到兒子的export的,兒子的兒子可以看到

7 定義變量名的邊界

rest_mem=20
echo ${rest_mem}%
20%

8 數據類型

bash中的變量無須聲明,拿來就用.默認的變量都會是字符類型,還可以有數字類型,普通的腳本,這兩種類型夠用了

五 運算符

1 算術運算符

+

-

*

/

%

echo $[3+1]
4

2關系操作

與(())連用

<

>

<=

>=

==

!=

&&

||

test命令相關,[]可以達到一樣的效果
x=1
[ $x -gt 1 ]
echo $?
0

走入計算機的第十一天(shell的一些簡單用法)