登录

注册

EN

高能物理实验新手入门手册(二)

发布日期:2023-11-16 作者:李丛宇等 编辑:内容维护管理员 来源:

#lctp2021.051301#

李丛宇1 柴新宇1 刘昊1 张景旭1谢世卿2 祁康辉3 王雄飞1

(1 兰州大学物理科学与技术学院 甘肃 兰州 730000

2 兰州大学萃英学院 甘肃 兰州 730000

3 中国科学院近代物理研究所 甘肃 兰州 730000)


第二章  vim

vim 和 vi 差不多,具体的区别对我们使用者来说也不重要,我们也可以将快捷指令 v 和 vi 都指向 vim。

vi 可以分为三种状态,分别是普通模式(normal mode)、

插入模式(insert mode)和

命令模式(command mode)。

命令模式其实就是在底行(last line)进行操作。

插入模式自然不用说,就像 word 或者 notepad(记事本)一样输入文本即可。

在普通模式下按 a、i、o 都可以进入插入模式,a 光标后移一格,i 光标不动,o 光标下移一行(插入空白行)。按 esc 键退出插入模式。无论是普通模式还是插入模式,光标都可以通过上下左右键或 hjkl 键自由移动,通过 pg up、pg dn 或者 ctrl+b(backward)、ctrl+f(forward)可以实现向上向下翻一整页,而 ctrl+u/d 则是翻半页。

普通模式下,双击 g(gg)到达文本开头,双击 G(GG)到达文本结尾,输入行号 +gg(GG)到达指定行号。

dd 删除光标所在行,delete 向后删除一个字符。

u 可以回到上一步操作,也就是撤销操作,类似于 Windows 下的 ctrl+z。

在普通模式下输入冒号进入命令模式,可以输入一些命令,回车执行。

输入数字就可以到达对应行号,特别的,首行就是 1,末行则可以输入一个较大的数 字,比如说你日常处理的文档不会超过 1000 行,那你可以输入 1111,这样就可以到达末 行。

set nu 可标注行号,w 保存,q 退出,!是强制的意思(force),比较常用的是保存退 出 wq,wq!是强制保存退出,q 退出只能在未作修改的条件下进行,否则必须用 wq 或者 q!,这是你应该思考一下到底需不需要保存,如果你是不小心做了更改,又不知道改了哪 里,那就直接 q!强制退出,文件不会变样。另外,长时间编辑文档,即使不用 wq 保存退 出,也最好时不时用 w 保存一下,否则一旦断电断网,你所做的更改就消失殆尽了。

:n1,n2s/word1/word2/g,n1、n2 为行号,写成 1,$ 就是从第一行到最后一行,或 者写成%,所以全局替换常用%s/word1/word2/g。

在普通模式下输入/或?可以用来搜索希望的关键字,如果没有找到想要的内容可以按 n 向后(对应/)或向前(对应?)继续查找,另外 N 与 n 的作用相反,所以我们只用/也可以完成向前或向后查找。

在普通模式下按 ctrl+v 可进入可视模式(块选择模式)(visual mode),可以对相邻多 行进行增删工作。上下左右移动光标,被选中的部分会被高亮,此时delete 就可以全部删除。如果想要批量插入一段话,那么就不能左右移动光标了,上下移动选中,输入大写的 I 进入插入模式,输入需要的文字,按 esc,之后你所选中的行都会被做相同的改动。

第三章 shell

Shell 具体又分为 sh、bash 和其他很多种,至少在笔者写一些简单程序时,没发现 sh 和 bash 有明显区别,下面所讲的也就是思路方面的东西,毕竟变量和循环是各种语言几乎都有的。

3.1 shell 语言性质

shell 语言兼具批处理和脚本的性质。

批处理,顾名思义,成批的处理。shell 语言写出的程序很适合做重复性的工作。

脚本语言,相对于编译语言来说,它不需要经过编译过程,可以通过简单的命令被执 行,它的执行过程也几乎是线性的,就是按照程序员所写的东西一行一行执行,即使碰到 循环,也就是把那几行代码按顺序执行多次。shell 脚本里所写的东西拿出来放到 Linux 的命令行中都可以被执行,即使是循环,把它打开,变量添上,也可以执行。虽然如此,但 每个命令单独执行都需要时间,所以为了省时间,我们把想让计算机做的事情整合到一个文本里,直接执行这个文本即可。

脚本语言比外部命令多的一些东西便是定义变量(数组)和执行循环。

3.2 变量

定义变量很自然,就是变量名 =”xx”,单引号和双引号有区别,这里不讨论。

引用变量有多种形式,这里演示几种。定义 var=”shell”,则$var=${va r}=shell, 这 两种方式的结果相同,都返回变量值,推荐带有大括号的写法,避免歧义。而变量前再加 井号 #,可输出字符串的长度,${#var}=5。

3.3 数组

对于数组,shell 只支持一维数组,对于多维数组就需要其他方法实现了,而且作为 一种比较简单的脚本语言,我认为也没必要让它用多维数组做事。定义数组也很简洁,就

是array=(x1 x2 … xn), 各数组元素之间用空格分隔。也可以给指定数组元素赋值,如 array[0]=1,array[2]=3。和 C 语言一样,数组元素从 0 开始数,后面写循环也要注意从 0 开始,最后的上限用小于号,这样循环的次数可以对上。

引用数组元素,其实就是把数组的每个元素看成一个变量,用 ${} 引用,如${array[2]}=3。

3.4 判断语句

关于 shell 的 if 语句和 test 语句,仅举一例:

字符串测试用 = 和!=,数值测试用

-eq(等于)和 -ne(不等于),以及其他的,如 -gt(大于)-lt(小于)-ge(大于等于)-le(小于等于)。If 语句结尾用 fifi,即将 if 反过来。

3.5 流程控制

循环以 for 举例:

应该说除了 do 后面不可加分号,其他语句都是可加可不加的,如果已经比较熟悉 c 语 言,那么每句都带上分号也无妨。

3.6 函数

格格式如下:

方括号里是可以省略不写的部分,但我们应该知道它们也都是有自己的含义的。function 是 shell 中的关键字,表示后面是一个函数(或者叫方法,不同语言对其称呼不 同);name 是函数名,后面的括号在其他语言中可能是需要填入参数的,但 shell 中不用,所以说也是可以省略的;函数中的 return 可以返回一个范围在 0 到 255 的整数。另外关键字 function 和参数括号必须要保留一个,不能全部省略。

函数体里的分号都是可加可不加的,除非你的函数只有一行,那才必须要加分号。

调用函数只需要键入函数名(不带括号)。如果需要传递参数,参数之间用空格隔开。如果想要调用的函数在另一个文件中,我们一样可以调用,只是要在函数名前面加一句 source function.sh。

3.7 开头

和 c 语言的 include ……类似,shell 脚本开头永远是 #!/bin/bash(sh),但是经过笔 者亲测,不加一般也能正常执行。

3.8 执行与调试

执行 shell 脚本,最简单的方法就是 sh/bash test.sh,调试就是在中间加 -x,如 sh -x 1.sh。由于 shell 脚本本来就是顺序执行,调试的显示也十分清晰,以一个正号 + 表示一句 命令,下面可能会展示命令的执行情况,如果这个 + 所执行的命令又会执行其他命令,则 以更多的正号表示。

另外,也可以通过 chmod +x 命令使脚本具有可执行权限,再用./执行。

3.9 注释

shell 中的注释符就是 #,该行在 # 后面的内容就被注释掉。

多行注释和 c 语言不同,不是基于 #,可以通过把不需要的部分构造成函数,不去调 用,间接达到(多行)注释的效果。另外也可以通过以下命令来实现:

<<!

......

!

被注释掉的部分会变红。


手机版

官方微信

访问信息

地区活动

联系我们