Linux下VIM編譯器的使用以及shell編程基礎

来源:https://www.cnblogs.com/chenyingying0/archive/2020/01/15/12196266.html
-Advertisement-
Play Games

VIM編譯器的安裝與使用 vim編輯器安裝 在CentOS中,執行:yum -y install vim 普通模式 h: 左移一個字元 j: 下移一行 k: 上移一行 l: 右移一個字元 PageDown(或Ctrl+F):下翻一屏 PageUp(或Ctrl+B):上翻一屏 G:移到緩衝區的最後一行 ...


VIM編譯器的安裝與使用

    vim編輯器安裝
    在CentOS中,執行:yum -y install vim

普通模式

        h: 左移一個字元
         j: 下移一行
        k: 上移一行
        l: 右移一個字元

        PageDown(或Ctrl+F):下翻一屏
        PageUp(或Ctrl+B):上翻一屏
        G:移到緩衝區的最後一行
        num G:移動到緩衝區中的第num行
        gg:移到緩衝區的第一行

命令行模式

        普通模式下按下冒號鍵

        保存、退出命令:
        q:如果未修改緩衝區數據,退出
        q!:取消所有對緩衝區數據的修改並退出
        w filename:將文件保存到另一個文件中
        wq:將緩衝區數據保存到文件中並退出

        刪除數據:
        x: 刪除當前游標所在位置的字元
        dd: 刪除當前游標所在行
        dw: 刪除當前游標所在位置的單詞
        d$: 刪除當前游標所在位置至行尾的內容

        編輯數據:
        J: 刪除當前游標所在行行尾的換行符(拼接行)
        u: 撤銷前一編輯命令
        a: 在當前游標後追加數據
        A: 在當前游標所在行行尾追加數據

        編輯數據:
        r char: 用char替換當前游標所在位置的單個字元
        R text: 用text覆蓋當前游標所在位置的數據,直到按下ESC鍵
        o: 在當前游標的下一行追加數據
        O: 在當前游標上一行追加數據

        編輯數據:
        i: 在當前游標前插入
        I:在當前游標所在行開頭插入

        複製和粘貼:
        yw:複製一個單詞
        y$:複製到行尾
        yy:複製整行
        p: 粘貼

可視模式

        進入可視模式,應移動游標到要開始複製的位置,並按下v鍵

        查找和替換:
        要輸入一個查找字元串,就按下斜線(/) 鍵
        使用n鍵,表示下一個(next)

        查找和替換:
        替換命令允許你快速用另一個單詞來替換文本中的某個單詞。
        必須進入命令行模式才能使用 替換命令。
        命令::s/old/new/

        :s/old/new/g:一行命令替換所有old
        :n,ms/old/new/g:替換行號n和m之間所有old
        :%s/old/new/g:替換整個文件中的所有old
        :%s/old/new/gc:替換整個文件中的所有old,但在每次出現時提示

shell編程

    #!/bin/bash
    echo "Hello Bash"

    運行shell
    1、可執行許可權
    chmod +x ./test.sh
    2、執行腳本
    ./test.sh

變數的定義和使用

  定義變數時,變數名不加美元符號($,PHP語言中變數需要)
  使用 readonly 命令可以將變數定義為只讀變數,只讀變數的值不能被改變
  使用 unset 命令可以刪除變數, unset 命令不能刪除只讀變數

作用域:
  局部變數(盡在當前shell中有效,其他shell啟動的程式無法訪問)
  環境變數(所有程式均可訪問)

        #!/bin/bash

        test="test.com"
        readonly test

        echo $test

        test="www.test.com"

        echo $test

        web="http://test.com"

        readonly web

        unset web

        echo $web

字元串

        #!/bin/bash

        var=100
        #字元串拼接
        str1="$var \"test\".c\nom"

        str2='w\nww'$var'.test.com'

        str3="www"$var".test.com"

        #輸出字元串長度
        echo ${#str1}

        #字元串截取
        echo ${str2:1:3}

        #字元串查找
        echo `expr index "$str3" w`

        #str3=$var http://www.test.com

        #echo -e $str1

        #echo -e $str2

        #echo $str3

數組

        #!/bin/bash

        arr1=(1 2 3 4 5 "str")

        echo ${arr1[2]}

        #使用 @ 符號可以獲取數組中的所有元素
        echo ${arr1[@]}
        #echo ${arr1[*]}

        #獲取數組長度
        echo ${#arr1[@]}

        #多行註釋
        :<<EOF
        arr2[0]=100
        arr2[3]=200

        echo ${arr2[3]}
        EOF

參數

        #!/bin/bash

        echo $0

        echo $1

        echo $2

        echo $3

        # $# : 傳遞到腳本的參數個數
        echo "The number of the parameters: "$#

        # $* : 以一個單字元串顯示所有向腳本傳遞的參數
        echo "All parameters: "$*

        # $! : 後臺運行的最後一個進程的ID號
        # $@:與$*相同,但是使用時加引號,併在引號中返回每個參數
        echo "All parameters: "$@

        for i in "$*"
        do
            echo $i
        done

        for i in "$@"
        do
            echo $i
        done

        # $$ : 腳本運行的當前進程ID號
        echo "The Progress ID: "$$

        # 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤
        echo $?

        #$- : 顯示Shell使用的當前選項

基本運算符

        #!/bin/bash

        # expr 是一款表達式計算工具,使用它能完成表達式的求值操作
        # 表達式和運算符之間要有空格
        # 完整的表達式要被 ` ` 包含
        i=`expr 2 + 3`
        echo $i

        a=100
        b=100

        # 條件表達式要放在方括弧之間,並且要有空格
        if [ $a != $b -o $a -eq $b ]
        then
            echo "a = b"
        fi

        # 乘號(*)前邊必須加反斜杠(\)才能實現乘法運算
        echo `expr 100 \* 100`

        # 關係運算符只支持數字,不支持字元串,除非字元串的值是數字
        # -eq 、 -ne 、 -gt 、 -lt 、 -ge 、 -le
        if [ $a -eq $b ]
        then
            echo "eq"
        fi

        # 布爾運算符! 、 -o 、 -a
        if [ $a == 100 -a $b == 100 ]
        then
            echo "a=100,b=100"
        fi

        if [[ $a == 100 && $b == 100 ]]
        then
            echo "a=100,b=100"
        fi

        # 字元串運算符  = 、 != 、 -z 、 -n 、 str
        str1='This'

        if [ -z "$str1" ]
        then
            echo "The length of the string is 0"
        fi

        if [ -n "$str1" ]
        then
            echo "The length of the string is not 0"
        fi

        if [ $str100 ]
        then
            echo "This string is not empty"
        fi

        # 文件測試運算符用於檢測 Unix 文件的各種屬性
        # -b 、 -c 、 -d 、 -f 、 -g 、 -k 、 -p 、 -u 、 -r 、 -w 、 -x 、 -s 、 -e
        file='/root/shell/hello_bash'

        if [ -e $file ]
        then
            echo "This file exists"
        fi

echo

        #!/bin/bash

        echo 'This is string'

        echo "This is string"

        # 字元串的引號可以省略
        echo This is string

        # read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數
        echo -n "Please input your age: "
        read age

        echo "My Age is "$age

        # 顯示換行:
        echo -e "OK! \n" # -e 開啟轉義

        # 顯示不換行:
        echo -e "OK! \c" # -e 開啟轉義 \c 不換行

        # 顯示結果定向至文件:
        echo "Learning IT" > test

        # 顯示命令執行結果:
        echo `date`

printf

        #!/bin/bash

        # format-string: 為格式控制字元串
        # %s %c %d %f都是格式替代符
        # %-10s 指一個寬度為10個字元(-表示左對齊,沒有則表示右對齊),任何字元都會被顯示在10個字元寬的字元內,如果不足則自動以空格填充,超過也會將內容全部顯示出來
        printf "%-10s is string %d %.4f" "string" "100" 210

        if [ 1 == 1 ]
        then
            echo "correct"
        fi

        # test 命令用於檢查某個條件是否成立,它可以進行數值、字元和文件三個方面的測試
        if test 1 == 1
        then
            echo "test correct"
        fi

流程式控制制

        #!/bin/bash
        i=2

        if [ $i == 1 ]
        then
            echo "i = 1"
        elif [ $i == 2 ]
        then
            echo "i = 2"
        else
            echo "i != 1"
        fi
        --------------------------

        #!/bin/bash

        for i in 1 2 3 4 5
        do
            if [ $i -eq 1 ]
            then
                break
            fi
            echo $i
        done
        --------------------------

        #!/bin/bash

        i=1

        while (( $i < 10 ))
        do
            echo $i
            # let 命令,它用於執行一個或多個表達式,變數計算中不需要加上 $ 來表示變數
            let "i++"
        done

        while :
        do
            echo "unlimit"
        done

        while true
        do
            echo "unlimit"
        done

        # 無限迴圈:
        # while 去除condition
        # while true
        # for (( ; ; ))
        for (( ; ; ))
        do
            echo "for unlimit"
        done
        --------------------------

        #!/bin/bash

        # until 迴圈執行一系列命令直至條件為 true 時停止
        # until 迴圈與 while 迴圈在處理方式上剛好相反
        i=10

        until (( $i == 0 ))
        do
            echo $i
            let "i--"
        done
        --------------------------

        #!/bin/bash

        i=4

        # case語句為多選擇語句
        case $i in
            1) echo 'i=1'
            ;;
            2|3|4) echo 'i=2 or i=3 or i=4'
            ;;
            *) echo 'i != 1 && i != 2'
            ;;
        esac

函數

        #!/bin/bash

        # myfunc 2 2

        # function myfunc()
        myfunc()
        {
            echo "myfunc"
            # 參數返回,可以顯示加:return 返回,如果不加,將以最後一條命令運行結果,作為返回值。 return後跟數值n(0-255)
            # 在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數…
            # $10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數
            return `expr $1 + $2`
        }

        myfunc 1 2

        # 函數返回值在調用該函數後通過 $? 來獲得
        echo $?

        # myFunc

輸入/輸出重定向
  如果希望執行某個命令,但又不希望在屏幕上顯示輸出結果,那麼可以將輸出重定向到 /dev/
  /dev/null 是一個特殊的文件,寫入到它的內容都會被丟棄;如果嘗試從該文件取內容,那麼什麼也讀不到。但是 /dev/null 文件非常有用,將命令的輸出重定向到它,會起到”禁止輸出"的效果

文件包含

        #!/bin/bash

        source ./public.sh

        myfunc

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在處理客戶端安裝程式過程,有一個需求:需要檢測Windows平臺下安裝office 版本信息以及獲取使用的office是32 位還是64 位; 當檢測出office 位數為64位時,提示當前office 不支持程式的使用。 找了很多資料,一般情況下,是不能直接獲取office 安裝位數信息的;加 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,記錄一下學習過程以備後續查用。 一、引言 接上一篇C#設計模式學習筆記:簡單工廠模式(工廠方法模式前奏篇),通過簡單工廠模式的瞭解,它的缺點就是隨著需求的變化我們要不停地修改工廠里 上一 ...
  • 為什麼想到這個呢,演算法什麼的又不太懂,這是 因為搭建VPN + BBR 與之簡直絕配 有的人搭建SSR ,配一個什麼銳速,還需要降內核版本, 而且還容易出錯,降了之後更加容易出現相容性問題,所以偶爾看到了google的BBR 擁塞阻塞演算法 演算法原理不知道,也不想去深究 。 原理 這篇博客 講得還是很 ...
  • 本篇中涉及到算術運算,使用了$[]這種我未在官方手冊中見到的用法,但是確實可用的,在此前的博文《Bash腳本編程學習筆記03:算術運算》中我有說明不要使用,不過自己忘記了。大家還是儘量使用其他的方法進行算術運算。 簡介 Bash具有三種迴圈結構: for迴圈。 while迴圈。 untile迴圈。 ...
  • 簡介 在bash腳本編程中,條件結構體使用if語句和case語句兩種句式。 if語句 單分支if語句 if TEST; then CMD fi TEST:條件判斷,多數情況下可使用test命令來實現,返回值為0的話則執行CMD,否則就離開該條件結構體,腳本繼續往下執行。 [root@c7-serve ...
  • vmware進程殺不掉 在使用vmware虛擬機時,如果強制結束vmware進程,可能會發現在資源監視器中有一個vmware-vmx.exe進程始終關不掉,獲得管理員許可權去殺或者重啟都沒有用,然後正常的虛擬機打不開,也無法卸載或者更新 網上所有的教程都嘗試過了,也還是不行。我的解決方法是:首先重啟計 ...
  • 背景 在linux系統中提供了2個查詢系統負荷值的命令,一個是 ps o THREAD 一個是 top ,這兩個命令都能夠查詢當前進程的CPU使用率情況,但是所代表的含義確實不一樣的, ps o THREAD 偏向與整個進程周期所占的CPU使用率,而 top 更偏向於某個固定時間視窗的CPU使用率也 ...
  • 隨著自旋轉移矩效應的發現以及材料和結構的優化,基於自旋轉移矩效應的STT-MRAM器件應運而生。自從自旋轉移矩效應被證實以來,一方面研究人員通過大量的努力嘗試降低磁化反轉的臨界電流,增加熱穩定性;另一方面Sony、Hitachi、Renesas、Crocus、Toshiba、Samsung、Hyni ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...