欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 07_02 _bash脚本编程之六 使用脚本选项及组合条件测试【攻城狮论坛の免费分享】 有大用

十五,查找并替换 (末行模式下)

:s  用法与 sed 一模一样 

ADDR1,ADDR2S@PATTERN@string@gi

例子 image.png :.,$-1s/he/HE/g     (命令模式下)

1,$ 全文

%:表示全文 ( 简写方法 )

当前行至倒数第二行的所有的he 替换成 HE

image.png

练习将 ~/aaa.txt 中 ftp://instructor.example.com/pub替换为http://127.16.0.1/yum




%s/ftp:\/\/instructor\.example\.com\/pub/http:\/\/172.16.0.1\/yum/g

%s@ftp://instructor\.example\.com/pub@http://172.16.0.1/yum@g

image.png


十六,使用 vim 编辑器 打开多个文件

vim 可以跨文件复制 粘贴 (但是不是太方便)

vim FILE1 FILE2 FILE3

:next 切换至下一个文件

:prev 切换至前一个文件

:last 切换至最后一个文件

:first 切换至第一个文件

退出 默认情况下退出当前文件

:qa   (或者:qall)  退出所有文件



[root@ebs-22618 ~]# vim testrc.sysinit testinttab

默认情况下 显示出来的只是第一个文件

:next  (末行模式下,next 切换到下一个文件) (改变内容了 要先保存一下 :w!)

:prev  (末行模式下,prev 切换回到上一个文件)


十七,分屏显示一个文件

[root@ebs-22618 ~]# vim testrc.sysinit 

先同时按 ctrl+w ,再按s 就分屏显示了水平分割(拆分)窗口

ctrl+w,再向向下箭头,就到了下一个窗口

ctrl+w,再按上下左右箭头,就切换窗口了

先同时按 ctrl+w ,再按v 就分屏显示了垂直分割(拆分)窗口


:q 退出拆分窗口(还是当前窗口)

:qa 退出整个所有窗口


十八,分窗口编辑多个文件

vim -o File1 File2: 水平分割窗口

vim -O File1 File2: 垂直分割窗口

:q 退出当前窗口文件

:qa 退出整个所有窗口


十九,将当前文件的部分内容另存为另外一个文件

末行模式下使用w命令即可

:w 保存当前文件

:w /path/to/somefile 保存为另外一个文件

:ADDR1,ADDR2w /path/to/somefile 将某部分内容保存为另外一个文件   与sed命令类似


二十,将另个一个文件的内容填充在当前文件中

:r /path/to/somfile 在当前光标所在行的下方把 somfile的文件填充进来了    与sed命令类似


二十一,跟 shell 交互

:! COMMAND


二十二,高级话题

1,显示或取消显示行号  (命令模式下,好多特性都可以使用set命令) (末行模式)

:set number (set nu)  显示行号   (好多特性可以简写)  (这在当前进程有效)

:set nonumber (:set nonu)  取消行号 前面加 no

(可以有配置文件的,可以永久有效)


2,显示忽略或区分字符大小写

:set ignorecase(set  ic) 忽略大小写  (比如编辑模式下 搜索的时候  /aaa 会搜出aaa 和 Aaa AAA 等等吧  ) 大小写不敏感

:set noignorecase (set noic  ) 忽略大小写 (这个用得不多)  大小写敏感


3,设置自动缩进

:set autoindent (:set ai)    设置自动缩进 (在写脚本的时候可能有用)

:set noautoindent  (:set noai)         取消自动缩进

image.png


if [ $# -gt 0 ]; then

    ....

    .....

fi


4搜索时(查找到的)(搜索的时候  /abc )文本会高亮显示 

:set hlsearch (:set hls)   (h表示high,l表示light)  这里表示 高亮显示

:set nohlsearch (:set nohls)         取消高亮显示 


:set incsearch(:set is)   增量搜索,搜到结束后从头开始搜

:set noincsearch (:set nois)         取消增量搜索


5,语法高亮 比如 shell脚本 

:syntax on 语法着色 (开启语法高亮功能)

:syntax off 语法不着色 (关闭语法高亮功能)


上面的设定只对 vim 的 当前进程有效

要想永久有效的话,就要用到vim的编辑配置文件

二十三,配置文件

1),全局的,对所有的用户生效

/etc/vimrc


[root@ebs-22618 ~]# vim /etc/vimrc

image.png

image.png

 此时 用 vim 打开任意一个文件就看到行号了

2),全局的,对某个用户生效

~/.vimrc

vim ~/.vimrc    (如果没有就新建)

[root@ebs-22618 ~]# vim ~/.vimrc

image.png

此时对当前用户就是生效的了


image.png

[root@ebs-22618 ~]# vimtutor      vim导师,vim教程



按住 ctrl+Z退出时会有下面的提示信息

image.png


image.png

如果 变化不重要的话 直接 A 退出 然后 

[root@ebs-22618 ~]# rm -f .aa.txt.swp

如果 不保存退出 (非法退出的话) 就会有  swp 文件

可以使用 rm -r  aa.txt 进行恢复(把 .aa.txt.swp 恢复到 aa.txt) 再  rm -f .aa.txt.swp


image.png

image.png

[root@ebs-22618 ~]# ./addusers3.sh

image.png

[root@ebs-22618 ~]# userdel -r user10

[root@ebs-22618 ~]# userdel -r user3

image.png

[root@ebs-22618 ~]# ./addusers3.sh

image.png

写一个脚本,一下子删除user1..use10的10个用户

[root@ebs-22618 ~]# vim delusers.sh

image.png

[root@ebs-22618 ~]# chmod +x delusers.sh

[root@ebs-22618 ~]# userdel -r user5

userdel:/var/spool/mail/user5 并不属于 user5,所以不会删除

[root@ebs-22618 ~]# userdel -r user8

userdel:/var/spool/mail/user8 并不属于 user8,所以不会删除

[root@ebs-22618 ~]# ./delusers.sh

image.png

image.png

[root@ebs-22618 ~]# vim adminusers.sh

image.png

[root@ebs-22618 ~]# chmod +x adminusers.sh

[root@ebs-22618 ~]# bash -n adminusers.sh

[root@ebs-22618 ~]# ./adminusers.sh add 

[root@ebs-22618 ~]# ./adminusers.sh del

可以 改成  [root@ebs-22618 ~]# ./adminusers.sh --add 

[root@ebs-22618 ~]# ./adminusers.sh --del

里面改成  $1 == '--add'     $1 == '--del'  这样看起来就像选项了  

image.png

[root@ebs-22618 ~]# adminuser2.sh  user1,user2,user3,hello,hi


由此可以 user1,user2,user3,hello,hi 把逗号替换为空格,就会变成 user1 user2 user3 hello hi 即列表

image.png




[root@ebs-22618 ~]# ./adminuser3.sh --add user4,user5


[root@ebs-22618 ~]# ./adminuser3.sh --del user4


[root@ebs-22618 ~]# ./adminuser3.sh --help

image.png



测试:

整数测试

    -le

    -lt

    -ge

    -gt

    -eq

    -ne

字符串测试

    ==

    !=

    >

    <

    -n

    -z


文件测试

    -e

    -f

    -d

    -r

    -w

    -x

    -s 如果文件存在且非空 


if [ $# -gt 1 ]; then

组合测试条件

    -a : and 与关系 与符号 与条件

    -o :  or 或关系 或符号 或条件 并关系 关符号 并条件 

    !:  非关系(取反)  否关系 否符号 否条件

if [ $# -gt 1 -a $# -le 3 ]

if [ $# -gt 1 ] && [ $# -le 3 ]


&&  两个与符号 

|| 两个并符号


q,Q,quit,Quit

image.png

[root@ebs-22618 ~]# ./quit.sh q

Quting...

image.png




image.png







image.png


image.png

image.pngimage.png


image.png











普通分类: