字符串測(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:忽略大小寫