Linux Shell基礎

1、Shell概述

1.1Shell是什麼

概述:命令行解釋器,翻譯程序指令給內核請求調用硬件功能。
通俗來說是:內核和用戶之間的命令解釋器,至關於一個翻譯官。linux

計算機識別:二進制(依賴 ASCII碼錶翻譯)
爲用戶提供了一個 -》 Linux內核(發送請求)-》運行程序
實質:界面系統級程序
用途:啓動、掛起、中止、編寫程序
編程語言:解釋執行的腳本語言,可直接調用 Linux系統命令

Shell:Linux中的字符界面(接受命令、將命令轉換成二進制)
Windows:有shell嗎?操做界面能夠稱爲shellshell

clipboard.png

1.2 Shell分類

1.Bourne Shell:從1979起Unix就開始使用bourne shell,bourne shell的主文件名爲sh。
2.C Shell:C Shell主要在BSD版的Unix系統中使用,其語法和C語言相相似而得名。
3.shell的兩種主要語法類型有bourne和C,這二者語法彼此不兼容。

echo $SHELL 查看Shell
Bash:Bashsh兼容,如今使用的Linux就是使用Bash做爲用戶的基本Shell編程

Linux支持的shell 目錄vi /etc/shells緩存

1.3 shell的主要做用

幫助管理員簡化管理linux系統的一種腳本語言,簡化管理操做。沒有像Java、PHP等語言複雜的功能。bash

2、腳本執行方式

2.1 echo輸出命令

格式: echo [選項] [輸出內容]

選項: -e:支持反斜線控制的字符轉換服務器

\a - 輸出警告音
\b - 退格符
\n - 換行符
\r - 回車鍵
\t - 製表符,也就是tab鍵
\v - 垂直製表符
\0nnn - 按照八進制ASCII碼輸出字符
\xhh - 按照十六進制ASCII表輸出字符

echo "bols he cangls ni xihuan nayige"
echo -e "bols he cangls nib xihuan nayige"
echo -e "hellbo"
echo -e "htetlnltot"
echo -e "x68tx65tx6cnx6ctx6f"
echo -e "e[1;31mShell基礎e[0m"編程語言

輸出顏色:spa

\e[1;xxm - 開啓顏色顯示; \e[0m - 關閉顏色顯示

30m=黑色,31m=紅色,32m=綠色,33m=黃色
34m=藍色,35m=洋紅,36m=青色,37m=白色命令行

2.2 腳本執行

方法1:賦予執行權限,直接運行翻譯

chmod 755 hello.sh

./hello.sh(或者絕對路徑執行 /root/hello.sh

方法2:經過Bash調用執行腳本

bash hello.sh

註解:#
第一行:#!/bin/Bash
不是註釋,它標稱下面的內容是Linux的標準腳本程序
若是該腳本使用純shell語句完成,不加#!/bin/Bash,運行沒問題
但,腳本調用了其餘語言,就會報錯。

3、Bash的基本功能

3.1 命令別名與快捷鍵

3.1.1 別名

alias:查看系統中全部的命令別名

alias ls = 'ls --color=never'

設定別名(臨時生效,重啓或重登陸後失效)

alias 別名=‘原命令’(臨時的)

永久生效
vi ~/.bashrc(不止一個環境變量文件) --寫入環境變量配置文件(~表明用戶家目錄)
vi /root/.bashrc --增長alias ls = 'ls --color=never'(系統再次重啓後永久生效)
source .bashrc--使當前環境變量設置生效(不須要系統再次重啓後永久生效)

刪除別名:
unalias ls

命令生效順序

第一順位執行絕對路徑或者相對路徑的命令
第二順位執行別名
第三順位執行Bash的內部命令
第四順位執行按照$PATH環境變量設置定義的目錄順序的第一個命令

3.1.2 快捷鍵

ctrl + c 強制終止
ctrl + l 清屏至關於clear
ctrl + a 光標快速回到行首
ctrl + e 光標快速去到行尾
ctrl + u 從光標所在位置刪除到行首
ctrl + z 把命令放入後臺--這個命令很謹慎使用
ctrl + r 歷史命令搜索

3.2 歷史命令

歷史命令指的是把操做過的命令保留在系統當中, 當須要的時候能夠從新進行調用。

cat ~./history, 該文件下記錄的命令是上次登陸, 正確註銷以後保存的。
history 命令查看, 不止有以前保存下來的, 還有本次登陸後新操做的命令, 這些命令只有本次正確退出以後纔會寫入 ~./bash_history

history [選項] [歷史命令保存文件]

選項:

-c : 清空歷史命令
# 不建議清空緣由1 : 當本次操做出現錯誤可用過歷史命令進行比對排錯
# 不建議清空緣由2 : 當登陸後發現歷史命令被清空, 則可判斷出有人登陸過該帳戶或服務器
# 不建議清空緣由3 : 即便命令保存數目衆多, 文件大小也不大, 不會給服務器形成多大壓力
-w : 把緩存中的歷史命令強制寫入歷史命令保存文件 ~/.bash_history

歷史命令默認保存1000條, 能夠再環境變量配置文件 /etc/profile 中進行修改 (HISTSIZE)

歷史命令的調用:

使用上、下箭頭調用之前的歷史命令
使用 "!n" 重複執行一次第 n 條歷史命令
使用 "!!" 重複執行一次上一條命令
使用 "!字串" 重複執行一次最後一條以該字串開頭的命令

執行service network restart後再輸入!ser,就是執行一樣命令。

命令與文本補全

  1. Bash中, 命令目錄文件補全是很是方便與經常使用的功能, 咱們只要在輸入命令或文件時, 按"Tab"鍵就會自動進行補全。
  2. 系統進行命令補全是依賴 : $PATH

3.3 輸出/入重定向

clipboard.png

3.3.1 輸出重定向

clipboard.png

clipboard.png

關於2>&1的含義

  1. 含義:將標準錯誤輸出重定向到標準輸出
  2. 符號>&一個總體,不可分開,分開後就不是上述含義了。 好比有些人可能會這麼想:2是標準錯誤輸入,1是標準輸出,>是重定向符號,那麼」將標準錯誤輸出重定向到標準輸出」是否是就應該寫成」2>1」就好了?是這樣嗎? 若是是嘗試過,你就知道2>1的寫法實際上是將標準錯誤輸出重定向到名爲」1」的文件裏去了
  3. 寫成2&>1也是不能夠的

Q&A : 每次都寫」>log 2>&1」太麻煩,能簡寫嗎?
有如下兩種簡寫方式

1. &>log
2. >&log

上面兩種方式都和」>log 2>&1」一個語義。
那麼 上面兩種方式中&>和>&有區別嗎?
語義上是沒有任何區別的,可是第一中方式是最佳選擇,通常使用第一種

命令 &> /dev/null 將命令的結果丟入null(做用相似於垃圾箱)中 只執行,不顯示.

3.3.2 輸入重定向(用的少,瞭解便可)

wc [選項] [文件名]

選項:

-c:統計字節數
-w:統計單詞數
-l:統計行數

wc < 文件名 用文件的內容做爲輸入
wc << 標識符
...
標識符 把標識符之間內容做爲命令的輸入

3.4 多命令執行符與管道符

clipboard.png

腳本中的應用:

命令 && echo yes || echo no

命令正確yes 錯誤no

注意: && echo yes || echo no 順序不能顛倒,否則命令出錯的時候會同時輸出no yes

分頁顯示文件內容:

more [文件名]

管道符:

命令1 | 命令2

命令1正確的結果 做爲命令2的操做對象。

例如

ls -l > /etc/ | more 用於分頁顯示命令執行結果
netstat -an | grep ESTABLISHED | wc -l 用於查看當前鏈接本機的客戶端,並統計客戶端數量

3.4通配符(文件名或者目錄名)

1.?  匹配任意一個字符
2.*  匹配0個或任意多個字符
3.[] 匹配括號中任意一個字符
4.[-]匹配括號中任意一個字符,-表明一個範圍
5.[^]匹配不是括號中任意一個字符

如:ls test*

Bash中其餘特殊符號:

'' 單引號,在單引號中左右的特殊符號,如$,&都沒有特殊含義
"" 雙引號,在雙引號中左右的特殊符號都沒有特殊含義,可是「$」,"`","\"是例外。擁有「調用變量的值」,「引用命令」和「轉義符」的特殊含義
`` 反引號,反引號括起來的內容是系統命令,在Bash中會先執行它。和$()做用同樣。
$() 用來引用系統命令
# 在Shell腳本中,#開頭的行表明註釋
$ 用於調用變量的值,如須要調用變量name的值時,須要用$name的方式獲得變量的值
\ 轉義符,跟在\以後的特殊符號將失去特殊含義,變爲普通字符。如\$將輸出"$"符號
相關文章
相關標籤/搜索