應屆生應該掌握的Shell基礎命令

find:查找命令

由於Linux系統大部分都是應用於服務器上,所以查詢數據的時候並沒有圖形化界面查找數據的便捷性。

語法:

find [path] [選項] 參數

選項:

-name
按文件名查詢

-perm
按文件權限查詢

-size
按文件的大小查找

-user
按用戶(屬主)查詢

-group
按用戶組查詢

-type
按文件的類型查詢

b - 塊設備文件。

d - 目錄。

c - 字符設備文件。

p - 管道文件。

l - 符號鏈接文件。 (這是個小寫的L)

f - 普通文件。

案例:

查找jdk安裝的目錄。

bash

find / -name java

查找當前系統中所有的.log後綴名的文件

bash

find / -name “*.log”

查找系統中/home目錄下的非普通文件

bash

find /home ! -type f

查找當前用戶/home目錄下權限爲700的文件

#bash

find /home -perm 700

查找/dev目錄下的塊設備文件

#bash

find /dev -type b

sed:

介紹:

sed本身是一個逐行處理工具,會逐行處理到文件的結束。默認情況下不修改源文件,因爲sed是將源文件內容逐行copy到一個臨時緩衝區(模式空間),對其進行編輯,行處理結束後,將其輸出到屏幕上,也可以通過數據重定向將結果導入到新的文件中去。

sed本身提供修改源文件的選項。但是如果修改源文件時,結果內容並不會發送到屏幕上。

語法:

sed [option] “[action]” [filename]

選項:

-e
允許對輸入數據應用多條sed命令進行編輯。

-i
表示直接操作源文件

動作:

s:
字符串匹配/查找

i:
插入

a:
追加

d:
刪除

c:
替換

項目 A 注意:選項和動作的字母i不是同樣的功能。

案例:

源文件內容(demo):

hello teduhadoop

hello hadoop

hello hdfs ,hi sed

1、將全文的h替換爲H。

bash

sed “s/h/H/g” demo

2、修改全文的h/H,第一個l/L

bash

sed -e “s/h/H/g” -e “s/l/L/1” demo

or

多條指令的另外一種寫法:

sed “s/h/H/g;s/l/L/1” demo

3、修改全文的第一個和第二個h/H

bash

sed “s/h/H/1;s/h/H/1” demo

4、部分文件中,由於不知道是第幾行,且文件中存在多個相同的字符串時,如何修改。

eth0文件內容:

DEVICE=eth0

HWADDR=00:0c:29:37:f6:95

TYPE=Ethernet

UUID=5c4fcaf0-7f4f-4ab1-8dee-a96aecb23823

ONBOOT=no

NM_CONTROLLED=yes

BOOTPROTO=dhcp

DNS2=8.8.8.8

DNS1=114.114.114.114

IPV6INIT=no

USERCTL=no

PEERDNS=yes

將文件中的ONBOOT=no修改爲ONBOOT=yes

bash

sed -i “s/ONBOOT=no/ONBOOT=yes/g” eth0

5、在文件中進行插入新的內容:

源文件內容:

hello teduhadoop

hello hadoop

hello hdfs ,hi sed

5.1、在第一行插入內容"hello bigdata"

bash

sed “1 i hello bigdata” demo

5.2、在第一行追加內容"hello 小強"

bash

sed “1 a hello 小強” demo

6、刪除匹配的行

bash

sed “/hdfs/d” demo

表示將匹配的到hdfs的整行刪除,如果匹配的內容是h的話,當前文件的內容會被全部刪除。

grep:

這是一款強大文本搜索工具選項:

-number
同時顯示匹配行上下的n行

-b,–byte-offset
印匹配行前面打印該行所在的塊號碼。

-c,–count
只打印匹配的行數,不顯示匹配的內容。

-i,–ignore-case
忽略大小寫差別。

-q,–quiet
取消顯示,只返回退出狀態。0則表示找到了匹配的行。

–color
將匹配內容上色區分

-n,–line-number
在匹配的行前面打印行號。

-v,–revert-match
反檢索,只顯示不匹配的行。

#bash

cd /root

ls |grep -2 log #匹配上下兩行

ls |grep -n log #匹配行號

ls | grep log --color

tail:

文本監控,通常情況下用於監視文件的增長。

場景:

大數據環境中,很多軟件在啓動時,不會將真正的啓動/過程日誌打印在屏幕上,因爲內容繁多,會影響程序員觀察啓動過程中,哪個進程沒有啓動。像此種場景,我們就可以利用tail工具用來監視該軟件啓動日誌文件的實際內容。

語法:

tail [選項] fileName

選項:

-f
用於監控文件的增長!!!

-n
從指定的行中進行監控文件的內容

cut:

cut命令在文件中負責剪切數據用的

選項:

-b
字節

-c
字符

-f
提取第幾列

-d
按指定分隔符分割列

案例:

源文件內容:

192.168.1.1

192.168.1.3

192.168.1.5

192.168.1.4

截取第11個字節:

bash

cut -b 11 demo

截取第7-9的字節

bash

cut -b 7-9 demo

截取最後一個字節進行排序:

bash

cut -b 11 demo | sort

以點爲分隔符 獲取第二個字段

bash

cut -d . -f 2 demo

歷史命令:

history

該命令可以用來查看Linux系統中曾經執行過的命令(默認1000條)。

用法:

!!
運行上一條命令

!88
運行第88條命令

!88 /test
運行第88條命令並在命令後面加上/test (可以用ls舉例)

!ls
運行上一個ls命令

!ls:s/CF/l
運行上一個ls命令,其中把CF替換成l

if判斷

條件判斷語句:

語法:

if語法

#!/bin/bash

a=10

b=10

if [ $a -eq $b ];then

echo “兩個數相等”

fi

if else語法

#!/bin/bash

string=“hello”

string1=“HELLO”

if test $string = $string1

then

echo “兩個字符串一樣”

else

echo “兩個字符串不一樣”

fi

if else-if else語法

以下實例判斷兩個變量是否相等:

a=10
b=20
if [ $a == $b ]
then
echo “a 等於 b”
elif [ $a -gt $b ]
then
echo “a 大於 b”
elif [ $a -lt $b ]
then
echo “a 小於 b”
else
echo “沒有符合的條件”
fi

test判斷

test判斷:

Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。

數值測試

參數
說明

-eq
等於則爲真

-ne
不等於則爲真

-gt
大於則爲真

-ge
大於等於則爲真

-lt
小於則爲真

-le
小於等於則爲真

實例演示:

#!/bin/bash

num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo ‘兩個數相等!’
else
echo ‘兩個數不相等!’
fi

字符串測試

參數
說明

=
等於則爲真

!=
不相等則爲真

-z 字符串
字符串的長度爲零則爲真

-n 字符串
字符串的長度不爲零則爲真

實例演示:

#!/bin/bash

num1=“piaolaoshi”
num2=“PIAOLAOSHI”
if test $num1 = $num2
then
echo ‘兩個字符串相等!’
else
echo ‘兩個字符串不相等!’
fi

文件測試

參數
說明

-e 文件名
如果文件存在則爲真

-r 文件名
如果文件存在且可讀則爲真

-w 文件名
如果文件存在且可寫則爲真

-x 文件名
如果文件存在且可執行則爲真

-s 文件名
如果文件存在且至少有一個字符則爲真

-d 文件名
如果文件存在且爲目錄則爲真

-f 文件名
如果文件存在且爲普通文件則爲真

-c 文件名
如果文件存在且爲字符型特殊文件則爲真

-b 文件名
如果文件存在且爲塊特殊文件則爲真

實例演示:

#!/bin/bash

cd /bin
if test -e ./bash
then
echo ‘文件已存在!’
else
echo ‘文件不存在!’
fi

另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用於將測試條件連接起來,其優先級爲:"!“最高,”-a"次之,"-o"最低。例如:

#!/bin/bash

cd /bin
if test -e ./notFile -o -e ./bash
then
echo ‘至少有一個文件存在!’
else
echo ‘兩個文件都不存在’
fi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章