06_03_bash腳本編程之五 字符串測(cè)試及for循環(huán) 07_01_vim編輯器詳解

字符串測(cè)試:

? ? == : 測(cè)試是否相等, 相等為真, 不等為假

? ? != : 測(cè)試是否不等, 不等為真, 等為假

>

<

? ? -n string : 測(cè)試指定字符串是否為空, 空則真,不空則假

? ? -z string : 測(cè)試指定字符串是否不空,不空為真, 空則為假

練習(xí):傳遞一個(gè)用戶名參數(shù)給腳本,判斷此用戶的用戶名跟其基本組的組名是否一致,并將結(jié)果顯示出來(lái)。


#!/bin/bash

#

if [ $# -eq 0 ]; then

? ? echo 'usage: need a variable.'

? ? exit 8

fi

? ? USERID=`id -u $1`

? ? GROUPID=`id -g $1`

if [ $USERID -eq $GROUPID ]; then

? ? ? ? USERNAME=`id -u -n $1`

? ? ? ? GROUPNAME=`id -g -n $1`

? ? ? ? echo "username is$USERNAME"

? ? ? ? echo "groupname is$GROUPNAME"

fi


或者:


#!/bin/bash

#

if [ $# -eq 0 ]; then

? ? echo 'usage : need a variable.'

? ? exit 8

fi

if ! id $1 &> /dev/null; then?

? ? echo "No usch user."

? ? exit 10

fi

if [ `id -n -u $1` == `id -n -g $1` ]; then

? ? echo 'username == groupname'

else

? ? echo 'username != groupname'

fi


循環(huán) : 進(jìn)入條件,退出條件

for

while

until

for 變量 in 列表; do

? ? 循環(huán)體

done

{1..100}

seq [起始數(shù)][步進(jìn)數(shù)][結(jié)束數(shù)]

起始數(shù)和步進(jìn)數(shù)可以省略

練習(xí):寫一個(gè)腳本傳遞一個(gè)參數(shù)(單字符就行)給腳本,如參數(shù)為q,就退出腳本;否則,就顯示用戶的參數(shù);


#!/bin/bash

#

if [ $1 = 'q' ]; then

? ? exit 0

else

? ? echo $1

fi


練習(xí):寫一個(gè)腳本傳遞一個(gè)參數(shù)(單字符就行)給腳本,如參數(shù)為q、Q、quit或Quit,就退出腳本;否則,就顯示用戶的參數(shù);


#!/bin/bash

#

if [ $1 = 'q' ]; then

? ? exit 1

elif [ $1 = 'Q' ]; then

? ? exit 2

elif [ $1 = 'quit' ]; then

? ? exit 3

elif [ $1 = 'Quit' ]; then

? ? exit 4

else

? ? echo $1

fi


練習(xí):傳遞三個(gè)參數(shù)給腳本,第一個(gè)為整數(shù),第二個(gè)為算術(shù)運(yùn)算符,第三個(gè)為整數(shù),將計(jì)算結(jié)果顯示出來(lái),要求保留兩位精度。形如:./calc.sh 5 / 2

#!/bin/bash

#

echo "scale=2;$[$1$2$3]" | bc

練習(xí):傳遞3個(gè)參數(shù)給腳本,參數(shù)均為用戶名。將此些用戶的帳號(hào)信息提取出來(lái)后放置于/tmp/testusers.txt文件中,并要求每一行行首有行號(hào)。

#!/bin/bash

#

if [ $# -ne 3 ]; then

? echo "Please input three

numbers."

? exit 10

elif [ $1 -ge $2 ]; then

? MAX=$1

? MIN=$2

else

? MAX=$2

? MIN=$1

fi

if [ $3 -gt $MAX ]; then

? MAX=$3

elif [ $3 -lt $MIN ]; then

? MIN=$3

fi

echo "The MAX is $MAX,the MIN is $MIN."

寫一個(gè)腳本:

1

、設(shè)定變量FILE的值為/etc/passwd

2

、依次向/etc/passwd中的每個(gè)用戶問(wèn)好,并顯示對(duì)方的shell,形如:

Hello, root, your shell: /bin/bash

3

、統(tǒng)計(jì)一共有多少個(gè)用戶

for I in `seq 1 $LINES`; do echo "Hello, `head -n $I /etc/passwd |tail -1 | cut -d: -f1`"; done

只向默認(rèn)shell為bash的用戶問(wèn)聲好


#!/bin/bash

#

FILE=/etc/passwd

LINES=`wc -l /etc/passwd | cut -d' ' -f1`

for I in `seq 1 $LINES`; do

? ? echo "hello,`head -n $I

/etc/passwd | tail -1 | cut -d: -f1`,you shell:`head -n $I /etc/passwd | tail

-1 | cut -d: -f7`";

done

echo "The users number is $LINES."

07_01_vim編輯器詳解

vim編輯器:文本編輯器,字處理器,處理ASCII


其他編輯器:nano, sed


vi: Visual Interface

vim: VI iMproved


vi特點(diǎn):全屏編輯器,模式化編輯器


vim模式:

編輯模式(命令模式)

輸入模式

末行模式


模式轉(zhuǎn)換:

編輯-->輸入:

?i:?在當(dāng)前光標(biāo)所在字符的前面,轉(zhuǎn)為輸入模式;

?a:?在當(dāng)前光標(biāo)所在字符的后面,轉(zhuǎn)為輸入模式;

?o:?在當(dāng)前光標(biāo)所在行的下方,新建一行,并轉(zhuǎn)為輸入模式;


?I:在當(dāng)前光標(biāo)所在行的行首,轉(zhuǎn)換為輸入模式

????????A:在當(dāng)前光標(biāo)所在行的行尾,轉(zhuǎn)換為輸入模式

????????O:在當(dāng)前光標(biāo)所在行的上方,新建一行,并轉(zhuǎn)為輸入模式;


輸入-->編輯:??ESC

編輯-->末行:”:“

末行-->編輯:??ESC, ESC


一、打開(kāi)文件

# vim /path/to/somefile

?vim +# :打開(kāi)文件,并定位于第#行

?vim +:打開(kāi)文件,定位至最后一行

?vim +/PATTERN :?打開(kāi)文件,定位至第一次被PATTERN匹配到的行的行首


?打開(kāi)文件后默認(rèn)處于編輯模式


二、關(guān)閉文件

1、末行模式關(guān)閉文件

:q?退出

:wq?保存并退出

:q!?不保存并退出

:w?保存

:w!?強(qiáng)行保存

? ? :wq --> :x

? ? :x 如果文件沒(méi)有修改,直接退出;如果有修改,則保存后退出

2、編輯模式下退出

ZZ:?保存并退出


三、移動(dòng)光標(biāo)(編輯模式)

1、逐字符移動(dòng):

?h:?左

?l:?右

?j:?下

?k:?上

?#h:?移動(dòng)#個(gè)字符;


2、以單詞為單位移動(dòng)

?w:?移至下一個(gè)單詞的詞首

?e:?跳至當(dāng)前或下一個(gè)單詞的詞尾

?b:?跳至當(dāng)前或前一個(gè)單詞的詞首


?#w:


3、行內(nèi)跳轉(zhuǎn):

?0:?絕對(duì)行首

?^:?行首的第一個(gè)非空白字符

?$:?絕對(duì)行尾


4、行間跳轉(zhuǎn)

?#G = #gg:跳轉(zhuǎn)至第#行;

?G:最后一行

? ? ? ? ?gg:第一行

?末行模式下,直接給出行號(hào)即可


四、翻屏

Ctrl+f:?向下翻一屏

Ctrl+b:?向上翻一屏


Ctrl+d:?向下翻半屏

Ctrl+u:?向上翻半屏


五、刪除單個(gè)字符

x:?刪除光標(biāo)所在處的單個(gè)字符

#x:?刪除光標(biāo)所在處及向后的共#個(gè)字符


六、刪除命令: d

d命令跟跳轉(zhuǎn)命令組合使用;

#dw, #de, #db,#d$,#d0,#d^

#df@, #dt@


dd:?刪除當(dāng)前光標(biāo)所在行

#dd:?刪除包括當(dāng)前光標(biāo)所在行在內(nèi)的#行;


末行模式下:

StartADD,EndADDd

?.:?表示當(dāng)前行

?$:?最后一行

?+#:?向下的#行

e.g: 1,8d; 1,.d; 1,$d; 3,+23d; .,+3d, -3, $d, .,$-2d ? ? ? ?

七、粘貼命令?p

p:?如果刪除或復(fù)制為整行內(nèi)容,則粘貼至光標(biāo)所在行的下方,如果復(fù)制或刪除的內(nèi)容為非整行,則粘貼至光標(biāo)所在字符的后面;

P:?如果刪除或復(fù)制為整行內(nèi)容,則粘貼至光標(biāo)所在行的上方,如果復(fù)制或刪除的內(nèi)容為非整行,則粘貼至光標(biāo)所在字符的前面;


八、復(fù)制命令?y

?用法同d命令


九、修改:先刪除內(nèi)容,再轉(zhuǎn)換為輸入模式

?c:?用法同d命令


十、替換:r

R:?替換模式


十一、撤消編輯操作?u

u:撤消前一次的編輯操作

?連續(xù)u命令可撤消此前的n次編輯操作,vi只保存了此前的50次操作

#u:?直接撤消最近#次編輯操作


撤消最近一次撤消操作:Ctrl+r


十二、重復(fù)前一次編輯操作

.


十三、可視化模式

v:?按字符選取

V:按行選取

ctrl+v:按矩形選取


十四、查找

/PATTERN:向下查找

?PATTERN:向上查找

?n:下一個(gè)查找結(jié)果

?N:上一個(gè)查找結(jié)果


十五、查找并替換

在末行模式下使用s命令,格式同sed一樣

ADDR1,ADDR2 s@PATTERN@string@gi

1,$:全文范圍

%:表示全文,等于 1,$

g:全局替換

i:忽略大小寫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容