shell:簡單、易用、高效,是一個內置的腳本,不需下載
什么是腳本:一條一條命令的堆積
shell 是一個程序,一般都是放在/bin或者/user/bin目錄下,當前 Linux 系統可用的 Shell 都記錄在/etc/shells文件中。/etc/shells是一個純文本文件,你可以在圖形界面下打開它,也可以使用 cat 命令查看它。
在現代的 Linux 上,sh 已經被 bash 代替,/bin/sh往往是指向/bin/bash的符號鏈接。 所謂的符號鏈接就是軟連接。
如果你希望查看當前 Linux 的默認 Shell,那么可以輸出 SHELL 環境變量。
書寫shell腳本
vim 自定義(做到見名知意).sh #!/bin/bash 指定解釋器類型,如何查看解釋器類型,echo $SHELL 命令 命令
執行shell腳本的三種方法
第一種:正規方式:添加可執行權,我們可以先查看我們編寫的shell腳本,它是沒有執行權的,那么我們要賦予它執行權
chmod +x 腳本
然后執行shell腳本
./ 腳本
如果不加./直接輸入腳本可不可以執行呢,是不可以的,因為root的路徑沒有寫入$PATH這個里面。
只要執行
vim /etc/profile.d/自定義名字.sh
export PATH=/root:$PATH
而后同步
source /etc/profile.d/自定義.sh
再去直接執行腳本的名字即可成功
第二種
直接用bash解釋器去執行shell腳本。當前終端會新生成一個子 bash 去執行腳本。
第三種
source 腳本
source filename 與 bash filename 及./filename執行腳本的區別
當shell腳本具有可執行權限時,用bash filename與./filename執行腳本是沒有區別得。
./filename
是因為當前目錄沒有在PATH中,所以”.”是用來表示當前目錄的。
source filename
這個命令其實只是簡單地讀取腳本里面的語句依次在當前shell里面執行,沒有建立新的子shell。那么腳本里面所有新建、改變變量的語句都會保存在當前shell里面。
bash filename
重新建立一個子shell,在子shell中執行腳本里面的語句,該子shell繼承父shell的環境變量,但子shell新建的、改變的變量不會被帶回父shell。
什么是子shell:
利用pstree查看。
第一個bash就是父,第二個就是子,第三個也是子,第二對於第三個而言,是第三個的父。
shell編程常用命令
grep:過濾 結合 wc -c -w -l
表示不區分大小寫,將你填加的選項的大小寫都篩選出來
-i
比如
echo “this is Is Sm”| grep –i "i"
它將i的大寫小寫都用紅顏色標注了出來
你n后頭跟什么篩選的字符,那么含有此字符的所在行會被曬選出來,並顯示行號。
-n
比如:我想查看/etc/passwd 這個文件含有數字7的是哪幾行
cat /etc/passwd | grep -n 7
只打印匹配的內容
-o
比如:我想查看/etc/passwd 這個文件含有的數字7。
cat /etc/passwd | grep –o 7
只打印每個文件匹配的行數
-c
比如:我想查看/etc/passwd 這個文件含有的數字7的有幾行。
cat /etc/passwd | grep –c 7
打印匹配的前幾行
-B(before)
打印匹配的后幾行
-A(after)
打印匹配的前后幾行
-C
打印不匹配的行
-v
打印空白行
^$ 空格
cut:cut 命令從文件的每一行剪切字節、字符和字段並將這些字節、字符和字段寫至標准輸出。
如果不指定 File 參數,cut 命令將讀取標准輸入。必須指定 -b、-c 或 -f 標志之一。
定點分割截取
-c
比如說
echo "this is ken"| cut -c 4
那么顯示的結果是s,意思是你使用-c后,后面數字跟幾,它就把這段話中的第幾個字符給你截取輸出到屏幕上來。也可以指定幾到幾,比如第一個到第四個。那就是this。
兩個結合使用,d為選參照物(選定的參照物),f為定點(以參照物開始的第幾列),兩者結合截取輸出
-d -f
比如
echo "root/ok/pl/cd/ed"| cut -d "/" -f2
意思是說,參照物選擇的是/,2是以第一個/開始的第二列
$RANDOM是生成隨機數
結合md5sum加密
$RANDOM | md5sum | cut 1-6
sort:排序
可直接用來排序,它是從小到大排序。按照數字的第一個的大小排序。
sort
根據數值大小進行排序
-n
從數值的最大到最小排序
-r
uniq:去除重復的行(相鄰且相同,認定為重復)
在行首用數字表示該行出現了多少次
-c
僅僅顯示那些沒有出現重復過的行
-u
tr:轉換或轉出文件中的字符
指定字符,並刪除
-d