
文章目录
Vim编辑器
三种工作模式
vim是代码编辑器,可以用颜色或底线等方式来
显示一些特殊的信息。vim有三种工作模式,分别是指令模式(默认模式)、编辑模式、命令行模式。
- 指令模式(默认模式):可以进行删除、复制、粘贴、创建文件等动作,但是却无法编辑文件内容的。可以使用“上下左右”按键来移动光标。
- 编辑模式:除了支持默认模式的动作外,还可以编辑。按下
i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式;如果在画面的左下方会出现“INSERT或REPLACE的字样,此时才可以进行编辑。按下Esc这个按键即可退出编辑模式,返回默认模式。 - 命令行模式:在默认模式中,输入
: / ?三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中, 可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开 vim 、显
示行号等等的动作则是在此模式中达成的!
三种模式相互切换的关系图:

简易示例
1、进入指令模式(默认模式),vim t1.c。

t1.c是文件名,如果当前没有改文件,执行vim后会创建改文件。
如果要退出默认模式,按shift+z+z即可。
2、当进入到默认模式后,按i, I, o, O, a, A, r, R任意字符可进入编辑模式:

按ESC键可退出编辑模式,返回到默认模式。
3、输入: / ?三个中的任何一个按钮就可以进入命名行模式,会在末行出现对应的按钮字符。

然后输入:wq 可以保存内容并离开vim模式。

如果需要返回到默认模式,按ESC键即可。
vim快捷键
具体参考:https://www.runoob.com/linux/linux-vim.html
BASH
Shell:一般我们是用图形界面和命令去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全、复杂、繁琐等原因,用户不能直接接触内核,需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,内核和用户之间就多了一层“中间代理”,Shell 其实就是一种脚本语言,也是一个可以用来连接内核和用户的软件,我们编写完源码后不用编译,直接运行源码即可。
常用的Shell:bash由 GNU 组织开发,sh 是 UNIX 上的标准 shell,是第一个流行的 Shell,bash保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。现在sh 已经基本被 bash 代替,bash是sh的扩展补充,但是也有些是不兼容的,大多数情况下区别不大,特殊场景可以使用 bash 代替 sh。
第一个shell脚本
vim t02.sh 创建一个shell脚本文件。

在指令默认模式后进入vim编辑模式,编写程序。

第一行,#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,用的是哪种shell,后面的/bin/bash就是指明了解释器的具体位置。 最后一行#是注释。
如果提示E348:No string under cursor,说明没有进入编辑模式,需要按i, I, o, O, a, A, r, R任意字符进入编辑模式,进行编写shell脚本。
最后在命令终端中执行脚本
第一种:/bin/bash t02.sh
第二种:sh t02.sh

变量
shell语法是弱类型的写法,没有强制要求变量必须显式声明。
注意:变量的等号两边不能有空格
#shell语法类似弱类型语言,基本不用显式定义变量的类型
#定义变量
name="hzw"
age=18
#打印变量,字符串模版方式拼接字符串
echo "name: ${name}; age: ${age}" # 输出
#修改变量值
age=20
echo "name: ${name}; age: ${age}"
字符串的拼接可以用字符串模版,这和其他语言kt是类似的。
变量的删除与只读:
alias="菜鸟"
#删除变量 unset关键字
unset alias
echo "alias: ${alias}"
#只读变量 readonly关键字声明
readonly sex=1
sex=0 # 尝试修改,会
如果只读变量中间有修改动作,在输出时报错:

数组
shell只支持一维数组,不支持多维数组
echo =======数组=========
#创建数组实例
array=(a 2 "bb" d)
#读 下标
echo itme= ${array[0]}
#读取所元素
echo "所有元素:${array[*]}"
echo "所有元素:${array[@]}"
#删除 unset 根据下标
unset array[2]
echo "所有元素:${array[@]}"
#获取数组长度
echo "数组长度:${#array[*]}"
echo 数组长度:${#array[@]}
#数组遍历
for item in ${array[@]}
do
echo item=$item
done
#第二种遍历
for (( i=0; i<${#array[@]}; i++ ));
do
echo i=$i item=${array[$i]}
done
结果:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
检测上个命令是否执行成功
echo $?监测上个命令是否执行成功,0则是成功了。

输出文件内容可以用命令
cat xxx.sh
查看脚本的路径
通过$PWD在shell脚本可以获取当前脚本的路径,对写脚本是很有帮助的。
#查看当前脚本的路径
echo pwd: $PWD
结果:

接收命令执行时的参数
#接收命令执行时的参数
echo 文件名称:$0
echo 第一个参数:$1
echo 第二个参数:$2
$0:当前脚本的文件名$n:获取对应的位置的参数

流程控制语句
if-else
语法:if [...]; then ... ; fi 或者 if ((...));then ... ; fi
(...)是算术表达式,比如 a > b
如果用条件判断用大括号[...],条件语法必须用字符,如下
eq等于ne不等于gt大于ge大于等于lt小于le小于等于
## if-else
a=10
b=10
c=20
# 一行的写法,每个语句用逗号分隔; []内的语句必须用一个空格分开
if [ $a -eq $b ]; then echo "a 等于 b : 20 "; fi
# 多行的写法,逗号可以省略
if [ $a -eq $b ]
then
echo "a 等于 b : $b "
fi
多条件if-elif-else
#多条件 if-elif-else 这样用()做为条件判断方式
# if后面必须用空格分开
if (($a>$b))
then
echo "a 等于 b:true"
elif (($c>$b))
then
echo "c 大于 b:true"
else
echo "c 大于 a"
fi
for
语法:for item in item1 item2 ... itemN; do command1; command2… done;
# for一行的写法
for value in 1 2 3 4 5; do echo "var: $value"; done;
# for多行的写法
for value in hello world shell
do
echo "value:$value"
done
输出:
var: 1
var: 2
var: 3
var: 4
var: 5
value:hello
value:world
value:shell
while
while一般用于执行条件下一系列命令;可用于读取键盘信息。
语法:
while condition
do
command
done
例子:
# while
d=1
while(($d<=5))
do
echo "d=$d"
let "d++" # 自增
done
其中let语法,是用于计算操作语句,比如加减乘除、自增等,变量计算中不需要加上$$来表示变量。
可用于读取键盘信息:
echo 按下ctrl+d退出输入
echo -n "输入名称:"
while read name
do
echo 名称: $name
done
name作为输入信息的变量,退出键盘输入按ctrl+d可退出,确认输出结果按enter键

无限循环
while true
do
command
done
或
for (( ; ; ))
until
until语法与while是一样的,只不过条件为false才会执行循环体。
## 注意 until条件为false才会执行循环体,true时则会结束循环
e=1
until ((e>5))
do
echo "e=$e"
let "e+=1"
done
结果:

跳出循环
与其他语言是类似的,跳出循环有:break 和 continue关键字完成。
for var in 1 2 3 4 5 6 7
do
if ((var==3))
then
continue #跳出本轮循环,继续执行后面
elif ((var==6))
then
break #终止循环
else
echo "var=$var"
fi
done
结果:

case … esac
case ... esac语句与其他语言的switch...case是类似的,其中;;相当于break,*相当于default。
read s #接收键盘输入的内容
case $s in
60)
echo s=$s
;;
70)
echo s=$s
;;
80)
echo s=$s
;;
*)
echo 哈哈不是我
;;
esac
结果:

函数
shell函数语法与js有点类似,通过function声明。
# 定义
function test(){
echo 第一个参数: $1
echo 第二个参数:$2
echo 参数总共有 $# 个
}
# 调用
test 100 hzw
结果:

处理参数的特殊符号:

多行注释
https://zhuanlan.zhihu.com/p/54494213
填坑
1、在修改文件中如果报错“readonly” option is set(add ! to override);可以尝试以下方法:
首先确保是在命令行模式下,输入:wq! 强行保存退出。
2、如果在编辑模式修改了代码,退出时报错:
E325: ATTENTION
Found a swap file by the name “.t02.sh.swp”
输入q退出到终端,通过命令行rm 对应的文件路径可解决。


33万+

被折叠的 条评论
为什么被折叠?



