linux之vim編輯器與shell編程基礎__區塊鏈

來源:互聯網
上載者:User

Vim學習

Vim的普通模式下按Ctrl+z會把當前開啟的檔案放入後台運行,如果需要恢複到前台來,需要先在shell的命令模式下用jobs命令查看當前環境下所有任務的編號,在用fg %N恢複到前台來,N是對應的後台運行編號。

 

dw是刪除一個單詞(或者daw),dnw刪除n個單詞。

nx是刪除那個字元,ndd是刪除n行。

命令模式下:set nu 是顯示行號。

nG(n shift+g)將遊標移動到第n行。gg移動到第一行,G(shift+g)移動到最後一行。

命令

說明

w

到下一個單詞的開頭

e

到下一個單詞的結尾

b

到前一個單詞的開頭

ge

到前一個單詞的結尾

0或^

到行頭

$

到行尾

f<字母>

向後搜尋<字母>並跳轉到第一個匹配的位置(非常實用)

F<字母>

向前搜尋<字母>並跳轉到第一個匹配的位置

t<字母>

向後搜尋<字母>並跳轉到第一個匹配位置之前的一個字母(不常用)

T<字母>

向前搜尋<字母>並跳轉到第一個匹配位置之後的一個字母(不常用)

Ps:搜尋字元並跳轉只能在當前行內有效,不能跳轉到下一行。

 

·        普通模式中使用y複製

o   普通模式中,yy複製遊標所在的整行(3yy表示複製3行)

o   普通模式中,y^ 複製至行首,或y0。不含游標所在處字元。

o   普通模式中,y$ 複製至行尾。含光所在處字元。

o   普通模式中,yw 複製一個單詞。

o   普通模式中,y2w 複製兩個單詞。

o   普通模式中,yG 複製至文本末。

o   普通模式中,y1G 複製至文本開頭。

·        普通模式中使用p粘貼

o   普通模式中,p(小寫)代表粘貼至游標後(下)

o   普通模式中,P(大寫)代表粘貼至游標前(上)

替換和撤銷(Undo)命令

替換和Undo命令都是針對普通模式下的操作

命令

說明

r+<待替換字母>

將遊標所在字母替換為指定字母

R

連續替換,直到按下Esc

cc

替換整行,即刪除遊標所在行,並進入插入模式

cw

替換一個單詞,即刪除一個單詞,並進入插入模式

C(大寫)

替換遊標以後至行末

~

反轉遊標所在字母大小寫

u{n}

撤銷一次或n次操作

U(大寫)

撤銷當前行的所有修改

Ctrl+r

redo,即撤銷undo的操作

 

普通模式下直接輸入>>或<<,相當於在游標處之前的地方加一個Tab(又叫跳格符或定位字元),多用於在代碼檔案中調整格式用。

我們可以自己調整Tab的寬度,只要在命令模式下輸入:set shiftwidth=10 ,將一個Tab的距離設定成10個字元的寬度,但只是改>>的寬度,並不能改編輯模式下的Tab寬度,編輯模式下的一個Tab通常預設的是8個字元寬。

 

關於尋找

普通模式下輸入/然後鍵入需要尋找的字串按斷行符號後就會進行尋找。。與/功能相同,只不過。是向上而/是向下尋找。進入尋找之後,輸入n和N可以繼續尋找 n表示繼續尋找,N反向尋找。

普通模式下輸入\*尋找遊標所在處的單詞

普通模式下輸入\#同上,但 \* 是向前(上)找,#則是向後(下)找

普通模式下輸入g\*同\* ,但部分符合該單詞即可

普通模式下輸入g\#同\# ,但部分符合該單詞即可

 

恢複文檔與加密文檔

如果因為斷電等原因造成文檔沒有儲存,可以採用恢複方式,vim -r進入文檔後,輸入:ewcover 1.txt來恢複

 

$ vim -x file1

如果檔案之前沒有密碼,則會需要輸入您的密碼再輸入一次確認密碼,這樣在下一次開啟時,vim就會要求你輸入密碼。

如果需要解除檔案密碼,則輸入正確密碼進入檔案,在命令模式裡輸入:set key= 這樣就沒有密碼了。還有一個更簡單的直接:X 一直按斷行符號就好了,也就是給空密碼。

可視模式

在普通模式下輸入v(小寫),進入字元選擇模式,就可以移動游標,游標走過的地方就會選取。再次按下v會後就會取消選取。

在普通模式下輸入Shift+v(小寫),進入行選擇模式,按下V之後就會把整行選取,您可以上下移動游標選更多的行,同樣,再按一次Shift+v就可以取消選取。

在普通模式下輸入 Ctrl+v(小寫),這是地區選取項目模式,可以進行矩形地區選取項目,再按一次Ctrl+v取消選取。

在普通模式下輸入d刪除選取地區內容

在普通模式下輸入y複製選取地區內容

  Shell編程

變數相關

env是查看環境變數,而set是查看當前所有變數(包括使用者自訂的變數)。自訂變數中用的最多、看的最多的其實是SP1變數,我們可以用set查看一下,env是不能看到的,因為它不是環境變數。SP1變數儲存的就是使用者命令提示字元。

 

Locale命令是查看當前系統語系,主要看LANG和LC_ALL的變數。

LANG:定義系統主語系的變數

LC_ALL:定義整體語系變數

對於這兩個變數可以粗略的理解成LANG是當前的語系(臨時的),而LC_ALL是總體的語系,重啟後當前語系將恢複成LC_ALL的值。

 

$?,表示上一個命令執行的結果,0為真(正常執行),非零為假(執行失敗)。

$n,n是正整數,$0是代表命令本身,$1-$9分別代表參數1到參數9,例:./hello.shabc 11 22,./hello.sh是命令本身(執行一個hello.sh的指令碼)為$0,後面的abc是第一個參數$1,11和12分別是第二和第三個參數,即$2和$3。在實際的shell程式裡面,可以直接用$n的值。如果參數大於10個需要大括弧,如${10}。

$*,代表所有參數,把所有參數看為一個整體。如上面的例子裡面$*的值為abc 11 22。

$@,也代表所有參數,但和$*不同的是,在使用時是區別開的,即一個一個使用。

$#,代表的是參數個數。

例子:

#/bin/bash

#this file is plus.sh

Sum=(($1 + $2))

echo $Sum

echo $*

echo $@

echo $#

執行這個指令碼:./plus.sh11 22

結果:

33

11 22

11 22

2

 

例2:

#!/bin/bash

#this file is for.sh

for i in "$*"

        do

                echo $i

        done

 

for j in "$@"

        do

                echo $j

        done           

執行指令碼:./for.sh1 2 3 4

結果:

1 2 3 4

1

2

3

4

 

read命令(非常實用的命令):

參數:-p “提示資訊”  ------在讀入一個值之前,輸出一些提示資訊

-t 秒數  -------指定等待使用者輸入的最大時限

-n 數字  -------指定讀入最大字元數

-s  --------隱藏使用者輸入,類似使用者登入時輸入密碼的效果 

 

測試語句

1、        按檔案類型進行判斷

-b        判斷檔案是否存在,並且是否為塊裝置檔案

-c        判斷檔案是否存在,並且是否為字元裝置檔案

-d        判斷檔案是否存在,並且是否為目錄檔案(是目錄檔案為真)

-e        判斷檔案是否存在(存在為真)

-f         判斷檔案是否存在,並且是否為普通檔案

-L        判斷檔案是否存在,並且是否為連結檔案

-p        判斷檔案是否存在,並且是否為管道檔案

-s        判斷檔案是否存在,並且是否為非空(是非空為真)

-S        判斷檔案是否存在,並且是否為通訊端檔案

 

2、        按照檔案許可權判斷

-r         判斷檔案是否存在,並且擁有讀許可權

-w       判斷檔案是否存在,並且擁有寫入權限

-x        判斷檔案是否存在,並且擁有執行許可權

-u        判斷檔案是否存在,並且擁有SUID許可權

-g        判斷檔案是否存在,並且擁有SGID許可權

-k        判斷檔案是否存在,並且擁有SBit許可權

 

3、        兩個檔案之間進行比較

檔案1 -nt 檔案2         判斷檔案1的修改時間是否比檔案2的新

檔案1 -ot 檔案2         判斷檔案1修改該時間是否比檔案2的舊

檔案1 -ef 檔案2          判斷檔案1是否和檔案2的inode號一致,可以理解為兩個檔案是否為同一個檔案。通常用於判斷永久連結。

 

4、        兩個整數之間比較

整數1 -eq 整數2         判斷兩數是否相等

整數1 -ne 整數2         判斷兩數是否不相等

整數1 -gt 整數2          判斷整數1是否大於整數2

整數1 -lt 整數2           判斷整數1是否小於整數2

整數1 -ge 整數2         判斷整數1是否大於等於整數2

整數1 -le 整數2          判斷整數1是否小於等於整數2

eq是equal的縮寫  ne是 not equal的縮寫  gt是great than的縮寫  lt是less than的縮寫  ge是great thanor equal to的縮寫  le是less than equal to的縮寫

 

5、        字串的判斷

-z 字串           判斷字串是否為空白

-n 字串           判斷字串是否為非空

字串1 == 字串2          判斷兩個字串是否相等

字串1 =! 字串2           判斷兩個字串是否不等

 

6、        多重條件判斷

判斷1 -a 判斷2           邏輯與,兩個都成立結果為真

判斷1 -o 判斷2           邏輯或,有一個為真,即結果為真

。判斷          邏輯非,將判斷結果取反

 

兩種判斷格式

l  test -e /root/install.log

l  [ -e /root/install.log ] 推薦使用這種

 

if語句

if [ 條件判斷式 ];then

      條件成立執行的語句

      else

      不成立時執行的語句

fi

或者

if [ 條件判斷式 ]

      then

      條件成立時執行的語句

      else

      條件不成立時執行的語句

Fi

 

case語句

基本格式:

case $變數名 in

      “值1”)

           如果變數的值等於值1,則執行程式1

           ;;

      “值2”)

           如果變數的值等於值2,則執行程式2

           ;;

      *)

           如果變數的值都不是以上的值,則執行此程式碼

           ;;

esac

 

for語句

文法一、

for 變數 in值1 值2 值3…..

      do

           程式

      done

文法二、

for(( 初始值;迴圈控制條件;變數變化 ))

      do

           程式

      done

文法二類似c語言的for迴圈

 

while迴圈和until迴圈

while [ 條件判斷式 ]

      do

           程式

      done

只要條件判斷式成立,就開始迴圈。

通常在程式碼裡,應該有可以退出迴圈的控制語句。

 

Until迴圈和while迴圈相反,只要條件判斷式不成立就開始迴圈。一旦迴圈條件成立時,則迴圈終止。

 

 

  Linux下$()與${}、$(())詳解 一、關於$()

其實$()與``(反勾號)的作用相同,都是用來做命令替換用的,也就是用來重組命令列的。裡麵包含的必須是一個命令語句。

在實際使用中,command line裡面出現$(),會先執行$()裡面的命令語句。比如:

echo today is $(date)!我們知道date命令是列印當前的時間,那麼先執行date命令,在通過echo命令將整個句子結果列印到標準輸出,結果是:today is Sun Oct 1820:24:31 CST 2015!

當然整句命令可以替換成:echotoday is `date`!結果完全一樣。

 

$()與``比較

優點:$()可以很好的與’’(單引號)區別開來,實際使用直觀可讀性好。

缺點:可移植性沒有``好,``基本可用在其他所有shell中。

  二、關於${}

先看例子:

先定義一個變數A=he,現在想要輸出hello,我們可以echo $Allo,這是你會發現輸出的是空,原因就是shell會把你的變數識別成$Allo而不是$A+llo,而$Allo是一個沒有賦值的變數,當然會輸出空。現在我們改一下echo ${A}llo,此時得到hello正確結果。顯然${}是變數的定界符,標明變數名的長度界限,增強可讀性。其實我們平常寫的$A只是${A}的簡寫形式,在shell script裡面,應盡量避免用簡寫形式,這樣可以大大減少出錯。

 

${}如果僅僅只是起到定界符的作用,那就太小看它了,以下是它的一些特殊並常用的用法樣本:

假設我們定義了一個變數為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}拿掉第一個.  及其左邊的字串:file.txt
${file##*.}拿掉最後一個.  及其左邊的字串:txt
${file%/*}拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}拿掉最後一個.  及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}拿掉第一個.  及其右邊的字串:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.