歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux Shell基礎-腳本執行方式和Bash基本功能

Linux Shell基礎-腳本執行方式和Bash基本功能

日期:2017/3/1 9:09:16   编辑:SHELL編程

一 概述
1 Shell是一個命令行解釋器,它為用戶提供了一個向內核發送請求以便運行程序的界面系統級程序

Shell還是一個功能強大的編程語言,易編寫,易調試,靈活性較強,Shell是解釋執行的腳本語言,在Shell中可以直接調用Linux系統命令

2 Shell的分類
Bourne Shell:從1979年起Unix就開始使用Bourne Shell,Bourne Shell的主文件名為sh
C Shell :主要在BSD版的Unix系統中使用,其語法和C語言相似而得名
Shell的兩種主要語法類型有Bourne 和C ,這兩種語法彼此不兼容,Bourne家族主要包括sh,ksh,Bash,psh,zsh,C家族主要包括csh,tcsh
Bash與sh兼容,現在使用的Linux就是使用Bash作為用戶的基本Shell
Linux支持的Shell我們可以通過查看/etc/shells文件進行查看

我們也可以直接切換shell,比如切換成sh

再切回來

二 腳本執行方式
echo 輸出命令
echo 選項 輸出內容
-e 支持反斜槓控制的字符轉換

我們來看幾個例子

\b代表刪除左側字符

\t是制表符,也就是Tab鍵
\n是換行符

\xhh 按照十六進制ASCII碼表輸出字符,其中hh是兩位十六進制數

輸出顏色

好了,下面來寫我們的第一個shell腳本

注意第一行不是注釋,代表我接下來寫的是shell腳本
然後我們執行
有兩種方式,一種是先給該文件賦予執行權限
chmod 755 hello.sh
然後再執行./hello.sh

另外一種直接bash hello.sh

三 Bash的基本功能
1 歷史命令與命令補全
history 這個命令可以查看用戶敲的歷史命令,注意,這裡只是緩存

-w 把緩存中的歷史命令寫入歷史命令保存文件~/.bash_history
-c 會清楚歷史記錄

歷史命令默認會是1000條,可以在/etc/profile中進行修改

歷史命令的調用
使用上,下箭頭調用以前的歷史命令
使用!n執行第n條歷史命令
使用!!執行上一條歷史命令
使用!字符串,執行最後一條以該字符串開頭的命令

在Bash中,命令與文件補全是非常方便與常用的功能,我們只需要在輸入命令或文件時,按TAB鍵就會自動補全,如果遇到多個文件匹配,按兩次TAB鍵,所有匹配的就都會顯示出來

2 命令別名與常用快捷鍵
我們可以用alias查看系統中已經設定了哪些別名

可以看到這裡都是系統已經設置好的別名,我們平時在執行cp的時候其實執行的是cp -i
執行ll的時候執行的是ls -l –color=auto
那麼我們可以用alias 別名=’原命令’ 來設置別名
比如我想設置vim的別名為vi,以後我打vi命令的時候就其實就是用的vim
alias vi=’vim’

我們可以看到設置成功了
命令執行時的順序
第一順位執行用絕對路徑或相對路徑執行的命令
第二順位執行別名
第三順位執行Bash的內部命令
第四順位執行按照PATH環境變量定義的目錄查找順序找到的第一個命令也就是說如果我們設置了別名,那麼再敲命令的時候,就會先執行別名的, PATH的環境變量是什麼呢,我們用echo 看一下

這些路徑就是環境變量,有點類似windows的環境變量
刪除別名用unalias 別名 很簡單
我們用命令設置的別名,如果重啟就會失效,那麼如果想讓別名永久生效,需要修改/root/.bashrc文件

Bash常用快捷鍵

藍色的是一般用的比較多的,需要掌握

3 輸入輸出重定向
標准輸入輸出
設備 設備文件名 文件描述符 類型
鍵盤 /dev/stdin 0 標准輸入
顯示器 /dev/stdout 1 標准輸出
顯示器 /dev/stderr 2 標准錯誤輸出

輸出重定向
類型 符號 作用
標准輸出重定向 命令 > 文件 以覆蓋的方式把命令的正確輸出輸出到指定文件或設備中
命令 >> 文件 以追加的方式把命令的正確輸出輸出到指定文件或設備中
舉個例子 ls > abc 把ls的輸出結果保存到abc這個文件中

date >> abc 把date的輸出結果追加到abc這個文件中

標准錯誤輸出重定向 錯誤命令 2> 文件 以覆蓋的方式把命令的錯誤輸出輸出到指定文件或設備中
錯誤命令 2>> 文件 以追加的方式把命令的錯誤輸出輸出到指定文件或設備中
lsd 2> bcd
lsd 2>> bcd

在實際使用中,上面兩張形式用的比較少,因為我要是都知道這個命令是錯的了,還打印輸出到文件干嘛,直接改了就行了,所以實際應用中,下面的情況用的比較多

正確輸出和錯誤輸出同時保存
命令 > 文件 2>&1 以覆蓋的方式把命令的正確輸出和錯誤輸出同時保存到文件中

也就是輸出重定向到文件中的時候,不管命令正確還是錯誤輸出都保存
命令 >> 文件 2>&1 以追加的方式把命令的正確輸出和錯誤輸出同時保存到文件中

命令 &> 文件 等同於命令 > 文件 2>&1
命令 &>> 文件 等同於命令 >> 文件 2>&1

命令 >>文件1 2>>文件2 把正確的輸出追加到文件1中,把錯誤的輸出追加到文件2中

輸入重定向
命令 < 文件 把文件作為命令的輸入
我們先說下wc命令
這個命令的意思是統計字節數,單詞數,行數
-c 統計字節數 -w 統計單詞數 -l統計行數 什麼都不加就都統計
wc命令執行後,隨便輸入,以Ctrl+Shift +D結束

3行,4個單詞,17個字節
我們可以用wc < abc來統計abc文件中的行數,單詞數,字節數

命令<<標示符
。。。
標示符
把標示符之間內容作為輸入

4 多命令順序執行與管道符
命令1;命令2 多個命令順序執行,命令之間沒有任何邏輯關系

命令1&&命令2 邏輯與 當命令1正確執行,命令2才會執行
當命令1執行不正確,命令2不會執行

命令1 || 命令2 邏輯或 當命令1執行不正確,命令2才會執行
當命令1執行正確,命令2不會執行

來看一個經常用到的例子
命令&& echo yes || echo no 這樣就可以判斷命令是否正確執行

管道符
命令1 | 命令2
命令1的正確輸出作為命令2的操作對象
ll -a /etc/ | more

ll -a /etc/ | grep “abrt”

grep 選項 “搜索內容” 文件名
-i 忽略大小寫
-n 輸出行號
-v 反向查找
–color=auto 搜索出的關鍵字用顏色顯示

5 通配符和其他特殊符號
? 匹配一個任意字符
* 匹配0個或多個任意字符
[]匹配括號中的任意一個字符 [abc]代表或者是a,或者是b,或者是c
[-]匹配括號中的任意一個字符,-代表范圍 [a-z] a到z的任意一個字符
[^] 邏輯非 [^0-9]匹配一個不是數字的字符

其他特殊符號
” 單引號 在單引號中的所有特殊字符,都沒有特殊含義
“”雙引號 在雙引號中的特殊字符,沒有特殊含義,但是””“‘”“\”例外,分別擁有調用變量的值,引用命令,轉義符的特殊含義 () 用來引用系統變量
“反引號 反引號括起來的內容是系統命令,在Bash中會先執行它,作用和()一樣,但是推薦使用 (),因為反引號容易看錯
在shell腳本中代表注釋
$調用變量的值
\轉義字符,跟在\之後的特殊符號將失去特殊意義

先來看看單引號和雙引號的區別

$name 是調用name變量的值,但是用單引號括起來就失去這個意義

反引號於$()

好了,Linux Shell基礎,腳本執行方式和Bash基本功能就總結到這裡,如有問題,歡迎指正,謝謝。

Copyright © Linux教程網 All Rights Reserved