Linux第二天笔记

一、Linux文本编辑
   vi的三种模式     命令行模式 插入模式 底行模式
       1、命令行模式   
           设置vi   set nu              显示行号
                       set ruler           显示光标位置
                       set nudolevel       显示光标位置
                       set smartindent     智能缩进
                       syntax on(或sun on) 语法高亮
          开始编辑命令: a          在光标后输入文本
                                 A          在当前行末尾输入文本
                                 i          在光标前输入文本
                                 I          在当前行开始输入文本
                                 o          在当前行后输入新一行
                                 O          在当前行前输入新一行 
           删除命令:    x          删除光标所在的字符
                              dd          删除当前行
                             ndd         删除当前行开始的n行
          改变与替换操作命令:r     替换光标所在的字符
                                          R     替换字符序列
                                         c$    替换自光标位置至行尾的所有字符
                                         C     同c$
                                         cc    替换当前行
             查询命令:   /abc      向后查询abc
                               ?abc      向前查询abc
                                n         向后继续查询
                                N         向前继续查询
            拷贝和粘贴命令:/yw     将光标所在单词拷入剪贴板   
                                        y$     将光标至行尾的字符拷入剪贴板
                                        Y      同y$
                                        yy     将当前行拷入剪贴板
                                      nyy     复制当前开始往后的n行
                                        p      将剪贴板中的内容粘贴在光标后
                                        P      将剪贴板中的内容粘贴在光标前
        文件保存及退出命令::q                 不保存退出
                                        :q!                不保存强制性退出
                                        :w                 保存编辑  
                                        :w filename        保存到文件 filename 中 
                                        :w! filename       强制性存入文件 filename 中
                                        :wq                保存退出
                                        :x                 同 :wq
                                         ZZ                 同 :wq
              其他命令:    nG                 跳到第n行
                                   G                 跳到最后一行
                                  gg                 跳到第一行
                                  u                 撤销
                                   .                 重做
                                 :s/old/new             替该该行第一个old为new
                                 :s/old/new/g           可以替换全行中所有的old为new
                                 :#,#s/old/new/g        替换两行之间出现的old为new,#,#为两行的行号
                                 :%s/old/new/g          或者 1,$s/old/new/g  替换全文的old为new
                                 :%s/old/new/gc         全文替换前需确认
       2、插入模式:在命令模式下输入(i,I,o,O,a,A等),可进入输入模式,输入模式下按ESC,可返回命令模式。
       3、底行模式:将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。
二、shell脚本基础
       1、shell基本元素:
                    (1)#! /bin/bash    必须的,指出shell的类型
                    (2)# 注释
                    (3)变量
                    (4)控制
       2、shell脚本:   shell可以读取这个文件并执行其中的命令。这样的文件被称为脚本文件。
       3、创建和执行:  用任何编辑器比如vi在文本文件中编写脚本,以.sh为后缀名保存文件。
                                 将文件赋予可执行的权限
                                 执行脚本命令:
                       1)bash 文件名      bash run.sh
                       2) ./文件名   在当前目录下写明路径执行,要求文件必须有执行权限   chmod 755 run.sh  ./run.sh
      
                 echo 要显示的内容              用于在屏幕上显示消息
                              #                 用于在shell脚本中进行注释
       4、shell中的特殊符号:
               反斜线\      反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。
               美元符$      与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来。
               单引号''     被引起的字符全部做普通字符,即全部原样。
               双引号""     引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。
               倒引号``     引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
       5、变量:  局部变量:
                       赋值:本地变量 在用户现在的shell生命期的脚本中使用
                             变量名=值       declare -i 变量名
                             注意:
                             (1)等号两边不可以有空格
                             (2)取值包含空格,必须用双引号括起来
                             (3)Shell变量可以用大小写字母,区分大小写
                       使用: $变量名   
                                 ${变量名}
                                  变量名为1个字符时建议使用方式一,多余一个字符时建议使用方式二
                       引用:变量名=${变量名}
                    显示变量: echo命令可以显示单个变量取值,变量名前加$
                    清除变量: unset 变量名
                    设置只读变量: readonly 变量名            readonly 变量名=值
                    环境变量: 
                        env                     显示所有的环境变量
                        export 变量名           把变量变成全局变量
                        echo $环境变量名        显示一个变量
                    内部变量:  这类变量在程序中用来作出判断。在shell程序内这类变量的值是不能修改的。
                        $#                     传送给shell程序的位置参数的数量
                        $?                     最后命令的完成码或者在shell程序内部执行的shell程序(返回值)
                        $0                     shell程序的名称
                        $*                     调用shell程序时所传送的全部参数的单字符串,“参数1”“参数2”…形式保存的参数
                        $n                     第n个参数
       6、变量表达式:
                  expr 值+值                     将在屏幕上显示两值之和
                  $((.....))                     可以在$((...))中包括一个表达式     
               条件判断命令: test n1 -参数 n2        或 test 表达式 -参数 表达式
                             或[ n1 -参数 n2 ]       真返回0,假返回1(切记空格)
                             参数:
                                   -lt(less than)    小于
                                   -le(less than or equalto)    小于等于
                                   -gt(greet than)    大于
                                   -ge(greet than or equal to)    大于等于
                                   -eq(equal to)   等于
                                   -ne(not equal to)    不等于
               文件测试: test -参数 "文件"           [ -参数 "文件名" ]
                                参数:  -f            存在且是普通文件
                                           -d            存在且是目录
                                            -s            存在且字节数大于0
                                            -r            存在且可读
                                           -w            存在且可写
                                           -x            存在且可执行
               字符串测试:  test s              字符串s非空
                                    test s1=s2          字符串s1等于s2
                                    test s1!=s2         字符串s1不等于s2 
                                    test  -z  s         字符串长=0,即为空串
                                    test -n s           字符串长>0 
                                    =:       等于则为真
                                   !=:       不相等则为真
                          -z字符串:       字符串长度为零则为真
                          -n字符串:       字符串长度不为零则为真
                其他参数:
                       与     或     非
                       &&     ||     !
                       -a     -o     !
                      [ n1 -gt n2 -o n1 -eq n2 ]
       7、控制流程
                 分支语句:
                     if:    if [ $# -eq 0 ]
                             then
                                 echo "输入了0个参数"
                             elif [ $# -gt 1 ]
                             then 
                                 echo "输入了多个参数"
                             else 
                                 echo "输入了1个参数"
                             fi               
                    case:   case "$#" in
                                0) echo "输入了0个参数" ;;
                                1) echo "输入了1个参数" ;;
                                *) echo "输入了多个参数";; 

                             esac
                             每个分支条件后必须以两个分号结尾
                  循环语句:
                     while: 只有条件为真时,就执行do和done之间的命令
                             while <条件>
                             do 
                                <命令(s)>
                             done 
                             while例子——求1到100的和
                             declare -i i=1
                             sum=0
                             while [ $i –le 100 ]
                             do
                                 sum=$[$sum+$i]
                                 i=$[$i+1]
                             done
                             echo $sum
                      for:  for循环取一列值作为输入并对循环中每个值执行循环
                             for variable_name in <list_of_values>
                             do
                             ...
                             done
                             for例子——1到9都乘10后输出
                             for i in `seq 1  9`
                             do
                                 echo `expr $i \* 10`  或写 echo $(expr $i \* 10) 乘号前加转义符,与数字间要有空格。
                             done
                    until:   循环模式与while循环相反,执行循环体直到条件为真
                             until <条件>
                             do 
                                <命令(s)>
                             done
             break: 结束全部循环              continue:结束本次循环进入下次循环
       8、read变量:   在执行shell脚本时,shell还允许用户从键盘中输入一个值给变量。可以使用read命令来做。
                   read name
                   read 变量1 [变量2 …]    可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。
                                                      如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;
                                                      如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。 
                            例: 输出a到b序列数各数的10倍数
                               read a b
                               for i in `seq $a $b`
                               do
                               echo `expr $i \* 10`
                               done
       9、命令结果重定向:
             (1)    cp /etc/my.conf  >/dev/null  2>&1
                      /dev/null  空设备 垃圾箱
                   此句命令的结果是:
                      cp命令没有目标文件,应该输出错误。 
                      2>&1表示错误重定向指向标准输出。两个输出输出到一个地方。
                      >/dev/null又使标准输出重定向到垃圾箱,就是不要输出信息 
             (2) 1)command >file 2>file
                   2)command >file 2>&1 
                   有什么区别? 
                    1)的写法,stdout(标准输出)和stderr(标准错误)都直接送到file中, 会出现两个同抢占file的管道,file会被打开两次,stdout和stderr输出的信息会互相覆盖。
                    2)的写法将stdout直接送向file, stderr继承1的管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
                    从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,常用command > file 2>&1 这样的写法。
             (3) cat <file1>file2 file1读入数据然后写入file2
                   cat <file>file 文件內容会被洗掉 
                   cat file 此处会没有内容
                   stdout、stderr 的管道先准备好才会从stdin读内容
                   > file 会先清空 file,然後才读进 < file ,但此时file已被清空,因此再重定位读进file的为空,最后cat显示的file就成空了
       10、计算命令的开始到结束之间的时间       
               time find /etc -name "passwd" 2>/dev/null   计算寻找etc目录下的passwd文件并将标准错误输出到垃圾箱的时间
       11、管道
               垂直条(|)是管道字符,它指示shell:'|'前面的命令的输出作为'|'之后命令的输入发送

               ls -l | more

        12、命令聚合:

                CMD1;CMD2;CMD3;CMD4               依次执行CMD1~CMD4指令
                CMD1&&CMD2                        CMD1执行成功才执行CMD2
                CMD1||CMD2                        CMD2执行失败才执行CMD2

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值