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


什么是腳本?

腳本簡單地說是一條條的文字命令(一些指令的堆積),這些文字命令是可以看到的,可以通過記事本打開和編輯

為什么要學習和使用shell

shell屬於內置腳本

程序開發的效率非常高,依賴於功能強大的命令可以迅速的完成開發任務(批處理)

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

 

shell簡介

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

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

shell分類

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM