大資料學習之_02_Shell學習_Shell概述+Shell解析器+Shell指令碼入門+運算子+條件判斷+流程控制(重點...
1 Shell概述
大資料程式設計師為什麼要學習Shell呢?
1)需要看懂運維人員編寫的Shell程式。
2)偶爾會編寫一些簡單Shell程式來管理叢集、提高開發效率。

2 Shell解析器
(1)Linux提供的Shell解析器有:
[root@hadoop ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh [root@hadoop ~]#
如下圖所示:

(2)bash和sh的關係
[root@hadoop ~]# cd /bin/ [root@hadoop bin]# pwd /bin [root@hadoop bin]# ll | grep bash -rwxr-xr-x. 1 root root 941880 5月11 2016 bash lrwxrwxrwx. 1 root root4 1月24 22:21 sh -> bash [root@hadoop bin]#
如下圖所示:

(3)Centos預設的解析器是bash
[root@hadoop bin]# echo $SHELL /bin/bash [root@hadoop bin]#
如下圖所示:

3 Shell指令碼入門
1、指令碼格式
指令碼以 #!/bin/bash
開頭(表示指定解析器)
2、第一個Shell指令碼:helloworld
(1)需求:建立一個Shell指令碼,輸出helloworld
(2)案例實操:
[jack@hadoop datas]$ echo "hello world" hello world [jack@hadoop datas]$ touch helloworld.sh [jack@hadoop datas]$ vim helloworld.sh [jack@hadoop datas]$ cat helloworld.sh #!/bin/bash echo "hello world" [jack@hadoop datas]$
在helloworld.sh中輸入如下內容:
#!/bin/bash echo "helloworld"
(3)指令碼的常用執行方式
第一種:採用bash或sh+指令碼的相對路徑或絕對路徑(不用賦予指令碼+x許可權)
sh+指令碼的相對路徑
[jack@hadoop datas]$ sh helloworld.sh hello world
sh+指令碼的絕對路徑
[jack@hadoop datas]$ sh /home/jack/datas/helloworld.sh hello world
bash+指令碼的相對路徑
[jack@hadoop datas]$ bash helloworld.sh hello world
bash+指令碼的絕對路徑
[jack@hadoop datas]$ bash /home/jack/datas/helloworld.sh hello world
第二種:採用輸入指令碼的相對路徑或絕對路徑執行指令碼(指令碼必須具有可執行許可權+x)
(a)首先要賦予helloworld.sh指令碼的+x許可權
[atguigu@hadoop101 datas]$ chmod 777 helloworld.sh
(b)執行指令碼
相對路徑
[jack@hadoop datas]$ ./helloworld.sh hello world
絕對路徑
[jack@hadoop datas]$ /home/jack/datas/helloworld.sh hello world
注意:
第一種執行方法,本質是bash解析器幫你執行指令碼,所以指令碼本身不需要執行許可權。第二種執行方法,本質是指令碼需要自己執行,所以需要執行許可權。
3、第二個Shell指令碼:多命令處理
(1)需求:在/home/jack/目錄下建立一個banzhang.txt,在banzhang.txt檔案中增加“I love cls”。
(2)案例實操:
[jack@hadoop datas]$ touch banzhang.txt [jack@hadoop datas]$ vim banzhang.txt [jack@hadoop datas]$ cat banzhang.txt #!/bin/bash cd /home/jack touch banzhang.txt echo "I love lxy" >> banzhang.txt [jack@hadoop datas]$
在batch.sh中輸入如下內容
#!/bin/bash cd /home/jack touch banzhang.txt echo "I love lxy" >> banzhang.txt
4 Shell中的變數
4.1 系統變數
1、常用系統變數
$HOME、$PWD、$SHELL、$USER
等
2、案例實操
(1)檢視系統變數的值
[jack@hadoop datas]$ echo $HOME /home/jack [jack@hadoop datas]$ echo $PWD /home/jack/datas [jack@hadoop datas]$ echo $SHELL /bin/bash [jack@hadoop datas]$ echo $USER jack
(2)顯示當前Shell中所有變數:set

4.2 自定義變數
1、基本語法
(1)定義變數:變數=值
(2)撤銷變數:unset 變數
(3)宣告靜態變數不賦值:readonly 變數,注意:靜態變數不能unset
(4)宣告靜態變數並賦值:readonly 變數=值,注意:靜態變數不能unset,靜態變數的值只能初始化一次
2、變數定義規則
(1)變數名稱可以由字母、數字和下劃線組成,但是不能以數字開頭,環境變數名建議全部大寫。
(2) 等號兩側不能有空格
。
(3)在bash中,變數預設型別都是字串型別,無法直接進行數值運算。
(4)變數的值如果有空格,需要使用雙引號或單引號括起來。
3、案例實操
(1)定義變數A
(2)給變數A重新賦值
(3)撤銷變數A
(4)宣告靜態的變數C=4,不能unset
(5)在bash中,變數預設型別都是字串型別,無法直接進行數值運算
(6)變數的值如果有空格,需要使用雙引號或單引號括起來

(7)可把變數提升為全域性環境變數,可供其他Shell程式使用
export 變數名

4.3 特殊變數:`$n`
1、基本語法
$n
(功能描述:n為數字, $0
代表該指令碼名稱, $1-$9
代表第一到第九個引數,十以上的引數需要用大括號包含,如 ${10}
)
2、案例實操
(1)輸出該指令碼檔名稱、輸入引數1、輸入引數2和輸入引數3的值

4.4 特殊變數:`$#`
1、基本語法
$#
(功能描述:獲取所有輸入引數的個數,常用於迴圈)
2、案例實操
(1)獲取輸入引數的個數

4.5 特殊變數:`$*、$@`
1、基本語法
$*
(功能描述:這個變數代表命令列中所有的引數, $*
把所有的引數看成一個整體)
$@
(功能描述:這個變數也代表命令列中所有的引數,不過 $@
把每個引數區分對待)
2、案例實操
(1)列印輸入的所有引數

4.6 特殊變數:`$?`
1、基本語法
$?
(功能描述:最後一次執行的命令的返回狀態。如果這個變數的值為0,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了)
2、案例實操
(1)判斷helloworld.sh指令碼是否正確執行

5 運算子
1、基本語法
(1)$((運算式))
或
$[運算式]
(2) expr + , - , \*, /, %
加,減,乘,除,取餘
注意: expr運算子間要有空格。
2、案例實操
(1)計算3+2的值
(2)計算3-2的值
(3)計算(2+3) x 4的值
(a)expr一步完成計算
(b)採用 $[運算式]
方式

6 條件判斷
1、基本語法
[ condition ]
(注意:condition前後要有空格)
注意:條件非空即為true,[ hodoop ]返回true,[] 返回false。
2、常用判斷條件

3、案例實操
(1)23是否大於等於22
(2)helloworld.sh是否具有寫許可權
(3)/home/jack/cls.txt 目錄中的檔案是否存在

(4)多條件判斷(&& 表示前一條命令執行成功時,才執行後一條命令,|| 表示上一條命令執行失敗後,才執行下一條命令)

7 流程控制(重點)
7.1 if 判斷
1、基本語法
if [ 條件判斷式 ];then 程式 fi 或者 if [ 條件判斷式 ] then 程式 fi
注意事項:
(1)[ 條件判斷式 ],中括號和條件判斷式之間必須有空格。
(2)if後要有空格。
2、案例實操
(1)輸入一個數字,如果是1,則輸出banzhang zhen shuai,如果是2,則輸出lxy zhen mei,如果是其它,什麼也不輸出。

if.sh
#!/bin/bash if [ $1 -eq "1" ] then echo "banzhang zhen shuai" elif [ $1 -eq "2" ] then echo "lxy zhen mei" fi
7.2 case 語句
1、基本語法
case $變數名 in "值1") 如果變數的值等於值1,則執行程式1 ;; "值2") 如果變數的值等於值2,則執行程式2 ;; ...省略其他分支... *) 如果變數的值都不是以上的值,則執行此程式 ;; esac
注意事項:
1) case行尾必須為單詞“in”,每一個模式匹配必須以右括號 )
結束。
2) 雙分號 ;;
表示命令序列結束,相當於java中的break。
3) 最後的 *)
表示預設模式,相當於java中的default。
2、案例實操
(1)輸入一個數字,如果是1,則輸出banzhang,如果是2,則輸出lyx,如果是其它,輸出renyao。

case.sh
#!/bin/bash case $1 in "1") echo "banzhang" ;; "2") echo "lxy" ;; *) echo "renyao" ;; esac
7.3 for 迴圈
1、基本語法1
for ((初始值;迴圈控制條件;變數變化)) do 程式 done
2、案例實操
(1)從1加到100

for1.sh
#!/bin/bash s=0 for((i=0;i<=100;i++)) do s=$[$s+$i] done echo $s
3、基本語法2
for 變數 in 值1 值2 值3 ... do 程式 done
4、案例實操
(1)列印所有的輸入引數

for2.sh
#!/bin/bash #列印數字 for i in $* do echo "banzhang love $i" done
(2)比較 $*
和 $@
區別
(a) $*
和 $@
都表示傳遞給函式或指令碼的所有引數,不被雙引號“”包含時,都以 $1 $2 ... $n
的形式輸出所有引數。

for3.sh
#!/bin/bash for i in $* do echo "banzhang love $i" done for j in $@ do echo "banzhang love $j" done
(b)當它們被雙引號“”包含時, $*
會將所有的引數作為一個整體,以 $1 $2 ... $n
的形式輸出所有引數; $@
會將各個引數分開,以 “$1” “$2”…”$n”
的形式輸出所有引數。

for4.sh
#!/bin/bash for i in "$*" #$*中的所有引數看成是一個整體,所以這個for迴圈只會迴圈一次 do echo "banzhang love $i" done for j in "$@" #$@中的每個引數都看成是獨立的,所以“$@”中有幾個引數,就會迴圈幾次 do echo "banzhang love $j" done
7.4 while 迴圈
1、基本語法
while [ 條件判斷式 ] do 程式 done
2、案例實操
(1)從1加到100

#!/bin/bash s=0 i=1 while [ $i -le 100 ] do s=$[$s+$i] i=$[$i+1] done echo $s
8 read讀取控制檯輸入
1、基本語法
read 選項 引數
選項:
-p:指定讀取值時的提示符。
-t:指定讀取值時等待的時間(秒)。
引數:
變數:指定讀取值的變數名。
2、案例實操
(1)提示7秒內,讀取控制檯輸入的名稱。

read.sh
#!/bin/bash read -t 7 -p "input your name in 7 seconds " NAME echo $NAME
9 函式
9.1 系統自帶函式
1、basename基本語法
basename [string / pathname] [suffix] (功能描述:basename命令會刪掉所有的字首包括最後一個(‘/’)字元,然後將字串顯示出來。
選項:
suffix為字尾,如果suffix被指定了,basename會將pathname或string中的suffix去掉。
2、案例實操
(1)擷取該/home/jack/banzhang.txt路徑的檔名稱

示例:
[jack@hadoop datas]$ basename /home/jack/banzhang.txt banzhang.txt [jack@hadoop datas]$ basename /home/jack/banzhang.txt .txt banzhang
3、dirname基本語法
dirname 檔案絕對路徑 (功能描述:從給定的包含絕對路徑的檔名中去除檔名(非目錄的部分),然後返回剩下的路徑(目錄的部分))
4、案例實操
(1)獲取banzhang.txt檔案的路徑

示例:
[jack@hadoop datas]$ dirname /home/jack/banzhang.txt /home/jack
9.2 自定義函式
1、基本語法
[ function ] funname[()] { Action; [return int;] } funname
2、經驗技巧
(1)必須在呼叫函式地方之前,先宣告函式,shell指令碼是逐行執行。不會像其它語言那樣先編譯。
(2)函式返回值,只能通過 $?
系統變數獲得,可以顯示加:return返回,如果不加,將以最後一條命令執行結果,作為返回值。return後跟數值n(0-255)。
3、案例實操
(1)計算兩個輸入引數的和

fun.sh
#!/bin/bash function sum() { s=0 s=$[ $1 + $2 ] echo "$s" } read -p "Please input the number1: " n1; read -p "Please input the number2: " n2; sum $n1 $n2;
10 Shell工具(重點)
10.1 cut
cut的工作就是“剪”,具體的說就是 在檔案中負責剪下資料用的
。cut 命令從檔案的每一行剪下位元組、字元和欄位並將這些位元組、字元和欄位輸出。
1、基本用法
cut [選項引數] filename
說明:預設分隔符是 製表符\t
。
2、選項引數說明

3、案例實操
(0)資料準備
[jack@hadoop datas]$ touch cut.txt [jack@hadoop datas]$ vim cut.txt [jack@hadoop datas]$ cat cut.txt dong shen guan zhen wowo lailai lele
(1)切割cut.txt第一列(提示:用空格作為分隔符)
[jack@hadoop datas]$ cut -f 1 -d " " cut.txt dong guan wo lai le
(2)切割cut.txt第二、三列
[jack@hadoop datas]$ cut -f 2,3 -d " " cut.txt shen zhen wo lai le
原理圖解:

(3)在cut.txt檔案中切割出guan
[jack@hadoop datas]$ cat cut.txt dong shen guan zhen wowo lailai lele [jack@hadoop datas]$ cat cut.txt | grep guan guan zhen [jack@hadoop datas]$ cat cut.txt | grep guan | cut -f 1 -d " " guan [jack@hadoop datas]$
圖解如下:

(4)選取系統PATH變數值,第2個“:”開始後的所有路徑
[jack@hadoop datas]$ echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jack/bin [jack@hadoop datas]$ echo $PATH | cut -d : -f 3- /bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jack/bin
圖解如下:

(5)切割ifconfig後列印的IPV4的地址
[jack@hadoop datas]$ ifconfig eth1 eth1Link encap:EthernetHWaddr 00:0C:29:F0:1C:55 inet addr:192.168.25.204Bcast:192.168.25.255Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fef0:1c55/64 Scope:Link UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1 RX packets:8845 errors:0 dropped:0 overruns:0 frame:0 TX packets:5687 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:805027 (786.1 KiB)TX bytes:826298 (806.9 KiB) [jack@hadoop datas]$ ifconfig eth1 | grep "inet addr" inet addr:192.168.25.204Bcast:192.168.25.255Mask:255.255.255.0 [jack@hadoop datas]$ ifconfig eth1 | grep "inet addr" | cut -d : -f 2 192.168.25.204Bcast [jack@hadoop datas]$ ifconfig eth1 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1 192.168.25.204
圖解如下:

容易蒙圈的地方:

10.2 sed
sed是一種 流編輯器
,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”,接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。 檔案內容並沒有改變
,除非你使用重定向儲存輸出。
1、基本用法
sed [選項引數] 'command' filename
2、選項引數說明

3、命令功能描述

4、案例實操
(0)資料準備
[jack@hadoop datas]$ touch sed.txt [jack@hadoop datas]$ vim sed.txt [jack@hadoop datas]$ cat sed.txt dong shen guan zhen wowo lailai lele
(1)將“mei nv”這個單詞插入到sed.txt第二行下,列印。
[jack@hadoop datas]$ sed "2a mei nv" sed.txt dong shen guan zhen mei nv wowo lailai lele [jack@hadoop datas]$ cat sed.txt dong shen guan zhen wowo lailai lele
注意:檔案並沒有改變。

(2)刪除sed.txt檔案所有包含wo的行
[jack@hadoop datas]$ sed "/wo/d" sed.txt dong shen guan zhen lailai lele
(3)將sed.txt檔案中wo替換為ni
[jack@hadoop datas]$ sed "s/wo/ni/g" sed.txt dong shen guan zhen nini lailai lele
注意:‘g’表示global,全部替換。
(4)將sed.txt檔案中的第二行刪除並將wo替換為ni
[jack@hadoop datas]$ sed -e "2d" -e "s/wo/ni/g" sed.txt dong shen nini lailai lele
10.3 awk
一個強大的文字分析工具,把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行分析處理。
1、基本用法
awk [選項引數] 'pattern1 {action1} pattern2 {action2} …' filename
pattern:表示AWK在資料中查詢的內容,就是匹配模式(正則匹配)。
action:在找到匹配內容時所執行的一系列命令。
2、選項引數說明

3、案例實操
(0)資料準備
[jack@hadoop datas]$ pwd /home/jack/datas [jack@hadoop datas]$ sudo cp /etc/passwd ./ [sudo] password for jack: [jack@hadoop datas]$
出現問題:

使用者名稱 不在 sudoers檔案中。此事將被報告。
sudo命令可以讓你以root身份執行命令,來完成一些我們這個帳號完成不了的任務。
其實並非所有使用者都能夠執行sudo,因為有許可權的使用者都在/etc/sudoers中呢。
我們可以通過編輯器來開啟 vim /etc/sudoers
,sudoers的許可權是0440,即只有root才能讀。在你用root或sudo編輯後強行儲存並退出(wq!)即可。
開啟sudoers後,像如下那樣加上自己的帳號儲存後就可以了。

(1)搜尋passwd檔案以root關鍵字開頭的所有行,並輸出該行的第7列。
[jack@hadoop datas]$ awk -F : '/^root/ {print $7}' passwd /bin/bash
(2)搜尋passwd檔案以root關鍵字開頭的所有行,並輸出該行的第1列和第7列,中間以“,”號分割。
[jack@hadoop datas]$ awk -F : '/^root/ {print $1","$7}' passwd root,/bin/bash
注意:只有匹配了pattern的行才會執行action。
(3)只顯示/etc/passwd的第一列和第七列,以逗號分割,且在所有行前面新增列名user,shell,在最後一行新增"lxy,/bin/zuimei"。
[jack@hadoop datas]$ awk -F : 'BEGIN {print "user,shell"} {print $1","$7} END {print "lxy,/bin/zuimei"}' passwd user,shell root,/bin/bash bin,/sbin/nologin ...... xh,/bin/bash xq,/bin/bash lxy,/bin/zuimei
注意:BEGIN 在所有資料讀取行之前執行;END 在所有資料執行之後執行。
(4)將passwd檔案中的使用者id增加數值1並輸出
[jack@hadoop datas]$ awk -F : -v i=1 '{print $3+i}' passwd 1 2 3 ...... 503 504 505 [jack@hadoop datas]$
4、awk的內建變數

5、案例實操
(1)統計passwd檔名,每行的行號,每行的列數
[jack@hadoop datas]$ awk -F : '{print "filename:" FILENAME ", linenumber:" NR ", columns:" NF}' passwd filename:passwd, linenumber:1, columns:7 filename:passwd, linenumber:2, columns:7 filename:passwd, linenumber:3, columns:7 ...... filename:passwd, linenumber:33, columns:7 filename:passwd, linenumber:34, columns:7 filename:passwd, linenumber:35, columns:7
(2)切割IP
[jack@hadoop datas]$ ifconfig eth1 | grep "inet addr" inet addr:192.168.25.204Bcast:192.168.25.255Mask:255.255.255.0 [jack@hadoop datas]$ ifconfig eth1 | grep "inet addr" | awk -F : '{print $2}' 192.168.25.204Bcast [jack@hadoop datas]$ ifconfig eth1 | grep "inet addr" | awk -F : '{print $2}' | awk -F " " '{print $1}' 192.168.25.204
(3)查詢sed.txt中空行所在的行號
[jack@hadoop datas]$ cat sed.txt dong shen guan zhen wowo lailai lele [jack@hadoop datas]$ awk '/^$/ {print NR}' sed.txt 5
10.4 sort
sort命令是在Linux裡非常有用,它將檔案進行排序,並將排序結果標準輸出。
1、基本語法
sort 選項 引數

引數:指定待排序的檔案列表。
2、案例實操
(0)資料準備
[jack@hadoop datas]$ touch sort.sh [jack@hadoop datas]$ vim sort.sh [jack@hadoop datas]$ cat sort.sh bb:40:5.4 bd:20:4.2 xz:50:2.3 cls:10:3.5 ss:30:1.6
(1)按照“:”分割後的第二列倒序排序。
[jack@hadoop datas]$ cat sort.sh bb:40:5.4 bd:20:4.2 xz:50:2.3 cls:10:3.5 ss:30:1.6 [jack@hadoop datas]$ sort -t : -nrk 2 sort.sh xz:50:2.3 bb:40:5.4 ss:30:1.6 bd:20:4.2 cls:10:3.5 [jack@hadoop datas]$
11 企業真實面試題(重點)
11.1 京東
問題1:使用Linux命令查詢檔案file1中空行所在的行號。
[jack@hadoop datas]$ awk '/^$/ {print NR}' file1 5
資料清洗(ETL):幹掉 空行、null、404、500。
問題2:有檔案chengji.txt內容如下:
張三 40
李四 50
王五 60
使用Linux命令計算第二列的和並輸出。
[jack@hadoop datas]$ cat chengji.txt | awk -F " " '{sum+=$2} END {print sum}'
11.2 搜狐&和訊網
問題1:Shell腳本里如何檢查一個檔案是否存在?如果不存在該如何處理?
if [ -e file.txt ] then echo "檔案存在!" else echo "檔案不存在!" fi
11.3 新浪
問題1:用shell寫一個指令碼,對文字中無序的一列數字排序。
[root@CentOS6-2 ~]# cat test.txt 9 8 7 6 5 4 3 2 10 1 [root@CentOS6-2 ~]# sort -n test.txt | awk '{a+=$0;print $0} END {print "SUM=" a}' 1 2 3 4 5 6 7 8 9 10 SUM=55
11.4金和網路
問題1:請用shell指令碼寫出查詢當前資料夾(/home/)下所有的文字檔案內容中包含有字元”shen”的檔名稱。
[jack@hadoop datas]$ grep -r "shen" /home/ /home/jack/datas/sed.txt:dong shen /home/jack/datas/cut.txt:dong shen [jack@hadoop datas]$ grep -r "shen" /home/ | cut -d ":" -f 1 /home/jack/datas/sed.txt /home/jack/datas/cut.txt
注意:grep -R/-r /home/ 以遞迴方式讀取/home/目錄下的所有檔案
11.5 資料庫備份shell指令碼的編寫示例

shell指令碼檔案內容:
#!/bin/bash #備份路徑 BACKUP=/data/backup/sql/dy #當前時間 DATETIME=$(date +%Y-%m-%d_%H:%M:%S) echo "===備份開始===" echo "備份檔案存放於${BACKUP}/$DATETIME.tar.gz" #資料庫地址 HOST=localhost #資料庫使用者名稱 DB_USER=root #資料庫密碼 DB_PW=Ces123456 #建立備份目錄 [ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME" #後臺系統資料庫 DATABASE=dy_backgroundms mysqldump -u${DB_USER} -p${DB_PW} --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql.gz #投入品監管資料庫 DATABASE=dy_firip mysqldump -u${DB_USER} -p${DB_PW} --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql.gz #壓縮成tar.gz包 cd $BACKUP tar -zcvf $DATETIME.tar.gz $DATETIME #刪除備份目錄 rm -rf ${BACKUP}/$DATETIME #刪除30天前備份的資料 find $BACKUP -mtime +30 -name "*.tar.gz" -exec rm -rf {} \; echo "===備份成功===" 注:find:linux的查詢命令,使用者查詢指定條件的檔案。 -mtime:標準語句寫法。 +10:查詢10天前的檔案,這裡用數字代表天數,+30表示查詢30天前的檔案。 "*.*":希望查詢的資料型別,"*.jpg"表示查詢副檔名為jpg的所有檔案,"*"表示查詢所有檔案,這個可以靈活運用,舉一反三。 -exec:固定寫法。 rm -rf:強制刪除檔案,包括目錄。 {} \; :固定寫法,一對大括號+空格+\;
12 資料附錄
-
尚矽谷大資料之Shell視訊
連結:連結: https://pan.baidu.com/s/1DecEi7Dq5R9Mghl6F_Csvw
密碼:ucrr
視訊質量:優良
視訊總個數:26個
視訊總時長:2:45:51
建議學習時長:1天