亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Shell—學(xué)習(xí)之心得

系統(tǒng) 2072 0

Shell—學(xué)習(xí)之心得

?

??? 由于項(xiàng)目要招聘需要有經(jīng)驗(yàn) shell 開(kāi)發(fā)人員 (awk 編程 ) ,而作為技術(shù)面試官 ( 暫時(shí) ) 的我對(duì) shell 編程不太熟;當(dāng)然以前也寫(xiě)過(guò)一些 shell 腳本來(lái)滿(mǎn)足項(xiàng)目的需求 備份環(huán)境,數(shù)據(jù)庫(kù) ( 邏輯 ) 。假如只是針對(duì) awk 編程的,那我絕對(duì)可以問(wèn)倒他,呵呵 。所以我最近學(xué)習(xí)了 shell 編程。入門(mén)還不是很深,但是還是有點(diǎn)心得的。以下是本人的一些心得;大伙們覺(jué)得好,就拍個(gè)磚,不好也拿起你們的手鼓個(gè)掌 當(dāng)然文中有什么錯(cuò)誤 , 遺漏的也請(qǐng)指正我,大伙們對(duì) shell 的總結(jié)也可以在下面回復(fù)。

??? ?1.???shell之read命令

????????1.1? 對(duì) read 的參數(shù) p,t,s,n 。在此我就不作什么描述了。但對(duì)參數(shù) a 還是做下。 Read 也可以申明數(shù)組,例如 read01.sh

          #!bin/
          
            bash

#author li0924

read 
          
          -p 
          
            "
          
          
            please entry your name: 
          
          
            "
          
           -
          
            a name  
            
              #執(zhí)行在此輸入多個(gè)字符串,以空格為分隔符 
            
            echo ${#name[@]};                         
            
               #打印數(shù)組元素的個(gè)數(shù) 
            
            echo ${name[
          
          
            0
          
          ]};                          
          
              #打印第一個(gè)數(shù)組元素,注意數(shù)組是以下標(biāo)為0開(kāi)始
          
        

??????? ?? 1.2? 讀文件;這個(gè)可能我們對(duì)read用到最多。每次調(diào)用read命令都會(huì)讀取文件中的"一行"文本。當(dāng)文件沒(méi)有可讀的行時(shí),read命令將以非零狀態(tài)退出。讀取文件的關(guān)鍵是如何將文本中的數(shù)據(jù)傳送給read命令。最常用的方法是對(duì)文件使用cat命令并通過(guò)管道將結(jié)果直接傳送給包含read命令的while命令。例如read02.sh

date文件:

? View Code

?

          #!/bin/
          
            bash

count
          
          =
          
            1
          
          
            while
          
          
             read line   
            
               #cat 命令的輸出作為read命令的輸入,read讀到的值放在line中 
            
          
          
            do
          
          
            

   echo 
          
          
            "
          
          
            $count:$line
          
          
            "
          
          
            

   count
          
          =$(($count + 
          
            1
          
          
            ))

done 
          
          < date      
          
             #當(dāng)然你可以在while前面加 “cat date |“來(lái)替換”<
          
          
            
              date” 
            
            exit 
          
          
            0
          
        

???????? 1.3? ?? 大家有沒(méi)有覺(jué)得這個(gè)效果跟awk ’{print FNR”:”$0}’ date一樣。暫不作描述;本文重點(diǎn)不是awk。在上腳本;read后面只有變量line;其實(shí)可以跟很多變量。這個(gè)有點(diǎn)類(lèi)似于awk中的$1-$9。例如read03.sh

          #!/bin/
          
            bash 

cat date
          
          | 
          
            while
          
          
             read one two three      #cat 命令的輸出作為read命令的輸入,read讀到的值放在line中 


          
          
            do
          
          
             

   echo 
          
          
            "
          
          
            ${one}:${two}:${three}
          
          
            "
          
          
            

done

exit 
          
          
            0
          
        

???? ?拓展:Read命令用法我們知道了;最后留一個(gè)問(wèn)題給大伙;該腳本中把three刪除;打印$two是什么?添加four;打印$four有是什么? ?????

???

? ?? 2.??? 數(shù)組

????????? 2.1? 數(shù)組的常規(guī)用法;數(shù)組的下標(biāo)是從 0 開(kāi)始的;這個(gè)在前面有提到!

?

          A=
          
            (a b c def)    
            
              # 定義$A數(shù)組 
            
            ${A[@]} 或 ${A[
          
          *
          
            ]}    
            
               可得到 a b c def (全部元素) 
            
            ${A[
          
          
            0
          
          ]}     
          
            可得到 a (第一個(gè)數(shù)組元素),${A[1
          
          
            
              ]} 則為第二個(gè)數(shù)組元素 
            
            ${#A[
          
          
            0
          
          ]}    
          
             可得到 1
          
          
            
               (第一個(gè)數(shù)組元素(a)的長(zhǎng)度), 
            
            ${#A[
          
          
            3
          
          ]}    
          
             可得到 3
          
          
            
               (第四個(gè)數(shù)組(def)的長(zhǎng)度) 
            
            A[
          
          
            3
          
          ]=xyz   
          
             將第4個(gè)數(shù)組重新定義為 xyz
          
        

?????? ? 2.2? 數(shù)組的長(zhǎng)度

          ${#A[*]}或者${#A[@]}
        

????? ? 2.3 刪除數(shù)組 unset? 數(shù)組 [ 下標(biāo) ]? 可以清除相應(yīng)的元素,不帶下標(biāo),清除整個(gè)數(shù)據(jù)

          unset A[
          
            0
          
          
            ]    #刪除第一個(gè)元素

unset A      #刪除數(shù)組A
          
        

??????? 2.4 ? 特殊使用 通過(guò) ?${ 數(shù)組名 [@ *]: 起始位置 : 長(zhǎng)度 }? 切片原先數(shù)組,返回是字符串,中間用 空格 分開(kāi),因此如果加上 ”()” ,將得到切片數(shù)組, 例如下面測(cè)試

          [li0924@localhost shell]$ A=
          
            (a b c def)      
            
               #定義一個(gè)數(shù)組A 
            
            [li0924@localhost shell]$ echo ${A[@]:
          
          
            0
          
          :
          
            3
          
          
            }   
            
               #取前三個(gè)元素 
            
            a b c

[li0924@localhost shell]$ B
          
          =(${A[@]:
          
            0
          
          :
          
            3
          
          })    
          
             #這個(gè)類(lèi)似于B=
          
          
            
              (a b c);其中括號(hào)里面是上述生產(chǎn)的 
            
            [li0924@localhost shell]$ echo ${B[@]}

a b c

[li0924@localhost shell]$ echo ${A[@]}

a b c def
          
        

???????? 講到 ${ 數(shù)組名 [@ *]: 起始位置 : 長(zhǎng)度 } 是返回字符串;接下來(lái)我們學(xué)習(xí)字符串的處理

????

??? 3. 字符串處理

???? ?? 其實(shí)shell語(yǔ)言不像其他編程語(yǔ)言對(duì)字符串處理的內(nèi)置函數(shù)。這個(gè)也是我覺(jué)得shell很難學(xué)懂原因。慢慢發(fā)現(xiàn)shell主要功能不是針對(duì)文本處理,處理數(shù)據(jù)的。所以這部分自己理解就行了。我們定義一個(gè)變量file=/dir1/dir2/dir3/my.file.txt

???????? 3.1? 求字符串長(zhǎng)度

          
            [li0924@localhost shell]$ echo ${#file}


          
          
            27
          
          
            

[li0924@localhost shell]$ echo $file 
          
          | awk 
          
            '
          
          
            {print length($0)}
          
          
            '
          
          
            #當(dāng)然你也可以借用awk中的length函數(shù)


          
          
            27
          
        

????????? 3.2 替換字符串

          [li0924@localhost shell]$ echo ${file/dir/
          
            path}


          
          /path1/dir2/dir3/
          
            my.file.txt

[li0924@localhost shell]$ echo ${file//dir/path}
          
          

/path1/path2/path3/my.file.txt
        

??????????? 拓展: 當(dāng)然你也可以用sed或者awk中的sub,gsub來(lái)實(shí)現(xiàn)。

          [li0924@localhost shell]$ echo $file | sed 
          
            '
          
          
            s/dir/path/
          
          
            '
          
          

/path1/dir2/dir3/
          
            my.file.txt

[li0924@localhost shell]$ echo $file 
          
          | sed 
          
            '
          
          
            s/dir/path/g
          
          
            '
          
              

/path1/path2/path3/my.file.txt
        

???????? 3.3?? 截取字符串 -- ${ 變量名 : 起始位置 : 長(zhǎng)度 }

          [li0924@localhost shell]$ echo ${file:
          
            0
          
          :
          
            5
          
          
            }   


          
          /
          
            dir1

[li0924@localhost shell]$ echo ${file:
          
          
            1
          
          :
          
            5
          
          
            }   
            
              #下標(biāo)是從0開(kāi)始的;從0和1開(kāi)始是有區(qū)別的;這個(gè)跟sql是不同。 
            
            dir1
          
          /
          
            

[li0924@localhost shell]$ echo ${file: 
          
          -
          
            4
          
          } 
          
              #只提取最后4位.注意:跟-
          
          
            
              4之間是有空格的;這個(gè)做個(gè)記號(hào)A 
            
            .txt
          
        

????? ??? 拓展:這里同樣也可以用 awk substr 函數(shù)實(shí)現(xiàn)。暫不演示。
??? 4.? 對(duì)未設(shè)定 , 空值的變量操作

?????? Shell 對(duì)這些操作有很多,大伙可以自己去查看資料。我們暫時(shí)只講 ${ 變量名 :- 默認(rèn)值 } 。假如變量是為定義或者是空值就取默認(rèn)值。有點(diǎn)類(lèi)似于 sql 中的 nvl 函數(shù)。

          [li0924@localhost shell]$ name=
          
            lottu               
            
               #定義一個(gè)變量 
            
            [li0924@localhost shell]$ echo $name               

lottu

[li0924@localhost shell]$ echo ${name:
          
          -
          
            li0924}      
            
               #name的值是lottu。所以結(jié)果是lottu 
            
            lottu

[li0924@localhost shell]$ unset name

[li0924@localhost shell]$ echo ${name:
          
          -
          
            li0924}      
            
              #name是未定義,所以取默認(rèn)值li0924 
            
            li0924
          
        

??? 拓展:對(duì)上述的記號(hào)A。去掉空格看下;無(wú)論file是否有值;效果都不是。

          
            [li0924@localhost shell]$ echo $file


          
          /dir1/dir2/dir3/
          
            my.file.txt

[li0924@localhost shell]$ echo ${file:
          
          -
          
            4
          
          
            }


          
          /dir1/dir2/dir3/
          
            my.file.txt

[li0924@localhost shell]$ unset file

[li0924@localhost shell]$ echo ${file:
          
          -
          
            4
          
          
            }


          
          
            4
          
        

?????? 5. shell中的三目表達(dá)式
?????????? ?5.1 我們的shell對(duì)三目表達(dá)式別具風(fēng)格。語(yǔ)法是expr && cmd1 ||cmd2

          [li0924@localhost shell]  [ 
          
            7
          
           -gt 
          
            6
          
           ] && echo 
          
            "
          
          
            0
          
          
            "
          
           ||echo 
          
            "
          
          
            1
          
          
            "
          
        

?????????? 5.2對(duì)數(shù)字運(yùn)算也可以使用expr?cmd1:cmd2

          [li0924@localhost shell]$ (( a =
          
            7
          
          >
          
            6
          
          ?
          
            0
          
          :
          
            1
          
          
             ))

[li0924@localhost shell]$ echo $a


          
          
            0
          
        

?????

?? ????????6. 對(duì)冒號(hào):和內(nèi)置命令true

???????????? 在某些條件判斷,我們不需要做什么操作;但未了代碼的完整性,我們可以在其中添加:或者 true 。這個(gè)類(lèi)似其它語(yǔ)言的 null 。暫作簡(jiǎn)單測(cè)試。這里的:等價(jià)于 true

          [li0924@localhost shell]$ [ 
          
            7
          
           -lt 
          
            6
          
           ] && : ||echo 
          
            "
          
          
            1
          
          
            "
          
          
            1
          
          
            

[li0924@localhost shell]$ [ 
          
          
            7
          
           -gt 
          
            6
          
           ] && : ||echo 
          
            "
          
          
            1
          
          
            "
          
          
            

[li0924@localhost shell]$ echo $
          
          ?


          
            0
          
          
            

[li0924@localhost shell]$ [ 
          
          
            7
          
           -gt 
          
            6
          
           ] && 
          
            true
          
           ||echo 
          
            "
          
          
            1
          
          
            "
          
          
            

[li0924@localhost shell]$ echo $
          
          ?


          
            0
          
        

?

?最后奉送shell入門(mén)視頻 http://www.cppcourse.com/shell-programming

?
?
分類(lèi):? shell

Shell—學(xué)習(xí)之心得


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 精品福利一区 | 亚洲男人的天堂久久香蕉 | 国产精品视频免费的 | 久久精品乱子伦免费 | 欧美爱爱爱爱免费视频 | 伊人天天操 | 欧美日韩在线观看免费 | 伊人天伊人天天网综合视频 | 国产91精品久久久久久 | 久久国产高清字幕中文 | 377p欧洲最大胆艺术 | 久久免费视频一区 | 欧美国产高清 | 99在线热视频只有精品免费 | 亚洲第3页| 青青国产成人精品视频 | 久久久久久尹人网香蕉 | 亚洲第一伊人 | 欧美一级毛片片免费孕妇 | 欧美日本免费观看αv片 | 中文精品久久久久国产网址 | 天天操天天舔天天射 | 国产伦精品一区二区三区女 | 午夜在线观看网站 | 欧美日韩免费播放一区二区 | 97国产精品国产品国语字幕 | 四虎永久在线精品视频免费观看 | 免费观看h片 | 亚洲国产精品日韩在线观看 | 亚洲精品久久九九热 | 日韩国产在线 | 97dyy在线观看手机版 | 欧美日韩福利视频一区二区三区 | 国产欧美日韩在线观看 | 成人免费淫片免费观看 | 26uuu另类欧美亚洲日本 | 老司机午夜网站 | 亚洲精品乱码久久久久久中文字幕 | 免费黄a| 老司机精品视频个人在观看 | 免费国产97久久青草 |