在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