Linux学习笔记(三)vim与shell script

来源:互联网 发布:达达乐队知乎 编辑:程序博客网 时间:2024/06/06 07:40

vim程序编辑器

◆vim(程序编辑)是vi(文本编辑)的晋级版。

vi有一般模式(可删除、复制粘贴)、编辑模式(可编辑)、命令模式(执行保存、离开vi等命令)。

【vi 文件名】 打开一个旧文件或新建一个文件并打开,(当文件原本不存在时,新建后若不进行编辑就离开,系统不会保存该文件vivimnano都一样)进入一般模式,在最后一行的命令行中会显示文件状态、文件行数及字符数,以及光标所在坐标;

一般模式下按下i、o、a进入编辑(insert)模式,或r(replace),即可编辑文件,esc退出编辑模式;

一般模式下按 :/ ? 进入命令行模式——编辑模式跟命令模式之间不能直接切换。

/和?后跟关键字用来查询文本中的字。

:wq(保存并离开) :wq!强制后自行  ZZ若文件没更动不保存离开,否则保存离开

yy复制光标所在行;p,P粘贴;dd删除光标所在行;nG光标移至第n行;:set nu显示行数;u撤销前一操作。另有查找替换等功能

◆vim编辑器可以块选择(visual block)进行复制、删除操作,也可以一个vim同时打开多个文件,讲一个文件中的内容复制到另一个文件。

◆vim编辑器可以多窗口显示同一个文件或者不同文件,以方便对照不同文件:sp

dos2UNIX或UNIX2dos(windows与linux下的文件)断行格式转换(Ubuntu下apt-get installtofrodos,使用方法不是unix2dos和dos2unix了,而是todos 和fromdos了。

iconv 中文编码格式的转化(windowsI下默认big5,而linux utf8)

 

gcc、make编译程序

源码(编程语言所写的代码)在linux中经编译程序(如gcc、make)编译成可执行文件(二进制文件)——gcc针对小型个别程序,make对大量的程序编译

①用vim编辑一个.c(如hello.c)文件;

②【gcc -c .c文件】 产生对应的.o文件,即目标文件(若不加任何参数,生产默认的a.out可执行文件);

③【gcc -o 欲创建的可执行文件名 .o文件】

④在该目录下执行该可执行文件即可。

或者直接对.c文件【gcc -o 可执行文件名 .c文件】生产可执行文件而不生产.o文件。

gcc直接跟.c文件,会自动生成a.out文件作为可执行文件,gcc另一个.c文件时,a.out会被覆盖。

当c程序中的函数没有在头文件中加入时,可在编译时到函数库中寻找(p666)。

 

make自动该调用makefile(或Makefile)文件中的语句,将其中的语句当命令来执行。

Makefile文件需要自己建立,其格式如下:

 目标(target):目标文件1  目标文件2

 <tab>    要执行的命令语句         # “#”用来添加注释,执行语句前必须有<tab>

在终端用命令【make 目标】即可执行。

 

Shell Script

shell script就是用shell执行的程序,但由于用的是外部命令与bash shell的一些默认工具,所以回去调用外部函数库导致运行速度变慢。shell script通常用在管理和服务器检测上,不针对大量数据处理。

(1)编写规范:

①    脚本文件以“.sh”为拓展名;

②    如果读到一个Enter符号(CR),就尝试执行命令。故换行时用“\ enter”;

③    “#!”为开头第一行声明shell,指明文件内的语法,如#!/bin/bash;“#”为批注;

④    设置好环境变量PATH、LANG等

(2)执行方法:

①    chmod +x 给脚本文件添加可执行属性,用相对或绝对路径执行;

②    【bash shell.sh】或【sh shell.sh】(bash比较靠谱);

③    可用sh -x检查脚本文件是否有语法错误;

④    用source或“.”来执行;

⑤    ①-③都是在当前shell的子程序中进行的,故变量在执行完后释放,④则是在当前bash中执行,变量会保留。

⑥    sh -c “一串命令”可以直接在命令行运行引号内的命令,而不用写成文件

(3)脚本算术处理:

脚本中经常用到变量,对变量的操作(替换的功能,如“:-”)应熟悉。数值运算采用$((表达式))或者用“declare -i 变量名=计算式”。但脚本程序只能处理整型数据

变量名=”变量值”的方式定义变量

(4)test测试指令

test来检查文件的类型、权限、比较文件大小;字符串是否为空;整数的比较。test指令不会输出任何信息,要通过判断回传码$?来知道结果。

-e文件是否存在;-f/-d文件时普通文件还是目录;

数字比较-gt> -lt(<) -eq(=),避免不要直接用><(>在这里可能会被当做数据流重定向,而新建>后面的文件!)

-r/-w/-x是否可读可写可执行;-z 字符串是否为空;-a(and)两个条件同时成立传回0;-o(or)条件成立一个回传0;!即取反,不成立回传0。

(5)[]判断式

[_ 判断式_]语法(参数)跟test的相同,括号的边都应有空格!常量或者变量都应用“”包裹。每个变量与符号(==)或参数之间最好也加空格,否则会出现误判或语法错误。

(6)shell script 默认变量

$#:表示变量的个数

$@、$*:表示全部的变量

$n:即$1、$2、$3…$0表示该script的文件名

变量名是在执行该script文件时自定义的,如【bash sh07.sh p1 p2 p3】,则表示有三个变量(p1、p2、p3)。

shift n,n为数字(写在脚本里)表示变量偏移,即拿掉最前面的几个参数的意思。

默认变量是应用:在脚本里当做参数使用,在bash中执行该脚本时直接连同参数一起运行。

(7)if条件句

     if [ 条件1 ]then

              执行语句1

              执行语句2

elif [ 条件2];then

    转型语句…

fi

fi作为“end if”使用。[]中条件格式与[]判断式一样。if条件也可以用[]&&[]、[] ||[]来表示。

 (8)case $变量 in   #即switch语句

              取值1

        执行语句

        ;;

        取值2)

              执行语句

              ;;

              *        #即default

              执行语句

              ;;

        esac           #case倒着写

     该语句适合既定的变量内容,用户输入变量名称(默认变量或者read进去)。

  (9)function

       即函数。function 函数名(){

                                   函数体

                        }

       函数的创建一定要在引用之前!function也有内置变量$0(函数名)、$1(参数1)、$2(参数2)…,即该函数的参数,在函数体里使用,在调用函数 式直接将实参带入对应位子。实参可以是常量,也可以是其他已定义的变量。

   (10)循环

          ①while [条件成立执行循环]          ②until [条件成立跳出循环]         

               do                                do

             循环体                           循环体

               done                                                    done

 

        ③for var in con1con2…              ④for(( 初值;终值;步长))

                do                                do

                   循环体                            循环体

                done                              done

                  变量var在确定几个情况下循环,         注意有两重括号;步长可以使用i++

var第一次出现在for后面是声明了        (( ))中可以用<>、<=等

该变量,通常在循环体中使用该变量$var。

如果条件是个变量(变量内包括多个情况时),不应该加引号!否则会将所有情况当成一个情况处理!

注意变量的计算赋值(尤其是循环赋值)var1=$(($var1+$var2))

    ps:在语句中“#”后跟数据表示获得该变量的长度(字符个数、整型数的位数)

0 0