06_03_bash脚本编程之五 字符串测试及for循环 07_01_vim编辑器详解

字符串测试:

    == : 测试是否相等, 相等为真, 不等为假

    != : 测试是否不等, 不等为真, 等为假

>

<

    -n string : 测试指定字符串是否为空, 空则真,不空则假

    -z string : 测试指定字符串是否不空,不空为真, 空则为假

练习:传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。


#!/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


循环 : 进入条件,退出条件

for

while

until

for 变量 in 列表; do

    循环体

done

{1..100}

seq [起始数][步进数][结束数]

起始数和步进数可以省略

练习:写一个脚本传递一个参数(单字符就行)给脚本,如参数为q,就退出脚本;否则,就显示用户的参数;


#!/bin/bash

#

if [ $1 = 'q' ]; then

    exit 0

else

    echo $1

fi


练习:写一个脚本传递一个参数(单字符就行)给脚本,如参数为q、Q、quit或Quit,就退出脚本;否则,就显示用户的参数;


#!/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


练习:传递三个参数给脚本,第一个为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位精度。形如:./calc.sh 5 / 2

#!/bin/bash

#

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

练习:传递3个参数给脚本,参数均为用户名。将此些用户的帐号信息提取出来后放置于/tmp/testusers.txt文件中,并要求每一行行首有行号。

#!/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."

写一个脚本:

1

、设定变量FILE的值为/etc/passwd

2

、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:

Hello, root, your shell: /bin/bash

3

、统计一共有多少个用户

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

只向默认shell为bash的用户问声好


#!/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特点:全屏编辑器,模式化编辑器


vim模式:

编辑模式(命令模式)

输入模式

末行模式


模式转换:

编辑-->输入:

 i: 在当前光标所在字符的前面,转为输入模式;

 a: 在当前光标所在字符的后面,转为输入模式;

 o: 在当前光标所在行的下方,新建一行,并转为输入模式;


 I:在当前光标所在行的行首,转换为输入模式

        A:在当前光标所在行的行尾,转换为输入模式

        O:在当前光标所在行的上方,新建一行,并转为输入模式;


输入-->编辑:  ESC

编辑-->末行:”:“

末行-->编辑:  ESC, ESC


一、打开文件

# vim /path/to/somefile

 vim +# :打开文件,并定位于第#行

 vim +:打开文件,定位至最后一行

 vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首


 打开文件后默认处于编辑模式


二、关闭文件

1、末行模式关闭文件

:q 退出

:wq 保存并退出

:q! 不保存并退出

:w 保存

:w! 强行保存

    :wq --> :x

    :x 如果文件没有修改,直接退出;如果有修改,则保存后退出

2、编辑模式下退出

ZZ: 保存并退出


三、移动光标(编辑模式)

1、逐字符移动:

 h: 左

 l: 右

 j: 下

 k: 上

 #h: 移动#个字符;


2、以单词为单位移动

 w: 移至下一个单词的词首

 e: 跳至当前或下一个单词的词尾

 b: 跳至当前或前一个单词的词首


 #w:


3、行内跳转:

 0: 绝对行首

 ^: 行首的第一个非空白字符

 $: 绝对行尾


4、行间跳转

 #G = #gg:跳转至第#行;

 G:最后一行

         gg:第一行

 末行模式下,直接给出行号即可


四、翻屏

Ctrl+f: 向下翻一屏

Ctrl+b: 向上翻一屏


Ctrl+d: 向下翻半屏

Ctrl+u: 向上翻半屏


五、删除单个字符

x: 删除光标所在处的单个字符

#x: 删除光标所在处及向后的共#个字符


六、删除命令: d

d命令跟跳转命令组合使用;

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

#df@, #dt@


dd: 删除当前光标所在行

#dd: 删除包括当前光标所在行在内的#行;


末行模式下:

StartADD,EndADDd

 .: 表示当前行

 $: 最后一行

 +#: 向下的#行

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

七、粘贴命令 p

p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;

P: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;


八、复制命令 y

 用法同d命令


九、修改:先删除内容,再转换为输入模式

 c: 用法同d命令


十、替换:r

R: 替换模式


十一、撤消编辑操作 u

u:撤消前一次的编辑操作

 连续u命令可撤消此前的n次编辑操作,vi只保存了此前的50次操作

#u: 直接撤消最近#次编辑操作


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


十二、重复前一次编辑操作

.


十三、可视化模式

v: 按字符选取

V:按行选取

ctrl+v:按矩形选取


十四、查找

/PATTERN:向下查找

?PATTERN:向上查找

 n:下一个查找结果

 N:上一个查找结果


十五、查找并替换

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

ADDR1,ADDR2 s@PATTERN@string@gi

1,$:全文范围

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

g:全局替换

i:忽略大小写

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容