在Linux下文本編輯器有Emacs,Vim,gEdit,Nano,gvim,Eclipse,Emacs等文本編輯器,這些文本編輯器不同於Word處理器。
Vim :
gEdit:在圖形界面下使用的文本編輯器,類似於文本編輯器。
Nano:簡單易用
Eclipse:開源的軟件,IBM開發
Emacs:GNU組織的重要產品。
Vim模式化的編輯:
編輯模式,命令模式
輸入模式,插入模式
末行模式,
#vim
#vim [options] FILE1,FILE2,… 連續打開幾個文件
#vim +n FILE 處在第某行
#vim +/PATTERN /etc/inittab 打開/etc/inittab這個文件直接處在PATTERN這個行。
1.i(insert):在光標所在位置插入,光標前面 I:在當前光標所在行的行首
2.a(append):在光標所在位置插入,光標後面 A:行尾,轉換成插入操作
3.o:光標所在行的下方新打開一個行 O:在光標坐在行的上方新打開一個行
輸入模式à編輯模式:ESC
編輯模式à末行模式::
末行模式à編輯模式:ESC,ESC
1. 保存退出
:wq 保存退出
:wqall 保存多個文件
:w! 強行保存
Shift鍵+ZZ鍵保存退出
2. 不保存退出
:q 不保存退出,沒有做過任何編輯
:q! 強行退出
:qall! 強行退出所有
在Vim編輯器上如何使用光標移動:
h 表示想左側移動
j 表示向下移動
k 表示向上移動
l 表示向右移動
先輸入一個數值,然後再輸入光標移動字母例如5h,表示向左移動5給字符。
w:跳到在下一個單詞的詞首
e:跳到單詞的詞尾 <--à b:跳到單詞的詞首
(左小括號向前跳一句 <–-> )右小括號向後跳一句
{ 向左跳一段 }右跳一段
0:絕對行首 ßà$:絕對行尾
^:行首的第一個非空白字符
行間跳轉:
G:跳到文件的最後一行
nG:跳到第n行
在末行模式下可以通過輸入數字跳轉到某行
如何進行翻屏:
Ctrl+f向文件尾部翻一屏 ßà Ctrl+b向文件首部翻一屏
Ctrl+d向文件尾部翻半屏 Ctrl+u向文件首部翻半屏
c:跟跳轉命令一起使用
C:刪除光標所在行
cc:刪除光標所在的行,並轉入到編輯模式
x:相當於Backspace
5x:相當於刪除5個字符
X:表示刪除光標前的內容
刪除指定內容:
d
dd 刪一行
ndd 刪除n行
替換
r replace
大寫R表示到進入到替換模式
撤銷操作
u:取消最近一次的編輯操作
nu:撤銷最近幾次的操作
Ctrl+r表示重做上一個動作
. 重複前一個動作
複製和粘貼:
y: yank
y$
yy 複製本行
nyy 複製光標所在的向下n行(包含所在那一行)
p:將已複製的數據在光標下一行粘貼
P:將複製的數據在光標的上一行粘貼
剪切爲先用d刪除,然後在粘貼
可視化模式:
v按字符選取
V按行選取
查找:
/keyword
?keyword
n/N表示下一個
替換:substitude
在末行模式下:
:ADDR1,ADDR2s/from/to/flags
:表示末行模式下
ADDR1表示開始的行
ADDR2表示結束的行
m,n表示從m到第n行
1,$表示從第一行到最後一行
.,$ 表示從當前行到最後一行
.,+8表示從當前行到第8行
1,$-1表示從第一行到倒數第2行
%表示全文搜索
s表示搜索
/from表示需要替換的字符
/to 表示替換的字符
/flags 表示動作修正符 -i:表示忽略大小寫 –g表示都替換
例如: :.,+8/a/A/g
同時打開多個vi,打開多個文章,則可以在末行模式下使用如下命令進行切換
:next下一個
:last 最後一個
:first 第一個
:prev 前一個
分割窗口:
Ctrl+w, s 水平分割
Ctrl+w, v 垂直分割
Ctrl+w, Arrow Arrow 方向鍵進行切換
Ctrl+w, t
Ctrl+w, b
自動縮進:
:set autoindent
:set noai
語法高亮:
syntax on|off
搜索高亮:
:set hlsearch
分割窗口顯示多個文件:
#vim –o FILE1 FILE2 水平分割
#vim –O FILE1 FILE2 垂直分割
設定vim的工作特徵:
:set nu
:set nonu
vim 的配置文件:全局/etc/vimrc 可以在vim編輯
個人~/.vimrc
Bash的算術運算:
+
-
*
/
%
在shell下使用let 使用算術表達式:
1、 let expression
[root@localhost ~]# type let
let is a shell builtin
[root@localhost ~]# clear
[root@localhost ~]# let A=2*88
[root@localhost ~]# echo $A
176
2、#$[expression]
[root@localhost ~]# A=$[3+7]
3、#$((expression))
Practice1:求100以內的和。
1 #/bin/bash
2 #
3 declare -i SUM=0
4 for I in {1..100};do
5 SUM=$[$SUM+$I]
6 done
7
8 echo "The SUM is :$SUM"
9 unset SUM
語句的邏輯運算:
&&與運算
statement 1 && statement2 如果statement1執行成功,則statement2執行;如果statement 1爲執行失敗,則statement不執行。
||或運算
expression1 || expression 如果expression1執行成功,則不執行expression2;如果expression1執行不成功,則expression2執行;
! 非運算
!expression
例子:
[root@localhost ~]# ping -c1 -W1 172.16.0.1 &> /dev/null && echo "172.16.0.1 online" || echo "172.16.0.1 offline"
172.16.0.1 online
[root@localhost ~]# ping -c1 -W1 172.16.0.7 &> /dev/null && echo "172.16.0.1 online" || echo "172.16.0.1 offline"
172.16.0.1 offline
Practice2:求100以內偶數的和,提示:seq的幫助
1 #!/bin/bash
2 #
3 declare -i SUM=0
4 for I in `seq 2 2 100`;do
5 SUM=$[$SUM+$I];
6 done
7
8 echo "The SUM is $SUM"
1 #!/bin/bash
2 #
3 declare -i SUM=0
4 for I in `seq 2 2 100`;do
5 let SUM=$SUM+$I 或SUM=$(($SUM+$I))
6 done
7
8 echo "The SUM is $SUM"
1 #!/bin/bash
2 #
3 declare i SUM=0
4 for I in {1..100};do
5 M=$[$I%2]
6 if [ $M -eq 0 ];then
7 SUM=$[$SUM+$I]
8 fi
9 done
10
11 echo "Successfully Sum is: $SUM".
12
13 unset SUM
使用判斷來進行100以內偶數的相加。
+= -= *= /= %= 在原有的基礎上加,減,乘,除。
即SUM=SUM+1 SUM+=1;
SUM=SUM-1 SUM-=1;
SUM=SUM*2 SUM*=2;
… …
SUM=SUM+1,一次進步幅度爲1,則也可以這樣表示
SUM++,++SUM 即SUM=SUM+1,SUM+=1;
SUM--,--SUM 即SUM=SUM-1
Practice:寫一個腳本:
1、添加10個用戶user1到user10,但要求只有用戶不存在的情況下才能添加;
[root@localhost ~]# for I in {1..10};do userdel -r user$I;done
1 #!/bin/bash
2 for NEWUSER in {1..10} ; do
3 ! id user$NEWUSER &> /dev/null && useradd user$NEWUSER &> /dev/null && echo "user $NEWUSER" |passwd --stdin user$NEWUSER &> /dev/null && echo "Add user user$NEWUSER suc cessfully..."
4 done
Practice:寫一個腳本:
1、通過ping命令測試192.168.0.151到192.168.0.254之間的所有主機是否在線,
如果在線,就顯示"ip is up."
如果不在線,就顯示"ip is down."
#!/bin/bash
#
MYNET=192.168.0
for I in {151..254}; do
ping -c1 -W1 $MYNET.$I &> /dev/null && echo -e "\033[32m$MYNET.$I\033[0m is on." || echo -e "\033[31m$MYNET.$I\033[0m is down."
done
unset MYNET
#!/bin/bash
#
HOST=192.168.0.254
ping -c1 -W1 $HOST &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "$HOST is up."
else
echo "$HOST is down."
Fi