久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

shell編程

 小仙女本仙人 2022-05-29 發(fā)布于北京

一,,介紹

什么是解釋性語言,?什么是編譯型語言,?
程序不需要編譯,,程序在運(yùn)行時(shí)由解釋器翻譯成機(jī)器語言,。每執(zhí)行一次都要翻譯一次因此效率比較低,。
程序在執(zhí)行前需要一個(gè)專門的編譯過程,把程序編譯成為假期語言文件,,運(yùn)行時(shí)不需要重新翻譯,,直接使用編譯的結(jié)果。

二,,腳本的作用

腳本的格式
#!/bin/bash
腳本的作用
1.自動(dòng)化軟件部署 2.自動(dòng)化分析處理 3.自動(dòng)化備份 4.自動(dòng)化監(jiān)控腳本

三,,she怎末用

腳本運(yùn)行方式
sh/bash 絕對(duì)路徑|相對(duì)路徑
chmod+x 腳本名稱  ./腳本名稱
在任意地方執(zhí)行腳本 將腳本移動(dòng)至bin目錄  腳本名稱

四,shell變量

定義用戶變量
變量名=值
變量名=`執(zhí)行命令`
變量名=$(執(zhí)行命)
讀取變量
echo ${A:2:3} 2下標(biāo) 3往后截取的長度
echo ${A}
echo $A
作用域 只在當(dāng)前會(huì)話的當(dāng)前用戶下有效
全局環(huán)境變量
export 變量名=值
作用域  針對(duì)于當(dāng)前會(huì)話的所有用戶有效
系統(tǒng)環(huán)境變量
需要在 vim /etc/profile 定義變量 export 變量名=值
變量生效 source /etc/profile
特殊變量
$n 語法:$n (功能描述:n為數(shù)字,,$0代表該腳本名稱,,$1-$9代表第一到第九個(gè)參數(shù),十以上的參數(shù),,十以上的參數(shù)需要用大括號(hào)包含,,如${10})
$# 獲取所有參數(shù)的個(gè)數(shù)
$* 獲取所有參數(shù) 加“”會(huì)把參數(shù)看作一個(gè)整體
$@ 獲取所有參數(shù)  加“”也是 把每個(gè)參數(shù)分區(qū)對(duì)待
$? 返回上一次執(zhí)行命令的將結(jié)果 正確返回0 錯(cuò)誤返回一
 
$*和$@都表示傳遞給函數(shù)或腳本的所有參數(shù),,不被雙引號(hào)“”包含時(shí),都以$1 $2 …$n的形式輸出所有參數(shù),;當(dāng)它們被雙引號(hào)“”包含時(shí),,“$*”會(huì)將所有的參數(shù)作為一個(gè)整體,以“$1 $2 …$n”的形式輸出所有參數(shù),;“$@”會(huì)將各個(gè)參數(shù)分開,,以“$1” “$2”…”$n”的形式輸出所有參數(shù)。
案例:
for i in "$@"
do
  echo $i
done
for i in "$*"
do
  echo $i
done

 

 

五,,shell數(shù)組

Shell 數(shù)組用括號(hào)來表示,,元素用"空格"符號(hào)分割開,如果元素中包含空格,,則該元素使用雙引號(hào)引起來,,例如"hello word"

語法:arr=(1 2 3 4 5 6 7 8)
賦值:可以創(chuàng)建時(shí)添加如上
          通過下標(biāo)添加 arr[n]=_?_
讀取:
echo ${arr[*]}  echo ${arr[@]} 獲取數(shù)組中所有元素
echo ${arr[2]} 通過下表獲取元素
echo ${#arr[*]}  echo ${#arr[@]} 獲取數(shù)組的長度
unset arr[2] 通過下表刪除數(shù)組的元素 并刪除這這個(gè)下標(biāo)

六,,shell運(yùn)算符

整數(shù)運(yùn)算符 
$((運(yùn)算式)) $[運(yùn)算是] “+,,-,*,,/,,%” 運(yùn)算符間可以不要空格
echo $[(2*2)+4]
expr +,-,\*,/,%, 運(yùn)算是之間要有空格
 expr `expr 2 \* 2` \* 4
小數(shù)運(yùn)算
bc:Linux下的一個(gè)計(jì)算器程序,,可以處理整數(shù)和小數(shù),。Shell 本身只支持整數(shù)運(yùn)算,想計(jì)
算小數(shù)就得使用 bc這個(gè)外部的計(jì)算器
語法:echo "scale=小數(shù)位數(shù)" ; 運(yùn)算式" | bc
案例:
計(jì)算3*8/7 結(jié)果保留4位小數(shù): echo "scale=4; 3*8/7" | bc
計(jì)算4/9,,保留2位,,結(jié)果賦值給ret變量   ret=$(echo "scale=2;4/9"|bc) echo $ret

七,shell條件判斷

語法  []條件非空即true
[ condition ] (注意:condition前后要有空格)
(1)兩個(gè)整數(shù)之間比較
   == 字符串比較
   -lt 小于(less than)   
   -le 小于等于(less equal)
   -eq 等于(equal)    
   -gt 大于(greater than)
   -ge 大于等于(greater equal) 
   -ne 不等于(Not equal)
(2)按照文件權(quán)限進(jìn)行判斷
   -r 有讀的權(quán)限(read)   
   -w 有寫的權(quán)限(write)
   -x 有執(zhí)行的權(quán)限(execute)
(3)按照文件類型進(jìn)行判斷
  -f 文件存在并且是一個(gè)常規(guī)的文件(file)
  -e 文件存在(existence)  
  -d 文件存在并是一個(gè)目錄(directory)
案例:
判斷文件是否具有寫權(quán)限
[jinghang@hadoop101 datas]$ [ -w helloworld.sh ]
[jinghang@hadoop101 datas]$ echo $?  代表上一條命令執(zhí)行結(jié)果 正確返回0 錯(cuò)誤返回1
0
判斷目錄中的文件是否存在
[jinghang@hadoop101 datas]$ [ -e /home/jinghang/cls.txt ]
[jinghang@hadoop101 datas]$ echo $?
1
多條件判斷(&& 表示前一條命令執(zhí)行成功時(shí),,才執(zhí)行后一條命令,,
|| 表示上一條命令執(zhí)行失敗后,才執(zhí)行下一條命令)
[jinghang@hadoop101 ~]$ [ condition ] && echo OK || echo NOTOK
OK
[jinghang@hadoop101 ~]$ [ condition ] && [ ] || echo NOTOK
NOTOK

八,,shell流程控制

(一),,if 判斷語句

語法1: if [ 條件判斷式 ]
     then
     主體代碼
     fi
語法2: if [ 條件判斷式 ]
     then
     主體代碼
     else                       
     主體代碼
     fi
語法3: if [ 條件判斷式 ]
     then
     主體代碼
     elif [條件判斷式]
     then
     主體代碼
     else
     主體代碼
     fi
注意事項(xiàng):(1)[ 條件判斷式 ],中括號(hào)和條件判斷式之間必須要有空格
                (2)if后要有空格
案例:
編寫一個(gè)腳本,傳入文件或者目錄名稱
(1)判斷文件或者目錄是否存在,,存在則完成(2)(3)步驟,,不存在則輸出文件或目錄不存在
(2)如果是文件輸出路徑并打印"該路徑為文件路徑",并往文件中寫入 "你真好看"
(3)如果是目錄,輸出路徑并打印"該路徑為目錄路徑",,并在該路徑下創(chuàng)建bbb.txt文件

 

 

(二),,case 判斷語句

語法
case $變量名 in
  "值1")
    如果變量的值等于值1,則執(zhí)行程序1
    ;;
  "值2")
    如果變量的值等于值2,,則執(zhí)行程序2
    ;;
  …省略其他分支…
  *)
    如果變量的值都不是以上的值,,則執(zhí)行此程序
    ;;
esac
注意事項(xiàng):
(1)case行尾必須為單詞“in”,,每一個(gè)模式匹配必須以右括號(hào)“)”結(jié)束。
(2)雙分號(hào)“;;”表示命令序列結(jié)束,,相當(dāng)于java中的break,。
(3)最后的“*)”表示默認(rèn)模式,相當(dāng)于java中的default,。

(三),,for 循環(huán)語句

語法1:
for (( i=0;i<100;i++ ))
do
 程序
done
語法2:
    $*:讀取傳入腳本中的全部參數(shù),把參數(shù)看作一個(gè)整體
    $@:讀取傳入腳本中的全部參數(shù),把參數(shù)區(qū)分對(duì)待
 for  變量  in "$*"
 do
   程序
 done
 for  變量  in "$@"
 do
   程序
 done
案例:
從1加到100
#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
        sum=$[ sum+i ]
done
echo $sum
[jinghang@hadoop101 datas]$ chmod 777 for1.sh
[jinghang@hadoop101 datas]$ ./for1.sh
“5050”

(四),while 循環(huán)語句

語法
while [ 條件判斷式 ] 注意 :while 和條件判斷式 與[之間都要有空格
  do
    程序
  done
5.until 循環(huán)語句
until 循環(huán)執(zhí)行一系列命令直至條件為 true 時(shí)停止
until [ 條件判斷式 ]
do
    主題代碼
done
案例:
#!/bin/bash
i=0
sum=0
until [ $i -eq 101 ]
do
    sum=$[sum+i]
    i=$[i+1]
done
echo $sum
echo $i

九,read讀取控制臺(tái)輸入

語法
read [選項(xiàng)] [參數(shù)]
選項(xiàng)  功能
-p    指定讀取值時(shí)的提示符
-t    指定讀取值時(shí)等待的時(shí)間(秒)
參數(shù):指定讀取的值的變量名
案例:
1.使用read命令讀取命令行輸入?yún)?shù),,提示“Enter your name in 7 seconds”,
把用戶輸入?yún)?shù)賦值給NAME變量

 

 

十,shell函數(shù)

(一),,系統(tǒng)函數(shù)

basename
 basename命令會(huì)刪掉所有的前綴包括最后一個(gè)('/’)字符,,然后將字符串顯示出來
 basename [string / pathname] [suffix]
  可選項(xiàng):suffix為后綴,如果suffix被指定了,,basename會(huì)將pathname或string中的suffix去掉,。
 案例:

 

 


dirname
 從給定的包含絕對(duì)路徑的文件名中去除文件名(非目錄的部分),然后返回剩下的路徑(目錄的部分)
 dirname 文件絕對(duì)路徑 
 案例

 

 

(二),,自定義函數(shù)

 語法:
  [ function ] funname()
        {
         Action;
         [return int;]
        }
        funname
 經(jīng)驗(yàn)技巧
 (1)必須在調(diào)用函數(shù)地方之前,,先聲明函數(shù),shell腳本逐行運(yùn)行,。不會(huì)先編譯,。
 (2)函數(shù)返回值,只能通過$?系統(tǒng)變量獲得,,可以顯示加:return返回,,如果不加,將以最后一條命令運(yùn)行結(jié)果,,作為返回值,。return后跟數(shù)值n(0-255)
 案例
  輸入兩個(gè)參數(shù),計(jì)算兩個(gè)參數(shù)的和

 

 

補(bǔ)充:
用戶函數(shù)定義在當(dāng)前用戶主目錄下的.bashrc文件里在當(dāng)前用戶下所有的會(huì)話都有效
調(diào)用前要source一下
系統(tǒng)函數(shù)定義在/etc/profile文件下 對(duì)所有用戶所有會(huì)話都有效
也要source一下

十一,,shell文本處理

(一),,cut

功能描述:cut的工作就是“剪”,具體的說就是在文件中負(fù)責(zé)剪切數(shù)據(jù)用的,,cut指令用
戶顯示行中的指定部分,,刪除文件中的指定字段。
cut [選項(xiàng)] [文件]
選項(xiàng)   功能
-b    -b <起始字節(jié)位置-結(jié)束字節(jié)位置>僅顯示行中指定字節(jié)范圍的內(nèi)容,。例如,,“-b
       2-10”將顯示第2~10個(gè)字節(jié)位置的內(nèi)容,當(dāng)只有一個(gè)數(shù)字時(shí),則僅顯示指定字符
    位置的內(nèi)容.
-f     <起始列位置-結(jié)束列位置>   顯示指定的字段內(nèi)容
-d     <分隔符>  指定字段的分隔符,,默認(rèn)的字段分隔符為“TAB”
-c     <起始字符位置-結(jié)束字符位置>   僅顯示行中指定范圍的字符,。例如,,
        “-c2-10” 將顯示第2~10個(gè)字符位置的內(nèi)容。當(dāng)只有一個(gè)數(shù)字時(shí),,則僅顯示指定
  字符位置的內(nèi)容
案例:
(1)切割cut.txt第一列
 cut -d " " -f 1 cut.txt
(2)切割cut.txt第二,、三列
 cut -d " " -f 2,3 cut.txt
(3)切割ifconfig 后打印的IP地址

 

 

(二),sort

功能描述:它將文件進(jìn)行排序,,并將排序結(jié)果標(biāo)準(zhǔn)輸出
語法:sort 【選項(xiàng)】【參數(shù)】
            選項(xiàng)    功能
          -n     依照數(shù)值的大小排序
         -r     以相反的順序來排序
         -t     設(shè)置排序時(shí)所用的分隔字符
         -k     指定需要排序的列
         參數(shù):是指待排序的文件
案例:如有以下數(shù)據(jù)

 

 


按照整數(shù)排序:

 

 


按照小數(shù)排序

 

 

(三),正則表達(dá)式

 正則表達(dá)式,,又稱規(guī)則表達(dá)式。(英語:Regular Expression,,在代碼中常簡寫為
 regex,、regexp或RE)。正則表達(dá)式通常被用來檢索,、替換那些符合某個(gè)模式(規(guī)則)
 的文本單字符匹配
     \d  匹配一個(gè)數(shù)字字符,。等價(jià)于[0-9]
  \D   匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]
  \w   匹配包括下劃線的任何單詞字符,。類似但不等價(jià)于[A-Za-z0-9_]
  \W  匹配任何非單詞字符,。等價(jià)于 [^A-Za-z0-9_]
  \s   匹配空白字符,包括空格,、制表符,、換頁符等等,等價(jià)于[ \f\n\r\t\v]
  \S   匹配任何可見字符,。等價(jià)于[^ \f\n\r\t\v]
  .點(diǎn)  匹配除“\n”和"\r"之外的任何單個(gè)字符
  [a-z]  字符范圍,,匹配a~z之間的任意字符
  [^a-z] 匹配除了a~z之間的其他字符
  \n  匹配換行符
 多字符匹配
  +   匹配前面的子表達(dá)式一次或多次(大于等于1次)
  *   匹配前面的子表達(dá)式任意次
  ?  匹配前面的子表達(dá)式零次或一次
  {n}  n是一個(gè)非負(fù)整數(shù)。匹配確定的n次
  {n,m}  m和n均為非負(fù)整數(shù),,其中n<=m,。最少匹配n次且最多匹配m次
 其他
  ^  匹配輸入字行首
  $  匹配輸入行尾
  | 將兩個(gè)匹配條件進(jìn)行邏輯“或”(or)運(yùn)算
  x|y  匹配x或y

(四),sed

 功能描述:sed是一種單行文本流式編輯器,,它一次處理一行內(nèi)容,。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中,,稱為“模式空間”,,接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,,把緩沖區(qū)的內(nèi)容送往屏幕,。接著處理下一行,這樣不斷重復(fù),,直到文件結(jié)束,。文件內(nèi)容并沒有改變,除非你使用重定向存儲(chǔ)輸出,。
 語法:sed [選項(xiàng)]  ’命令'   文件名
  選項(xiàng)    功能
  -e     直接在指令列模式上進(jìn)行sed的動(dòng)作編輯(一次執(zhí)行多個(gè)操作時(shí)),。
  -i     直接編輯文件
  -n                   取消默認(rèn)輸出sed默認(rèn)會(huì)輸出所有文本內(nèi)容,,使用-n
                          參數(shù)后只顯示處理過的行 
  
  命令    功能
  p     打印一般 -n 配合使用
  a      新增,在指定的行之后插入內(nèi)容
  i       新增,,在指定的行之前插入內(nèi)容
  d     刪除
  s     查找并替換 (注意:如果進(jìn)行全局的查找替換 sed -i 's/查找條件/替換字符串/g’   global)
 案例:
  數(shù)據(jù)準(zhǔn)備

 

 


  (1)將“mei nv”這個(gè)單詞插入到sed.txt第二行下,,打印。

 

 


  (2)刪除sed.txt文件所有包含wo的行
  

 

 


  (3)將sed.txt文件中wo替換為ni

 

 


    注意:'g’表示global,,全部替換
  (4)將sed.txt將wo替換為ni只打印處理后的行
 

 

 


  (5)批量添加注釋

 

 


  (6)批量取消注釋
  

 

 

(五),,awk

 功能描述:是一門編程語言,也是一個(gè)強(qiáng)大的文本分析工具,,逐行掃描文件,,
 默認(rèn)從第一行到最后一行,尋找匹配特定模式的行,,并在這些行上進(jìn)行你想要
 的操作,。
 
 語法:awk 選項(xiàng)  'pattern1{action1}  pattern2{action2}...’   文件名
  pattern:表示AWK在數(shù)據(jù)中查找的內(nèi)容,就是匹配模式
        action:在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令
  選項(xiàng)   功能
  -F    指定輸入文件的分隔符
  -v    賦值一個(gè)用戶定義變量
 案例1:
  passwd文件
  (1)搜索passwd文件以root關(guān)鍵字開頭的所有行,,并輸出該行的第1列和第7列。
  

 

 


    注意:只有匹配了pattern的行才會(huì)執(zhí)行action
      (2)搜索passwd文件以root和lisi關(guān)鍵字開頭的所有行,,并輸出該行的第1列和第7列,。
   

 

 

  (3)只顯示/etc/passwd的第一列和第七列,,,且在所有行前面添加列名user,,shell在最后一行添加"總用戶數(shù):用戶數(shù)量"。
  

 

 


    注意:BEGIN 在所有數(shù)據(jù)讀取行之前執(zhí)行,;END 在所有數(shù)據(jù)執(zhí)行之后執(zhí)行,。
  (4)將passwd文件中的用戶id增加數(shù)值1并輸出計(jì)算后的用戶id和用戶名

 

 


  (5)切割I(lǐng)P
   

 

 


          (6)統(tǒng)計(jì)passwd文件用戶id大于500的用戶數(shù),和統(tǒng)計(jì)id小于500的用戶數(shù)

 

 

 awk的內(nèi)置變量

  變量    說明
  FILENAME  文件名
  NR     已讀的記錄數(shù)
  NF     瀏覽記錄的域的個(gè)數(shù)(切割后,,列的個(gè)數(shù))
 案例2:
  (1)統(tǒng)計(jì)passwd文件名,,每行的行號(hào),每行的列數(shù)
   

 

 


  (2)查詢sed.txt中空行所在的行號(hào)并統(tǒng)計(jì)行號(hào)總數(shù)
  

 

 

 
 
 
 
 
 
 
 
 
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多