shell腳本簡介及經常使用文本編輯命令

什麼是腳本?linux

腳本簡單地說是一條條的文字命令(一些指令的堆積),這些文字命令是能夠看到的,能夠經過記事本打開和編輯正則表達式

爲何要學習和使用shellshell

shell屬於內置腳本編程

程序開發的效率很是高,依賴於功能強大的命令能夠迅速的完成開發任務(批處理)vim

語法簡單,代碼寫起來比較輕送,簡單易學數組

 

shell簡介bash

shell是一個C語言編寫的腳本語言,它是用戶與linux的橋樑,用戶輸入命令交給shell處理,shell將相應的操做傳遞給內核,內核把處理的結果輸出給用戶學習

Linux 基本思想有兩點:第一,一切都是文件;第二,每一個軟件都有肯定的用途。字體

shell分類this

1:圖形界面shell

GUI shell 是爲Unix或者類Unix操做系統構建的一個功能完善操做簡單以及界面友好的桌面環境。

2:命令行界面shell

CLI是在用戶提示符下鍵入可執行指令的界面,用戶經過鍵盤輸入指令,完成一系列操做。

查看shell 

shell是一個程序,通常放在/bin或者/user/bin目錄下,當前linux系統可用的shell都記錄在/etc/shells文件中。/etc/shells是一個純文本文件,你能夠在圖形界面下打開它,也可使用cat命令查看他。

在如今的linux上,sh已經被bash代替,/bin/sh每每是指向/bin/bash的符號連接

若是你但願查看當期那linux的默認shell,那麼能夠輸出SHELL環境變量

$ echo $SHELL
/bin/bash

輸出結果代表默認的shell是bash

SHELL是linux系統中的環境變量,他指明瞭使用的shell程序的位置,也就是使用的哪一個腳本

 

第一個shell腳本

用vim打開test.sh

#!/bin/bash
echo "Hello world!"

第一行是指定解釋器,第二行是打印Hello World!

寫好後,有三種執行腳本的方法

方法一:直接用bash解釋器執行

# bash test.sh
Hello world!

當前終端會新生成一個子 bash 去執行腳本。

方法二:添加可執行權限

# ll
test.sh -rw-r--r--. 1 root root 32 Aug 18 01:07 test.sh
 # chmod +x test.sh
 # ./test.sh
-bash: ./test.sh: Permission denied
# chmod +x test.sh
# ./test.sh
Hello world!

這種方式默認根據腳本第一行指定的解釋器處理,若是沒寫以當前默認 Shell 解釋器執行。

注意,這裏在運行時必定要寫成 ./test.sh(絕對路徑亦可),而不是 test.sh,運行其它二進制的程序也同樣,直接寫 test.sh,Linux 系統會去 PATH(環境變量) 裏尋找有沒有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 裏,你的當前目錄一般不在 PATH 裏,因此寫成 test.sh 是會找不到命令的,要用 ./test.sh 告訴系統說,就在當前目錄找。

 方法三:source命令執行,以當前默認shell解釋器執行

# source test.sh
Hello world!

三種方法的區別:

當shell腳本具備可執行權限時,用bash與絕對路徑執行腳本是沒區別的。絕對路徑是由於當前目錄沒在PATH中,因此用"."是用來表示當前目錄的

source這個命令其實只是簡單地讀取腳本里面的語句一次在當前的shell裏面執行,沒有創建行的子shell。那麼腳本里面全部的新建、改變變量的語句都會保存在當前的shell裏面

bash從新創建一個子shell,在子shell中執行腳本里面的語句,該子shell繼承父shell的環境變量,但子shell新建的、改變的變量不會被帶回父shell

shell編程的幾個經常使用命令

grep命令詳解

過濾來自一個文件或者面準輸入匹配模式的內容

除了grep外,還有egrep。egrep是grep的擴展,至關於grep -E 

grep經常使用選項

    選項             

                  描述                                     

-E,--extended-regexp                                

模式是擴展正則表達式(ERE)                                

 -i,--ignore-case

忽略大小寫

 -n,--line-number

打印行號

 -o,--only-matching

只打印匹配的內容

 -c,--count

只打印每一個文件匹配的行數

 -B,--before-context=NUM

打印匹配的前幾行

 -A,--after-context=NUM

打印匹配的後幾行

-C,--context=NUM

打印匹配的先後幾行

--color[=WHEN],

 匹配的字體顏色

-v,--invert-match

 打印不匹配的行

cut命令

使用說明:

cut命令從文件的每一行剪切字節,字符和字段並將這些字節,字符和字段寫至標準輸出

若是不指定file參數,cut命令將讀取標準輸入

經常使用參數:

-c:以字符爲單位進行分割

-d:自定義分隔符

-f:與-d一塊兒使用,指定顯示哪一個區域

[root@ken ~]# echo "this is ken" | cut -c  4
s
[root@ken ~]# echo 'this is ken' | cut -d' ' -f3
ken

sort命令

sort命令用於將文本內容加以排序

sort可針對文本文件的內容,以行爲單位來排序

經常使用參數說明:

*  -n:依據數值的大小排序(默認是根據字符進行排序)

*  -r:以相反的順序來排序

*  -u:去除重複的行(只要那個指定的字段重複,就認定是重複的行)

   -t:<分隔符號>指定排序時所用的欄位分割字符

   -k:根據切割後的那一段進行排序

uniq命令

做用:去除重複的行(相鄰且相同,認定爲重複)

選項:

  -c:在首行用數字表示該行出現了多少次

  -u:僅僅顯示那些沒有出現重複過的行

seq命令

做用:生成一個數組序列

[root@ken ~]# seq 5       #終止位5
1
2
3
4
5
[root@ken ~]# seq 2 5     #起始位2,終止位5
2
3
4
5
[root@ken ~]# seq 2 2 10  #起始位2,步長爲2,終止位10
2
4
6
8
10

tr命令

做用:忽然命令用於轉換或者刪除文件中的字符

tr指令從標準輸入設備讀取數據,通過字符串轉義後,將結果輸出到標準輸出設備

a-z  任意小寫

A-Z  任意大寫

0-9  任意數字

替換實例:

[root@ken ~]# echo "this is ken" | tr a-z A-Z
THIS IS KEN
[root@ken ~]# echo "THIS IS KEN" | tr A-Z a-z
this is ken

刪除特定字符串實例:

[root@ken ~]# cat test
6 this:is:ke3
2 this:is:ke4
2 this:is:ke4
2 this:is:ke4
2 this:is:ke4
5 this:is:ke2
6 this:is:ke1
1 this:is:ke6
8 this:is:ke7
[root@ken ~]# cat test | tr -d 's'
6 thi:i:ke3
2 thi:i:ke4
2 thi:i:ke4
2 thi:i:ke4
2 thi:i:ke4
5 thi:i:ke2
6 thi:i:ke1
1 thi:i:ke6
8 thi:i:ke7
相關文章
相關標籤/搜索