vim和shell編程

文件內(nèi)容查看命令

  • more 分頁(yè)查看(重點(diǎn))

    文本內(nèi)容比較多的情況下狡门,使用more命令可以分頁(yè)查看

    more file  分頁(yè)查看內(nèi)容
    more +n file 從第n行開始顯示內(nèi)容
    操作方式
    空格:向下滾動(dòng)一頁(yè)
    回車:向下滾動(dòng)一行
    b:向上滾動(dòng)一頁(yè)
    =:顯示行號(hào)
    q:退出
    
  • cat 全文瀏覽(重點(diǎn))

    cat file 全文瀏覽
    cat -n file 帶行號(hào)全文瀏覽
    cat file1 file2 > file 合并文件
    tac file 倒序?yàn)g覽
    
  • head 頭部瀏覽,默認(rèn)瀏覽前10行內(nèi)容

    head -n 50 file 顯示file文件前50行的內(nèi)容
    head -n -10 file 顯示除了最后10行以外的內(nèi)容
    
  • tail 尾部瀏覽 起惕,查看文件尾部?jī)?nèi)容,默認(rèn)查看10行(重點(diǎn))

    tail file 查看文件尾部?jī)?nèi)容是偷,默認(rèn)查看10行
    tal -5 file 顯示最后5行內(nèi)容
    tail -n +50 file 從第50行開始顯示內(nèi)容
    tail -5f file 顯示最后5行內(nèi)容焕妙,并且持續(xù)監(jiān)控文件內(nèi)容 
    此時(shí)打開另一個(gè)終端 echo hello >> 12.txt
    
  • 其他查看方式

    less分頁(yè)瀏覽,和more類似
    less -N file 分頁(yè)瀏覽溉知,并展示行號(hào)
    less -m file 分頁(yè)瀏覽,并展示百分比
    
    sort排序?yàn)g覽
    sort 文件 升序查看文件內(nèi)容
    sort -r 文件 降序查看
    sort -u  文件 取出文件重復(fù)內(nèi)容
    
    sed 流式瀏覽(重點(diǎn))
    sed -n "1,5p" 文件  顯示1-5行內(nèi)容
    sed -n "3,5{=;p}" 文件 顯示3-5內(nèi)容腕够,并且打印行號(hào)
    sed -n "10p" 文件 顯示第10行內(nèi)容
    

vim編輯器(重點(diǎn))

  • vim編輯器是linux系統(tǒng)中經(jīng)典的編輯器级乍,系統(tǒng)中使用的是一個(gè)精簡(jiǎn)版的vi編輯器,vim是vi增強(qiáng)版帚湘,比vi更易用玫荣,兩者命令操作幾乎沒(méi)有區(qū)別

  • vim編輯器不同于桌面編輯工具,純粹的命令行操作編輯工具

  • vim有三種基本工作模式

    • 命令模式客们、文本輸入模式崇决、末行模式
    命令模式:按一下ESC,即可進(jìn)入命令模式底挫。此模式下可以使用各種合法的vi命令,此時(shí)從鍵盤上輸入的任何字符都會(huì)被當(dāng)成命令來(lái)解釋脸侥,命令合法建邓,則執(zhí)行相應(yīng)動(dòng)作
    
    輸入模式(編輯模式):在命令下輸入i,該模式下用戶輸入的任何字符都會(huì)被當(dāng)成文本保存起來(lái)睁枕,并顯示在屏幕上官边,在輸入過(guò)程中沸手,如果想回到命令模式,按ESC即可
    
    末行模式:用戶在命令模式下按“:”即可進(jìn)入末行模式注簿,此時(shí)vim會(huì)顯示在窗口的最后一行
    hjkl:左下上右
    
  • (1)命令模式

    按鍵 描述
    x 刪除光標(biāo)所在的字符契吉,相當(dāng)于delete
    X 刪除光標(biāo)前一個(gè)字符,相當(dāng)于backspace
    dd(常用) 刪除光標(biāo)所在行诡渴,刪除一行
    ndd n為數(shù)字捐晶,連續(xù)刪除光標(biāo)后n行
    yy(常用) 復(fù)制光標(biāo)所在行,復(fù)制遺憾
    nyy n為數(shù)組妄辩,連續(xù)復(fù)制光標(biāo)后n行
    p(小寫)P(大寫)(常用) 小寫p復(fù)制數(shù)據(jù)粘貼在下一行惑灵,大寫P數(shù)據(jù)粘貼在上一行
    u,ctrl+r 撤銷, 反撤銷
    G和gg(常用) G文檔最后一行眼耀,gg文檔第一行
    • ^所在行開頭英支,$所在行尾部,r替換光標(biāo)所在位置字符
  • (2)編輯模式

    按鍵 描述
    i (常用) 光標(biāo)前插入字符
    I 行首插入字符
    a 光標(biāo)后插入字符
    A 行尾插入字符
    o(常用) 光標(biāo)下一行插入字符
    O 光標(biāo)上一行插入字符
  • (3)末行模式

    命令 描述
    :w 保存文件
    :w! 強(qiáng)制保存
    :q 不保存退出
    :qO啊(常用) 不保存強(qiáng)制退出
    :wq(常用) 保存并退出
    :wq干花! 強(qiáng)制保存并退出
  • scp命令(重點(diǎn))

    格式:scp -r 要復(fù)制的路徑下的文件 用戶@ip地址:目標(biāo)主機(jī)路徑
    克隆虛擬機(jī)
    右擊-->管理-->克隆-->下一步-->虛擬機(jī)當(dāng)前狀態(tài)-->創(chuàng)建完整克隆-->選擇名稱和位置-->完成
    修改主機(jī)名:hostnamectl set-hostname node1,將主機(jī)名修改為node1
    
    scp -r /home/ujiuye/plan1.py ujiuye@10.10.35.66:/home/ujiuye
    

定時(shí)任務(wù)

  • at:一次性定時(shí)任務(wù)

  • crontab:周期性定時(shí)任務(wù)

    今天晚上凌晨3點(diǎn)中期sshd服務(wù) 創(chuàng)建一次性定時(shí)任務(wù)楞黄,自動(dòng)在凌晨3點(diǎn)完成服務(wù)重啟
    每個(gè)月1號(hào)把敢,執(zhí)行一次上月日志的備份  某個(gè)特定時(shí)刻需要執(zhí)行指定的操作命令,創(chuàng)建周期性定時(shí)任務(wù)
    
  • at一次性定時(shí)任務(wù)

    at -l:查看任務(wù)
    at 時(shí)間點(diǎn):指定時(shí)間上谅辣,添加任務(wù)
    ctrl+D:保存定時(shí)任務(wù)
    atrm -n 刪除編號(hào)n的定時(shí)任務(wù)
    
    案例:在15:00修赞,在/home/ujiuye/test/5.txt輸出 “spider”
    at 15:00 (回車)
    echo "spider.." >> /home/ujiuye/test/5.txt
    ctrl+D保存
    打開新終端,tail -f 5.txt ,實(shí)時(shí)查看
    
    at 時(shí)間點(diǎn)(HH:MM)
    描述的是指定的時(shí)間點(diǎn)執(zhí)行一個(gè)定時(shí)任務(wù)
    時(shí)間早于系統(tǒng)時(shí)間桑阶,默認(rèn)第二天的這個(gè)時(shí)間執(zhí)行這個(gè)任務(wù)
    時(shí)間晚于系統(tǒng)時(shí)間柏副,默認(rèn)當(dāng)天的這個(gè)時(shí)間執(zhí)行任務(wù)
    
  • crontab周期性定時(shí)任務(wù)

    • 通過(guò)crontab的命令,添加蚣录,編輯割择,刪除任務(wù)

    • crontab -l:列出所有的周期性定時(shí)任務(wù)

    • crontab -e:編輯當(dāng)前用戶的周期性定時(shí)任務(wù)

    • crontab -r:刪除周期性定時(shí)任務(wù)

    crontab -e 進(jìn)入周期性定時(shí)任務(wù)編輯模式
    * * * * * 
    以第一顆*為例:
    依次是:分鐘,小時(shí)萎河,天荔泳,月,星期
    * : 表示每一天的每小時(shí)的每分鐘執(zhí)行一次
    10:表示每一天的每小時(shí)的第10分鐘執(zhí)行
    5虐杯,10玛歌,20:表示每一天的每小時(shí)的第5,10擎椰,20分鐘執(zhí)行
    5-10:表示每一天的每小時(shí)的第5分鐘開始直到第10分鐘結(jié)束
    
    案例:每分鐘向/home/ujiuye/test/5.txt 寫入“start working”
    
    
    每天6:00執(zhí)行 /home/ujiuye/test/4.sh
    0 6 * * * 
    每周周六凌晨4點(diǎn)執(zhí)行
    0 4 * * 6
    

shell編程入門

  • 什么是shell支子?

  • shell其實(shí)就是一個(gè)命令解釋器,是解釋執(zhí)行的腳本語(yǔ)言达舒,shell編程就是對(duì)一堆linux命令的邏輯化處理

  • shell編程的目的

    • 實(shí)行自動(dòng)化操作方式值朋,代替手工的繁瑣的步驟
  • shell編程的核心

    • 批量執(zhí)行l(wèi)inux的命令的操作叹侄,將手工執(zhí)行多次的命令,轉(zhuǎn)換到程序通過(guò)命令一次性執(zhí)行

    • 腳本基本規(guī)范

      腳本存放在scripts目錄中
      開頭添加#昨登!/bin/bash ,確定bash執(zhí)行命令
      附帶作者及版權(quán)信息
      腳本名稱擴(kuò)展名為 .sh
      腳本盡量不用中文
      成對(duì)的符號(hào)一次性書寫完成
      循環(huán)格式一次性輸入完成
      
  • 注釋和輸入輸出

    注釋:除了第一行趾代,以#注釋
    echo :打印信息,類似于python中的print()函數(shù)
    echo -n:打印信息不換行
    read :讀取用戶輸入的信息
    read -p:打印提示信息
    read -s:用戶輸入信息不回顯
    
  • 執(zhí)行shell腳本

    mkdir scripts
    vim test.sh
    #!/bin/bash
    echo "hello world"
    
    執(zhí)行上述腳本
    1.bash tesh.sh
    2.sh test.sh
    3. ./test.sh   chmod u+x test.sh
    
  • 變量

    • 什么是變量:shell傳遞數(shù)據(jù)的一種方式丰辣,作為一個(gè)臨時(shí)存儲(chǔ)數(shù)據(jù)的容器撒强,可以存放數(shù)據(jù)并在其他地方需要的地方直接通過(guò)變量名使用對(duì)應(yīng)的數(shù)據(jù)
    • 命名規(guī)則:數(shù)字、字母糯俗、下劃線組成尿褪,數(shù)字不能開頭,見名知意得湘,下劃線命名
    vim test2.sh
    #!/bin/bash
    name=tom
    echo "name:$name"   name:tom
    echo 'name:$name'   name:$name
    echo "name:${name}_01"  name:tom_01
    
    注意:
    變量賦值杖玲,使用“=”符號(hào),將“=”右邊的結(jié)果賦值給左邊的變量淘正,等號(hào)兩邊不能有空格
    定義的變量不能和系統(tǒng)命令有沖突
    賦值添加雙引號(hào)摆马,不加沒(méi)有影響,但多個(gè)字符中間有空格必須加引號(hào)
    雙引號(hào):弱引用鸿吆,引用變量
    單引號(hào):強(qiáng)引用囤采,輸出引用的字符
    
  • 程序控制結(jié)構(gòu)

    順序結(jié)構(gòu),選擇結(jié)構(gòu)惩淳,循環(huán)結(jié)構(gòu)

    • 選擇結(jié)構(gòu)
    單分支
    if 條件;then
      條件為True要執(zhí)行的代碼
    fi
    案例:查看ls命令在文件系統(tǒng)環(huán)境變量的位置蕉毯,存在返回ok  which ls
    vim 1.sh
    #!/bin/bash
    if which ls;then
      echo ok
    fi
    
    雙分支
    if 條件;then
      條件為True要執(zhí)行的代碼
    else
      其他情況
    fi
    案例:搜索有沒(méi)有zhang用戶,找到返回ok思犁,找不到返回error
    vim 2.sh
    #!/bin/bash
    if grep zhang /etc/passwd;then
      echo ok
    else
      echo error
    fi
    
    多分支
    if [ 條件1 ];then
      執(zhí)行代碼1
    elif [ 條件2 ];then
      執(zhí)行代碼2
    else
      其他情況
    fi
    案例操作:輸入功能選擇代虾,輸入1,輸出選項(xiàng)1激蹲,輸入2棉磨,輸出選項(xiàng)2
    vim 3.sh
    #!/bin/bash
    read -p "請(qǐng)輸入功能選項(xiàng)": choice
    if [ $choice -eq 1 ];then
      echo 選項(xiàng)1
    elif [ $choice -eq 2 ];then
      echo "選項(xiàng)2"
    elif [ $choice -eq 3 ];then
      echo "選項(xiàng)3"
    else
      echo 沒(méi)有此選項(xiàng)
    fi
    
  • 文件判斷

    -e 判斷文件是否存在 : if [ -e 文件路徑 ]  #注意括號(hào)和命令之間有空格
    -d 判斷是否是文件夾:  if [ -d 文件路徑 ]
    -f 判斷是否是文件
    -r 判斷是否可讀
    -w 判斷是否可寫
    -x 判斷是否可執(zhí)行
    
    案例:腳本完成自動(dòng)備份操作
    判斷當(dāng)前目錄是否有model目錄
    如果沒(méi)有就創(chuàng)建,有執(zhí)行備份
    #!/bin/bash
    echo ----開始準(zhǔn)備備份----
    if [ -e model ];then
      echo model已存在
      if [ -d model ];then
          echo model是一個(gè)目錄学辱,可以執(zhí)行備份
      fi
    else
      echo model不存在乘瓤,需要先創(chuàng)建
    fi
    echo ---開始備份---
    sleep 2
    echo ---備份完成---
    
  • 字符的判斷

    = 判斷兩個(gè)字符是否相等
    != 判斷兩個(gè)字符不相等
    -z 判斷字符串長(zhǎng)度是否是0
    -n 判斷字符串是否為空
    案例操作:
    用戶輸入“Q”,退出系統(tǒng)策泣,輸入“C”,繼續(xù)
    #!/bin/bash
    read -p "是否退出系統(tǒng)(Q退出衙傀,C繼續(xù))": ret
    if [ $ret = "Q" ];then
      echo "退出系統(tǒng)"
    elif [ $ret = "C" ];then
      echo 繼續(xù)
    fi
    
    
  • 整數(shù)判斷

    -eq 判斷兩個(gè)整數(shù)是否相等
    -gt >
    -lt <
    -ge >=
    -le <=
    -ne !=
    
  • 邏輯判斷

    &&判斷并且關(guān)系
    -a判斷并且關(guān)系
    ||判斷或者關(guān)系
    -o判斷或者關(guān)系
    !判斷取反
    
  • case選擇結(jié)構(gòu)

    case 變量 in
      值)
      命令序列1
      ;;
      值2)
      命令序列2
      ;;
      *)
    無(wú)匹配后命令序列
    esac
    案例操作:顯示功能選項(xiàng)着降,輸入序號(hào)或者功能名稱都可以執(zhí)行
    #! /bin/bash
    echo ============
    echo "   1.login  "
    echo "   2.register  "
    echo "   3.exit  "
    echo ============
    read -p "請(qǐng)輸入功能選項(xiàng)": choice
    case $choice in
      1|login)
      echo 登錄
      ;;
      2|register)
      echo 注冊(cè)
      ;;
      3|exit)
      echo 退出
      ;;
      *)
    echo "沒(méi)有這個(gè)選項(xiàng)"
    esac
    
    
  • for循環(huán)

    基本操作語(yǔ)法
    for 臨時(shí)變量 in [取值列表]
    do
      循環(huán)中的代碼
    done
    #檢查ip地址通訊
    vim 7.sh
    #!/bin/bash
    hosts="10.10.35.10 10.10.35.15 10.10.35.25"
    for h in $hosts
    do 
      echo "開始檢查$h通訊"
      sleep 1
      echo "檢查$h通過(guò)"
    done
    echo "所有ip檢查通過(guò)"
    
  • while循環(huán)

    while 條件
    do 
      循環(huán)要執(zhí)行的代碼
    done
    
    案例操作:計(jì)算1-100之間的和
    #!/bin/bash
    num=1
    sum=0
    while [ $num -le 100 ]
    do 
      sum=$[ $sum + $num ]
      let num+=1
    done
    echo 1-100的和是$sum
    
    
  • 函數(shù)的聲明和調(diào)用

    function 函數(shù)名稱(){
    函數(shù)中的代碼
    }
    
    快捷寫法
    函數(shù)名(){
    函數(shù)中的代碼
    }
    
    #!/bin/bash
    function func1(){
    echo 鎵цfunc1浠g爜
    }
    
    func2(){
    echo 鎵цfunc2浠g爜
    }
    func1
    func2
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末差油,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子任洞,更是在濱河造成了極大的恐慌蓄喇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件交掏,死亡現(xiàn)場(chǎng)離奇詭異妆偏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盅弛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門钱骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挪鹏,你說(shuō)我怎么就攤上這事见秽。” “怎么了讨盒?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵解取,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我返顺,道長(zhǎng)禀苦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任遂鹊,我火速辦了婚禮振乏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秉扑。我一直安慰自己慧邮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布舟陆。 她就那樣靜靜地躺著误澳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吨娜。 梳的紋絲不亂的頭發(fā)上脓匿,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音宦赠,去河邊找鬼陪毡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勾扭,可吹牛的內(nèi)容都是我干的毡琉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妙色,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼桅滋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丐谋,失蹤者是張志新(化名)和其女友劉穎芍碧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體号俐,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泌豆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吏饿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪危。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖猪落,靈堂內(nèi)的尸體忽然破棺而出贞远,到底是詐尸還是另有隱情,我是刑警寧澤笨忌,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布蓝仲,位于F島的核電站,受9級(jí)特大地震影響蜜唾,放射性物質(zhì)發(fā)生泄漏杂曲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一袁余、第九天 我趴在偏房一處隱蔽的房頂上張望擎勘。 院中可真熱鬧,春花似錦颖榜、人聲如沸棚饵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)噪漾。三九已至,卻和暖如春且蓬,著一層夾襖步出監(jiān)牢的瞬間欣硼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工恶阴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诈胜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓冯事,卻偏偏與公主長(zhǎng)得像焦匈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昵仅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354