主頁 > 作業系統 > Linux下VIM編譯器的使用以及shell編程基礎

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

2020-09-30 09:47:08 作業系統

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/141617.html

標籤:Linux

上一篇:centos的安裝與配置,Linux下基本命令、權限控制,解壓縮檔案以及軟體的安裝與卸載

下一篇:linux - top與ps間的區別

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more